Giới Thiệu
Trong phần trước mình đã hướng dẫn các bạn cách cài đặt server cũng như test đóng ngắt thử đèn led trên NodeMCU thông qua Terminal Raspberry. Vấn đề đặt ra là mỗi lần bạn muốn điều khiển đèn led đó thì bạn lại phải mở Termial nên và gõ lệnh sao? Trong loạt bài viết tới mình sẽ hướng dẫn các bạn cách giao tiếp giữa WiFi Kit ESP8266 và Raspberry vẫn dựa trên nền tảng MQTT nhưng mình sẽ dùng Node-Red để làm giao diện điều khiển!
Chuẩn Bị
1. Phần cứng
- Kit RF Thu Phát Wifi ESP8266 NodeMCU Lua CP2102
- Một board Raspberry Pi ( ở đây mình sử dụng Raspberry Pi 3 Model B) bạn có thể tham khảo mua tại đây . Bạn nên mua đủ nguồn , thẻ nhớ – ít nhất 16GB và vỏ case để bảo vệ tốt cho board RasPi của bạn!
2. Phần mềm
-
Raspberry Pi
Các bạn cần cài đặt server MQTT trên Raspberry. Nếu bạn chưa cài đặt bạn có thể tham khảo bài viết: Raspberry Pi giao tiếp với NodeMCU ESP8266 qua giao thức MQTT – Phần 1
-
Arduino IDE
Các bạn cần cài đặt sẵn Arduino IDE có tương thích với ESP8266. Nếu bạn chưa biết cách cài đặt có thể tham khảo bài viết sau: Hướng dẫn lập trình ESP8266 với Arduino IDE.
Hướng dẫn
1. NodeMCU ESP8266
Lưu ý: Bạn phải chắc chắn mình đã cài đặt được tool board NodeMCU cho Arduino IDE trước. Và đã được cài đặt thư viện PubSubClient. Nếu chưa bạn có thể tham khảo cách cài đặt tại đây.
Chúng ta vẫn sẽ sử dụng source code của bài trước. Các bạn nên xem qua lại bài viết trước để nắm rõ hơn: Raspberry Pi giao tiếp với NodeMCU ESP8266 qua giao thức MQTT – Phần 2
Full source code
#include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "NhaptenWiFi"; // Nhập tên WiFi const char* password = "Nhapmatkhau"; // Nhập Mật khẩu WiFi const char* mqttServer = "IPADDRESS"; // Nhập địa chỉ của server MQTT String clientId = "ClientESP8266"; // Client ID của mạch const char* m_topic = "Makerlab"; // Topic mình đã tạo ở trên WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int value = 0; void setup() { pinMode(D0, OUTPUT); Serial.begin(115200); setup_wifi(); /* Hàm start - read Callback client */ client.setServer(mqttServer, 1883); client.setCallback(callback); } void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } /* Ham call back nhan lai du lieu */ void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message read ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); xulidulieu(payload); } void xulidulieu(byte* data) { if ((char)data[0] == '1') { digitalWrite(D0, LOW); client.publish(m_topic, "LED ON"); } else if ((char)data[0] == '0') { digitalWrite(D0, HIGH); client.publish(m_topic, "LED OFF"); } } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect(clientId.c_str())) { Serial.println("connected"); client.publish(m_topic, "Reconnect"); // Gửi dữ liệu client.subscribe(m_topic); // Theo dõi dữ liệu } else { Serial.print("failed, rc="); Serial.print(client.state()); // Doi 1s delay(1000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }
Các bạn nên lưu ý những phần này:
+ Topic: ở trên mình đặt tên topic là “Makerlab“
+ IP Address Server: Trong bài viết trước mình đã hướng dẫn cài đặt IP tĩnh, nếu bạn không nhớ IP Address bạn có thể tham khảo lại! Ví dụ ở đây của mình là 192.168.10.130
+ Cách thức điều khiển đèn LED: Khi ESP8266 đọc được dữ liệu gửi về từ topic: “Makerlab” có giá trị = 1 không? => Nếu có thì sẽ bật đèn LED. Ngược lại nếu dữ liệu nhận về từ topic có giá trị = 0 thì sẽ tắt đèn LED
2. Node-Red MQTT trên Rasberry Pi
Các bạn khởi động Raspian lên và mở Terminal lên và bật Node-Red. Hầu hết các bản cập nhật mới đều có sẵn Node-Red

Nếu chạy Node-Red thành công thì bạn sẽ nhận được địa chỉ ở dòng cuối Terminal
Bây giờ các bạn sẽ dùng trình duyệt để truy cập vào trang giao diện của Node-Red, ví dụ:
Chúng ta sẽ cần cài đặt thêm Node-red-dashboard để hiển thị giao diện: Click vào dấu 3 gạch ở góc bên phải -> Manage palette
Nhập vào ô tìm kiếm : node-red-dashboard -> Install
Sau khi cài đặt xong các bạn sẽ thấy được giao diện dashboard ở phía dưới bên trái:
Các bạn kéo vào switch trong dashboard
và mqtt-out trong network
Cài đặt cho swtich
Lưu ý: Off payload các bạn chọn là Number : 0 nha , mình chọn nhầm -_-
Cài đặt cho mqtt-out
+ Bạn có thể đặt tên cho mqtt ở phần Name
+ Nhập address server là địa chỉ IP Address của bạn
+ Nhập Topic là topic của bạn. Ở trong bài này là “Makerlab”
Sau đó các bạn truy cập vào trang điều khiển. Bạn thay thế “yourIPAddress” bằng địa chỉ IP trên server của bạn . Ví dụ http://192.168.1.130:1880/ui
Các bạn sẽ thấy giao diện điều khiển như thế này
Ngoài ra bạn cũng có thể dùng điện thoại để truy cập vào giao diện điều khiển, và kết quả đạt được sẽ như thế này:
Tổng Kết
Vậy trong bài này chúng ta đã:
+ Xây dựng giao diện điều khiển bằng Node-Red MQTT
+ Giao tiếp giữa Node-Red MQTT và ESP8266
+ Cách sử dụng Switch và mqtt-out
Vậy là trong bài này mình đã hướng dẫn xong cách tạo một Switch trong Node-Red cũng như cài đặt Dashboard điều khiển. Trong bài viết tới chúng ta sẽ dùng Node-red dashboard trên điện thoại để điều khiển ESP8266 đóng ngắt thực tế một bóng đèn 220V!
Chúc các bạn thành công với dự án của mình !
Mình có thể sử dụng Blynk để thay thế cho Node-Red được không ạ?
Và nếu được thò cấu hình như thế nào vậy?