You are on page 1of 7

Điều khiển ESP8266 bằng giọng nói với Google Assistant chỉ với 200 ngàn

Trên trang Genk.vn có giới thiệu giải pháp điều khiển bằng giọng nói sử dụng Raspberry Pi kết hợp với
Google Home, hoặc điện thoại. Tuy nhiên, sử dụng Raspberry Pi vẫn chưa thực sự kinh tế, nó chỉ phù
hợp để làm server điểu khiển nhiều thiết bị. Nếu chỉ điều khiển 1 thiết bị hoặc điều khiển nhiều lỗ cắm
điện trên cùng một hệ thống thì sử dụng chip ESP8266 kinh tế hơn.

Trong bài hướng dẫn này, tôi hướng dẫn các bước căn bản để điều khiển module ESP8266 bằng giọng
nói với sự giúp đỡ của Google Assistant, dịch vụ IFTTT, và Adafruit IO. Tôi điều khiển ESP8266 để tắt
hoặc mở 2 rờ le, tích hợp chúng vào ổ cắm điện với chi phí khoảng 200 ngàn.

Công cụ lập trình: Arduino IDE

Hướng Dẫn cách lập trình cho ESP8266 với Arduino

http://dientunht.blogspot.com/2018/02/lap-trinh-esp8266-esp-12e-nodemcu-su-dung-arduino.html

Linh kiện:

Module ESP8266 (ESP-12E)

Rờ le loại điều khiển bằng điện áp 5V

Nguồn điện 5V, dây nguồn và một số thứ khác.

Ổ cắm điện.

Cài app Google Assistant lên điện thoại (Có sẵn trên chợ ứng dụng Android và iPhone).

Đăng ký dịch vụ trực tuyến.

Để điều khiển được ESP8266, bạn cần đăng ký tài khoản ở 2 dịch vụ trực tuyến:

1. Dịch vụ adafruit, bạn chọn đăng ký gói miễn phí. Đăng ký tại link : https://io.adafruit.com
2. Đăng ký dịch IFTT tại link https://platform.ifttt.com/ . Bạn phải dùng tài khoản Google Assistant
chung với tài khoản IFTTT.

Cài đặt thư viện Arduino lập trình cho ESP8266

Trước khi nạp chương trình cho ESP8266, bạn cần cài đặt để Arduino có thể làm việc được với ESP8266.
Các bạn tham khảo bài viết sau đây:

http://dientunht.blogspot.com/2018/02/lap-trinh-esp8266-esp-12e-nodemcu-su-dung-arduino.html

Bước 1: Cài đặt Adafruit IO

Adafruit IO là nền tảng IOT xây dựng dựa theo giao thức Message Queue Telemetry Transport (MQTT).
Đây là một giao thức truyền thông điệp (message) theo mô hình publish/subscribe (xuất bản – theo dõi),
sử dụng băng thông thấp, độ tin cậy cao và có khả năng hoạt động trong điều kiện đường truyền không
ổn định.

Trong Adafruit IO, sau khi đã tạo tài khoản tại Adafruit IO, bạn trở lại trang home, chọn menu "Feeds"
bên trái màn hình. Chọn Actions từ menu sổ xuống và tạo 1 feed mới gọi là "onoff".

Tiếp theo, vào Dashboards, menu bên trái. Chọn mục Actions từ menu sổ, vào tạo một bảng theo dõi
mới (dashboard), đặt tên là "LightSwitch". Mở bảng theo dõi mới, bắt đầu với 1 trang trống. Nhấn biểu
tượng dấu cộng (+) màu xanh sẽ cho bạn tạo mới linh kiện. Bây giờ, chúng ta sẽ tạo 1 nút nhấn toggle.
Khi được nhắc chọn 1 feed, bạn chọn feed đã tạo trước đó, và tất cả những thứ còn lại để theo mặc
định.

Tới đây là kết thúc mọi việc với Adafruit IO. Tiếp theo kết nối ESP8266 tới MQTT Broker.
Kế nối ESP8266
Trước khi lập trình, bạn sẽ cần cài đặt thư viện Adafruit MQTT Client, vào mục quản lý thư viện của
Arduino (Sketch > Include Library > Library Manager...). Tìm thư viện với từ khóa “Adafruit MQTT
Client” và cài vào chương trình.

Mở code mẫu từ trong ví dụ Adafruit MQTT Client/mqtt_esp8266.ino.


Có 3 thư viện bạn cần trong chương trình của bạn:
#include <ESP8266WiFi.h>

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

Cấu hình tài khoản mạng wifi nhà bạn


#define WIFI_SSID "<Tên Wifi nhà bạn>"

#define WIFI_PASS "<Mật khẩu wifi nhà bạn>"

#define AIO_SERVER "io.adafruit.com"

#define AIO_SERVERPORT 1883

#define AIO_USERNAME "<Tên đăng nhập tại Adafruit IO >"

#define AIO_KEY "<Mã IO Key trên Adafruit IO>"

Những khai báo này dùng kết nối tới tài khoản Adafruit IO. Khóa Adafruit IO là chuỗi ký tự bạn có
thể tìm thấy bằng cách nhấn vào menu "View AIO Key" bên trái của Adafruit IO.

Tiếp theo, tạo đối tượng WiFiClient và Adafruit_MQTT_Client như là các biến toàn cục:
WiFiClient client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

// Setup a feed called 'onoff' for subscribing to changes.

Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/onoff");

Bây giờ trong hàm setup, chúng ta sẽ kết nối tới WiFi và MQTT server:
void setup() {

Serial.begin(115200);

delay(10);

Serial.println(F("Adafruit MQTT demo"));

// Connect to WiFi access point.

Serial.println(); Serial.println();

Serial.print("Connecting to ");

Serial.println(WLAN_SSID);

WiFi.begin(WLAN_SSID, WLAN_PASS);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}
Serial.println();

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

// Setup MQTT subscription for onoff feed.

mqtt.subscribe(&onoffbutton);

pinMode(D1, OUTPUT); //khai báo ngõ ra cho relay

digitalWrite(D1, HIGH); //tắt relay

Kết nối với Google Assistant thông qua IFTTT

Bước cuối cùng, chún ta sẽ kết nối Google Assistant tới Adafruit IO MQTT Broker để điều khiển tắt mở
bằng giọng nói. Chúng ta sử dụng nền tảng IFTTT (If This Then That) có hàng trăm dịch vụ khác nhau.

Địa chỉ truy cập https://ifttt.com/my_applets . Chọn nút "New Applet" để tạo Applet điều khiển bằng giọng nói.
Chọn ("If This") để cài đặt khẩu lệnh và chọn ("Then That") để chọn feed đã tạo trước đó. Mỗi Applet
chỉ phục vụ cho 1 khẩu lệnh, nên bạn có 2 lệnh tắt, mở thiết bị thì bạn cần tạo 2 applet.

Trong "Google Assistant" chọn "Say a simple phrase" để cài đặt câu lệnh ví dụ như "Turn the light on,"
"Turn on the light," và "Switch the light on". Hiện tại Google Assistant chưa hỗ trợ tiếng Việt, nên bạn
chỉ có thể sử dụng tiếng Anh.

Phần cuối của applet là Action, phản hồi tới Trigger. Trong phần dịch vụ chọn "Adafruit", và xác định
điều khiển Action, chọn "Send data to Adafruit IO". Chọn Adafruit IO feed bạn sẽ gửi dữ liệu, trong
trường hợp này là "onoff". Nhập dữ liệu sẽ gửi, ví dụ "ON", dữ liệu này sẽ được gửi tới chip ESP8266
trong khoảng 1 giây. Tương tự, bạn tạo thêm applet để gửi lệnh "OFF" tới ESP8266.

Chạy thử

Nếu không có Google Home, bạn có thể sử dụng điện thoại cài app Google Assistant. Mở app và đọc
khẩu lệnh như đã tạo trong các applet. Phần mềm sẽ tìm kiếm và trả về lệnh theo như đã khai báo ở trên.
Nếu mọi thứ đã suôn sẻ, thiết bị của bạn sẽ hoạt động như ý bạn mong muốn.

Các vấn đề gặp phải

Có những nơi bạn điều khiển bằng giọng nói không được, thì bạn cần kiểm tra một vài thứ.

Trạng thái tắt mở có thể hiện trên bảng điều khiển Adafruit IO không? Nếu không, ESP8266 chưa kết nối
tới máy chủ, các feed. Kiểm tra ESP8266 trên Serial Monitor.

Google Assistant dịch có chính xác những gì bạn nói không ?.

Google Assistant có trả lại dữ liệu không? Nếu không, bạn cần kiểm tra tài khoản Google và tài khoản
IFTTT có cùng 1 tài khoản hay không.
Bảng điều khiển Adafruit IO không cập nhật các applet IFTTT? Nếu không, kiểm tra tài khoản Adafruit
IO và tài khoản IFTTT có kết nối không.

You might also like