Điều khiển thiết bị bằng Facebook Massenger thông qua Adafruit, Webhooks sử dụng NodeMCU ESP8266

01 Tháng 07 2019 | Đăng bởi: Cao Thanh Hùng

 

Hôm nay mình sẽ hướng dẫn các bạn cách sử dụng Facebook Messenger để điều khển thiết bị thông qua io.adafruit.com.

Nếu bạn chưa biết cách cài đặt NodeMCU ESP8266 trên Arduino IDE thì các bạn xem bài viết bên dưới nhé.

 

Thiết lập Feeds và Dashboards trên iO Adafruit

Tạo Feeds iO Adafruit

Các bạn truy cập vào website io.adafruit.com để tạo nhé.

Chọn "Feeds - Actions - Create a New Feed" .

 

 

  • Name: Đặt tên cho Feed "onoff".

  • Description: Phần mô tả thông tin dự án bạn đang thực hiện (phần này không bắt buộc) và nhấn Create để hoàn thành.

 

Dashboards iO Adafruit

Bây giờ chúng ta sẽ tạo một Dashboards (bảng điều khiển) để điều khiển trực tiếp trên Adafruit IO.

Chọn Dashboards > Actions > Create a New Dashboard.

 

 

Chúng ta đặt tên cho bảng điều khiển và mô tả dự án đang thực hiện.

 

 

Chọn dấu  +  để tạo block mới và chọn Toggle như hình.

 

 

Tiếp theo vào Group / Feed đã tạo (Create a New Feed) và nhấn Next step.

 

 

Ở mục Block Title mình đặt là Arduinokit.vn, ở đây bạn ghi gì cũng được nhé.

  • Button On Text: 1 (trạng thái bật).

  • Button Off Text: 0 (trạng thái tắt).

Tiếp theo nhấn Create Block.

 

Active Key Adafruit

Bạn chọn Dashboards/Bảng điều khiển chọn cái chìa khóa màu vàng.

 

Chúng ta quan tâm đến Username và Active Key.

Phần này chúng ta Copy và cho vào trong Code nhé.

Thiết lập IFTTT Webhooks

Trong bài viết  mình đã hướng dẫn chi tiết cách để tạo tài khoản trên IFTTT nên phần này các bạn xem lại bài trước để hiểu rõ hơn nhé.

Sau khi đăng nhập thành công các bạn Click vào "My Applets" và chọn "New Applet" để tạo một dự án mới.

 

 

Bấm vào  + this. 

 

 

Và chọn Webhooks nhé.

 

 

Tiếp theo ta chọn  Receive a web request nhé.

 

 

Nhập bất kỳ tên sự kiện nào ở đây mình ghi là "Arduinokit.vn"

Sau đó nhấn vào Create trigger

 

 

 Tiếp theo, nhấp vào  + that.

Tìm kiếm đến Adafruit và bấm kết nối. 

 

 

 

  • Tiếp theo nhấp vào Send data to Adafruit IO

  • Mục Feed name mình chọn  "onoff"  ở phần tạo một Feed dự án ban đầu.

  • Chọn Value1 bằng cách nhấp vào Add ingredient.

  • Tiếp theo nhấn Create action.

 

 

Quay lại My Applest > Services > Webhooks vào phần Settings và Copy đoạn mã được bôi đậm như hình, (Lưu đoạn mã vào note để lát sử dụng nhé).

 

Thiết lập chatfuel với Facebook 

Truy cập https://chatfuel.com/ và nhấp vào đăng nhập bằng Id Facebook của bạn. Lưu ý trong bước này bạn cần tạo cho mình một Fanpage trên Facebook.

Truy cập vào Link để đăng ký: https://www.facebook.com/pages/creation/ 

Sau khi hoàn tất việc đăng ký nhấn Create from Template để bắt đầu thiết lập.

 

 

Ở mục Automate chúng ta cần đặt câu lệnh để điều khiển thiết bị.

 

 

  • Nhấn vào RELAY ON chọn dấu + (tô vàng) ở mục Test & Send content  ta chọn Test và điền câu lệnh trả về ở đây mình ghi là "OK.Đèn Đã Được Bật".

  • Nhấn vào RELAY OFF chọn dấu + (tô vàng) ở mục Test & Send content  ta chọn Test và điền câu lệnh trả về ở đây mình ghi là "OK Đèn Đã Được Tắt".

 

 

Thiết lập Chatfuel với IFTTT

Thiết lập URL cho 2 nút điều khiển RELAY ONRELAY OFF.

Chọn  Relay ON và nhấp vào + đăng nhập và chọn APIJSON từ các Plugin Chatfuel.

 

Các bạn làm theo cú pháp: https://maker.ifttt.com/trigger/Event Name/with/key/mã kích hoạt/?value1=1

  • "Event Name": Tên sự kiện mình đặt là Arduinokit.vn

  • "mã kích hoạt": m02i62jB5pkMh3xGAl5nljPnWtA0EofB2iJWieuVgdo

  • "value=1": dành cho RELAY ON.

URL 1https://maker.ifttt.com/trigger/Arduinokit.vn/with/key/m02i62jB5pkMh3xGAl5nljPnWtA0EofB2iJWieuVgdo/?value1=1

URL 2https://maker.ifttt.com/trigger/Arduinokit.vn/with/key/m02i62jB5pkMh3xGAl5nljPnWtA0EofB2iJWieuVgdo/?value1=0

 

 

Nhấp vào mục Set Up AI ở bên trái màn hình: Ở phần này các bạn có thể đặt thêm các câu thoại dùng để bật tắt thiết bị.

 

 

Sơ đồ đấu nối

NodeMCU ESP8266

Relay

Vin

5V

GND

GND

D0

IN

 

Các linh kiện cần thiết cho dự án

Tên linh kiện Số lượng
NodeMCU ESP8266 1
Dây cắm 3
Relay 1
Bóng đèn 220V 1

Code

#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define WLAN_SSID "Nha Tro 4"
#define WLAN_PASS "nguyennam"
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT  1883
#define AIO_USERNAME "hu123"
#define AIO_KEY "62fd797b121e4f2f89353f0711393257"
#define led D0

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/onoff");
void MQTT_connect();

void setup() {
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(115200);
  delay(10);
  Serial.println(F("Adafruit MQTT demo"));
  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());
  mqtt.subscribe(&onoffbutton);
}

uint32_t x=0;

void loop() {
  MQTT_connect();
  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &onoffbutton) {
      Serial.print(F("Got: "));
      Serial.println((char *)onoffbutton.lastread);
      String response = (char*)onoffbutton.lastread; 
      if (response == "1"){
      digitalWrite(led, HIGH);
      }
      else {
        digitalWrite(led, LOW);
      }
    }
  }
}

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!");
}

Thư viện

Download thư viện "Adafruit_MQTT.h": Tải ngay

Download thư viện "Adafruit_MQTT_Client.h" :Tải ngay

Giải thích Code

WiFi.begin("wifi router name", "wifi router pass");
  • "WLAN_SSID": Tên Wifi.

  •  "WLAN_PASS": Mật khẩu Wifi.

 

#define AIO_USERNAME        "hu123"
#define AIO_KEY             "62fd797b121e4f2f89353f0711393257"
  • Username: "hu123" 

  • Active key: "62fd797b121e4f2f89353f07113xxxxx"

 

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

Các bạn làm theo cú pháp: "&mqtt, AIO_USERNAME/feeds/feedname"

  • "username": Tên người dùng.

  • "feeds": cái này các bạn để mặc định.

  • "feedname": tên Feed mà bạn đã đặc cho dự án.

Bài viết liên quan

Viết bình luận: