ĐIỀU KHIỂN THIẾT BỊ BẰNG GIỌNG NÓI QUA GOOGLE ASISSTANT


Chào mọi người, đây là bài hướng dẫn cách điều khiển thiết bị thông qua Google Asisstant. Ở bài viết này mình sử dụng các server có sẵn Adafruit & IFTTT.

Để có thể đi vào bài hướng dẫn, trước tiên các bạn cần chuẩn bị một số KIT và Module như sau:
  1. KIT Wifi NodeMCU ESP8266 CP2102 hoặc CH340 đều được, đối với loại CH340 nếu máy bạn chưa có driver thì phải cài thêm driver tại: đây
  2. Module relay (rơ-le) 5V
  3. Bóng đèn 220V và các loại dây dẫn

I. Phần hướng dẫn các bạn cài đặt NodeMCU IDE.

(các bạn đã cài rồi thì bắt đầu từ phần II)
Khi đã chuẩn bị đầy đủ phần cứng, chúng ta tải phần mềm lập trình. Mình sử dụng Arduino IDE cho windows, link tải tại: đây
Sau khi đã tải về và cài đặt, các bạn thực hiện các bước cài đặt sau để có thể giao tiếp với KIT NodeMCU ESP8266.
  1. Vào thẻ File > Preferences, một hộp tùy chọn mở ra. Các bạn tìm đến hộp Additional Broads manager URLs copy đoạn địa chỉ sau đây, dán vào đấy và nhấn OK để lưu lại: http://arduino.esp8266.com/versions/2.5.0/package_esp8266com_index.json 
  2. Tiếp theo vào Tool > Board > Board Manager, một hộp tùy chọn hiện ra. Tìm đến gói ESP8266 by ESP8266 Community cick vào Install để cài đặt
 

Đã xong phần cài đặt phần mềm lập trình, chúng ta thử test xem sao. Các bạn vào lại thẻ Tool > Board, một bảng tùy chọn hiện ra, chọn đúng Board NodeMCU 1.0




Tiếp theo, các bạn kết nối KIT NodeMCU với máy tính bằng cáp smartphone, đợi một xíu để máy tính nhận Driver. Khi đã nhận Driver rồi, các bạn lại mở thẻ Tool > Port chọn cổng COM tương ứng với cổng USB mà các bạn đang kết nối với KIT NodeMCU (thường thì cổng COM cuối cùng trong danh sách Port chính là cổng COM đang kết nối với KIT NodeMCU)




Để test, các bạn chọn thẻ File > Examples > esp8266 > Blink.
  



Một chương trình mẫu sẽ được đưa ra màn hình, các bạn nạp chương trình này vào KIT NodeMCU bằng cách nhấn vào nút Upload (hình mũi tên) ngay dưới thẻ Edit. Sau khi đã nạp xong, nếu đèn trên KIT NodeMCU nhấp nháy thì các bạn đã cài đặt thành công.

II. Phần hướng dẫn cho các bạn đã cài đặt thành công NodeMCU IDE.

Hey, nếu bạn đã đến phần này thì nghĩa là bạn đã sẵn sàng cho điều khiển nhà thông minh. Yêu cầu bạn phải cài đặt thành công Google Asisstant và biết cách sử dụng rồi nhé. Let's go!

1. Tạo tài khoản Adafruit tại: https://accounts.adafruit.com/users/sign_up
- Sau khi đăng kí tài khoản và đăng nhập xong, các bạn truy cập vào: https://io.adafruit.com
- Chọn vào thẻ Action > Create a new Dashboard để tạo bảng điều khiển mới.
- Mở Dashboard các bạn vừa tạo lên, chọn Create a new Block (dấu cộng màu xanh) và chọn Toggle (on / off).
- Ở hộp Enter a new feed name chúng ta nhập Relay, Chọn Create
- Chọn new feed Relay chúng ta vừa tạo, nhấn next step
- Block title: Relay, Button on text: 1, Button off text: 0, chọn Create Block
Chọn Your secret AIO key (chìa khóa màu vàng), một cửa sổ thông tin hiện ra và bạn hãy lưu lại User nameActive Key.




2. Tạo tài khoản IFTTT (Continue with Google) tại: https://ifttt.com/join
Sau khi đăng kí tài khoản và đăng nhập xong, chọn My Applets > New Applet
- Một trang  if this then that hiện ra, các bạn nhấn vào this và tiến hành cài đặt
- Ở ô Search Services các bạn tìm Google Asisstant và chọn nó
-  Tiếp tục chọn Say a simple pharase
- Ở ô "What do you want to say?" bạn nhập lệnh mà bạn dùng để điều khiển như là "Turn on the light", các ô tiếp theo là các lệnh khác.

Ở ô "What do you want the Assistant to say in response?" bạn nhập câu trả lời của Google Asisstant sau lệnh của bạn ví dụ "Done, sir!"
- Chọn Create a Trigger và tiếp tục vào cài đặt thẻ that
Ở ô Search Services các bạn tìm Adafruit, chọn nó và mở hộp Send data to Adafruit IO
- Feed name: Relay, Data to save: 1
- Lưu lại và nhấn Check now

Tạo lệnh tắt đèn chỉ việc tạo một New Applet khác chỉ khác ở chỗ các câu lệnh và quan trọng là Data to save: 0



OK, chúng ta vào Google Assistant đọc lệnh và kiểm tra xem câu trả lời có đúng như chúng ta đã cài đặt không. Nếu Google Assistant trả lời đúng như chúng ta cài đặt thì đã xong bước kết nối server, bây giờ chúng ta tiến hành lập trình cho KIT NodeMCU.

3. Lập trình cho NodeMCU:
- Đầu tiên chúng ta mở Arduino IDE lên, cài thư viện này vào nếu thiếu: https://bitly.vn/3fp-
- Sau đó paste đoạn code này vào:

# include <ESP8266WiFi.h>
# include "Adafruit_MQTT.h"
# include "Adafruit_MQTT_Client.h"

# define Relay D0

# define WLAN_SSID "Ten Wifi ban dang su dung"
# define WLAN_PASS "Password cua Wifi"
/ ** ** ** ** ** ** ** ** ** ** ** ** *Adafruit.io
Setup ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * /

# define AIO_SERVER "io.adafruit.com"
# define AIO_SERVERPORT 1883 // báo lỗi thì đổi sang 883

# define AIO_USERNAME "Codingisfunny"
# define AIO_KEY "0cc116590533482d9858aca73c33f8ba"


// Xem chú thích 01 ở dưới
/ ** ** ** ** ** ** Global State (you don't need to change this!) ******************/

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

/ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** Feeds ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * /

// Adafruit_MQTT_Subscribe
Light1 = Adafruit_MQTT_Subscribe( & mqtt, AIO_USERNAME, "/feeds/Relay");

void MQTT_connect();

void setup() {
Serial.begin(115200);

pinMode(Relay, OUTPUT);

// 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( & Light1);
}

void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe * subscription;
while ((subscription = mqtt.readSubscription(20000))) {
if (subscription == & Light1) {
Serial.print(F("Got: "));
Serial.println((char * )Light1.lastread);
int Light1_State = atoi((char * )Light1.lastread);
digitalWrite(Relay, Light1_State);
int status1 = digitalRead(D0);
Serial.print(Light1_State);
Serial.print(status1);
}
}

Serial.print(digitalRead(D0));
}

void MQTT_connect() {
int8_t
ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) {
// connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait
5
seconds
retries - -;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");
}

Chú thích: Phần tô đỏ các bạn thay thế bằng User nameActive key mà mình đã yêu cầu các bạn lưu lại  khi cài đặt IO Adafruit.

Sau khi dán code vào Arduino IDE thì các bạn kiểm tra lại Board, Port và tiến hành nạp Code. Bây giờ đến phần kết nối KIT với Module, các bạn kết nối theo sơ đồ sau.




Cuối cùng, cấp nguồn cho KIT NodeMCU và bóng đèn rồi ra lệnh cho Google Asisstant thôi nào. Mọi thắc mắc vui lòng bình luận phía dưới blog, mình sẽ giải đáp cho các bạn, Chúc các bạn thành công!


(Bài viết có tham khảo từ: https://www.instructables.com/id/Control-Your-Projects-With-Google-Assistant-and-Ad/)