Điều khiển ESP8266 bằng giọng nói với Google Assistant chỉ với 200 ngà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 IDE
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.

Phần mềm
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:

Dịch vụ adafruit, bạn chọn đăng ký gói miễn phí. Đăng ký tại link : https://io.adafruit.com


Đă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ết 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:

1
2
3
4
5
#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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#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 WiFiClientAdafruit_MQTT_Client như là các biến toàn cục:

1
2
3
4
5
6
7
8
9
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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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úng 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.

Trả lời

Email của bạn sẽ không được hiển thị công khai.