[Node-RED] Giao tiếp ESP8266 với ESP32 qua Server MQTT trên Node-RED

 

[Node-RED] Giao tiếp ESP8266 với ESP32 qua Server MQTT trên Node-RED

Trong ví dụ này mình sẽ dùng Node-RED làm Server MQTT và thông qua đó các Client là ESP8266 và ESP32 sẽ giao tiếp với nhau thông qua giao thức MQTT. Ở đây mình dùng chỉ có 2 ESP nhưng thực thế bạn có thể kết nối nhiều hơn Client. Những thiết bị nào hỗ trợ MQTT thì các bạn có thể kết nối chúng lại với nhau thông qua Publish và Subscribe. 

Các thiết bị ở cách xa nhau hàng trăm, ngàn Km nhưng vẫn có thể giao tiếp được với nhau qua MQTT. Đó là một điểm mạnh, chỉ cần có một Server MQTT thì các Client sẽ nói chuyện với nhau thật dễ dàng. 

Code mẫu

ESP32

////////////////////////////////////////////////////////////////////////////////
#include <Arduino.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#ifdef ESP8266
#include <ESP8266WiFi.h>
#else
#include <WiFi.h>
#endif

WiFiClient client;
PubSubClient mqtt_client(client);

const char *ssid = "Phong 3"; // Name Wifi
const char *password = "0392071213"; // Password Wifi
const char *server_mqtt = "192.168.1.20";
const int port_mqtt = 1883;
const char *mqtt_id = "esp32";
const char *topic_subscribe = "esp8266";
const char *topic_publish = "esp32";
String message_send = "";

void callback(char *topic, byte *payload, unsigned int length)
{
String message = "";
Serial.print("Recived from: ");
Serial.println(topic);
Serial.print("Message: ");
for (size_t i = 0; i < length; i++)
{
message += (char)payload[i];
}
Serial.print(message);
Serial.println("----------------------------------------");

}

void setup()
{
Serial.begin(9600);
Serial.println("Connecting to Wifi...");
WiFi.begin(ssid, password);
WiFi.reconnect();
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.print("Connected to Wifi ");
Serial.println(ssid);
Serial.print("IP Address: ");
Serial.print(WiFi.localIP());
Serial.println();

delay(1000);

mqtt_client.setServer(server_mqtt, port_mqtt);
mqtt_client.setCallback(callback);

Serial.println("Connecting to mqtt ");
while (!mqtt_client.connect(mqtt_id))
{
delay(500);
}
Serial.println("Connected to mqtt ");
mqtt_client.subscribe(topic_subscribe);
}

void recivedMessageFromUart()
{
if (Serial.available())
{
char c = (char)Serial.read();
message_send += c;
if (c == '\n')
{
if (mqtt_client.connected())
{
mqtt_client.publish(topic_publish, message_send.c_str());
message_send = "";
}
}
}
}

void loop()
{
mqtt_client.loop();
recivedMessageFromUart();
}
////////////////////////////////////////////////////////////////////////////////

ESP8266

  
////////////////////////////////////////////////////////////////////////////////
#include <Arduino.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#ifdef ESP8266
#include <ESP8266WiFi.h>
#else
#include <WiFi.h>
#endif

WiFiClient client;
PubSubClient mqtt_client(client);

const char *ssid = "Phong 3"; // Name Wifi
const char *password = "0392071213"; // Password Wifi
const char *server_mqtt = "192.168.1.20";
const int port_mqtt = 1883;
const char *mqtt_id = "esp8266";
const char *topic_subscribe = "esp32";
const char *topic_publish = "esp8266";
String message_send = "";

void callback(char *topic, byte *payload, unsigned int length)
{
String message = "";
Serial.print("Recived from: ");
Serial.println(topic);
Serial.print("Message: ");
for (size_t i = 0; i < length; i++)
{
message += (char)payload[i];
}
Serial.print(message);
Serial.println("----------------------------------------");
}

void setup()
{
Serial.begin(9600);
Serial.println("Connecting to Wifi...");
WiFi.begin(ssid, password);
WiFi.reconnect();
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.print("Connected to Wifi ");
Serial.println(ssid);
Serial.print("IP Address: ");
Serial.print(WiFi.localIP());
Serial.println();

delay(1000);

mqtt_client.setServer(server_mqtt, port_mqtt);
mqtt_client.setCallback(callback);

Serial.println("Connecting to mqtt ");
while (!mqtt_client.connect(mqtt_id))
{
delay(500);
}
Serial.println("Connected to mqtt ");
mqtt_client.subscribe(topic_subscribe);
}

void recivedMessageFromUart()
{
if (Serial.available())
{
char c = (char)Serial.read();
message_send += c;
if (c == '\n')
{
if (mqtt_client.connected())
{
mqtt_client.publish(topic_publish, message_send.c_str());
message_send = "";
}
}
}
}

void loop()
{
mqtt_client.loop();
recivedMessageFromUart();
}
////////////////////////////////////////////////////////////////////////////////

Download Library



Video hướng dẫn




Chúc các bạn thành công!

No comments:

Post a Comment