Hướng dẫn sử dụng MQTT trên ESP32
MQTT là gì?
MQTT (Message Queuing Telemetry Transport) là một giao thức truyền dữ liệu nhẹ, rất phù hợp cho IoT. Nó hoạt động theo mô hình publish/subscribe thông qua một broker trung gian.
Cách hoạt động
- Publisher: gửi dữ liệu
- Subscriber: nhận dữ liệu
- Broker: trung gian xử lý (ví dụ: Mosquitto)
Chuẩn bị
Phần cứng
- ESP32 (DevKit hoặc tương đương)
Phần mềm
- Arduino IDE hoặc PlatformIO
- Thư viện:
- WiFi.h
- PubSubClient
Luồng hoạt động
- ESP32 kết nối WiFi
- ESP32 kết nối MQTT Broker
- ESP32 gửi (publish) và nhận (subscribe) dữ liệu
Code mẫu ESP32 MQTT
#include <WiFi.h> #include <PubSubClient.h> // WiFi config const char* ssid = "YOUR_WIFI"; const char* password = "YOUR_PASS"; // MQTT Broker const char* mqtt_server = "broker.hivemq.com"; WiFiClient espClient; PubSubClient client(espClient); // Callback khi nhận message void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived: "); Serial.println(topic); String message; for (int i = 0; i < length; i++) { message += (char)payload[i]; } Serial.println("Payload: " + message); } void setup_wifi() { delay(10); Serial.println("Connecting to WiFi..."); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi connected!"); } void reconnect() { while (!client.connected()) { Serial.print("Connecting MQTT..."); if (client.connect("ESP32Client")) { Serial.println("connected"); client.subscribe("test/topic"); } else { Serial.print("failed, rc="); Serial.print(client.state()); delay(2000); } } } void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); static long lastMsg = 0; if (millis() - lastMsg > 5000) { lastMsg = millis(); client.publish("test/topic", "Hello from ESP32"); } }