Thứ Sáu, Tháng Chín 25, 2020
Trang chủ DIY Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1:...

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 – Bài 1: Bật tắt đèn LED

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

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ị = 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

node-red

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

Nếu chạy Node-Red thành công thì bạn sẽ nhận được địa chỉ ở dòng cuối Terminal

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

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ụ:

http://192.168.10.130:1880/

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

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

Nhập vào ô tìm kiếm : node-red-dashboard -> Install

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

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:

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED (5)

Các bạn kéo vào switch trong dashboard 
Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

mqtt-out trong network

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

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

http://yourIPAddress:1880/ui

Các bạn sẽ thấy giao diện điều khiển như thế này

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

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:

Node-Red MQTT với Raspberry Pi và WiFi Kit ESP8266 - Bài 1 Bật tắt đèn LED

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 !

 

1 BÌNH LUẬN

Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Trieu
Trieu
29/07/2020 2:59 chiều

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?

Most Popular

Hướng dẫn sử dụng Mạch đóng ngắt tải không tiếp xúc chế tạo Thiết bị vệ sinh tự động

Từ ngày 03/08/2020 mạch chuyển sang phiên bản mới tuy nhiên kích thước, vị trí linh kiện và chức năng của mạch giống và...

Lưu trữ nhật ký dữ liệu Online với ESP32 và Google Spreadsheets

Giới Thiệu Chào các bạn, trong các dự án IoT nhỏ gọn thì việc lưu trữ  và kiểm soát dữ liệu trên đám mây cũng...

Đọc Cảm Biến DHT11/DHT21/DHT22 không bị DELAY chương trình

Giới Thiệu Chào các bạn, hôm nay mình giới thiệu và hướng dẫn cách đọc cảm biến các dòng DHT11/DHT21/DHT22 ở bài này mình sử...

Gỡ lỗi ESP8266/ESP32 với thư viện ArduinoTrace

Giới Thiệu Chào các bạn, thông thường khi các bạn debug chương trình các bạn thường sử dùng hàm Serial.print() tuy nhiên, hôm nay mình sẽ...

Recent Comments

1
0
Would love your thoughts, please comment.x
()
x