Phần 3: Lập trình ESP32 để giao tiếp với Mosquitto
1. Cài đặt Arduino IDE và thư viện cần thiết - Hướng dẫn tải và cài đặt Arduino IDE, 2. Cài đặt thư viện MQTT cho ESP32 - Hướng dẫn cài đặt thư viện PubSubClient, 3. Kết nối ESP32 với WiFi - Hướng dẫn lập trình để kết nối ESP32 với mạng WiFi, 4. Lập trình gửi dữ liệu lên Mosquitto - Cách lập trình để ESP32 gửi dữ liệu cảm biến lên broker, 5. Nhận lệnh từ Mosquitto - Hướng dẫn lập trình để ESP32 nhận lệnh từ broker.
Phần 3: Lập trình ESP32 để giao tiếp với Mosquitto
Trong phần này, chúng ta sẽ thực hiện các bước cần thiết để lập trình ESP32 nhằm giao tiếp với broker Mosquitto thông qua giao thức MQTT. Chúng ta sẽ bắt đầu từ việc cài đặt Arduino IDE, cài đặt thư viện MQTT, kết nối ESP32 với WiFi, gửi dữ liệu lên Mosquitto và cuối cùng là nhận lệnh từ Mosquitto.
1. Cài đặt Arduino IDE và thư viện cần thiết
Để lập trình ESP32, trước tiên bạn cần cài đặt Arduino IDE. Dưới đây là hướng dẫn từng bước:
-
Tải Arduino IDE:
- Truy cập vào trang web chính thức của Arduino: https://www.arduino.cc/en/software
- Tải phiên bản phù hợp với hệ điều hành của bạn (Windows, macOS, Linux).
-
Cài đặt Arduino IDE:
- Chạy tệp cài đặt đã tải xuống và làm theo hướng dẫn trên màn hình.
- Khi cài đặt hoàn tất, mở Arduino IDE.
2. Cài đặt thư viện MQTT cho ESP32
Chúng ta sẽ sử dụng thư viện PubSubClient để giao tiếp với broker MQTT. Dưới đây là cách cài đặt thư viện này:
- Mở Arduino IDE.
- Vào menu Sketch > Include Library > Manage Libraries...
- Tìm kiếm PubSubClient trong ô tìm kiếm.
- Chọn thư viện PubSubClient và nhấn Install.
Tip: Đảm bảo rằng bạn đã cài đặt thư viện WiFi cho ESP32, thư viện này thường được tích hợp sẵn trong Arduino IDE.
3. Kết nối ESP32 với WiFi
Để ESP32 có thể gửi và nhận dữ liệu qua MQTT, nó cần được kết nối với mạng WiFi. Dưới đây là đoạn mã mẫu để kết nối ESP32 với WiFi:
#include <WiFi.h>
const char* ssid = "Tên_Mạng_WiFi";
const char* password = "Mật_Khẩu_WiFi";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Đang kết nối đến WiFi...");
}
Serial.println("Đã kết nối đến WiFi!");
}
void loop() {
// Code chính sẽ được thêm vào đây sau
}
4. Lập trình gửi dữ liệu lên Mosquitto
Sau khi kết nối với WiFi, chúng ta sẽ lập trình ESP32 để gửi dữ liệu cảm biến lên broker Mosquitto. Dưới đây là đoạn mã mẫu để gửi dữ liệu:
#include <PubSubClient.h>
const char* mqttServer = "Địa_Chỉ_Broker_MQTT";
const int mqttPort = 1883;
const char* mqttUser = "Tên_Tài_Khoản";
const char* mqttPassword = "Mật_Khẩu";
WiFiClient espClient;
PubSubClient client(espClient);
void reconnect() {
while (!client.connected()) {
Serial.print("Đang kết nối đến MQTT...");
if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("Đã kết nối đến MQTT!");
} else {
Serial.print("Lỗi kết nối, mã lỗi: ");
Serial.print(client.state());
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Đang kết nối đến WiFi...");
}
Serial.println("Đã kết nối đến WiFi!");
client.setServer(mqttServer, mqttPort);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Gửi dữ liệu cảm biến (ví dụ: giá trị nhiệt độ)
float temperature = 25.0; // Giá trị mẫu
char tempString[8];
dtostrf(temperature, 1, 2, tempString);
client.publish("home/temperature", tempString);
delay(5000); // Gửi dữ liệu mỗi 5 giây
}
5. Nhận lệnh từ Mosquitto
Cuối cùng, chúng ta sẽ lập trình ESP32 để nhận lệnh từ broker Mosquitto. Dưới đây là đoạn mã mẫu để nhận lệnh:
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Nhận lệnh từ topic: ");
Serial.println(topic);
String messageTemp;
for (int i = 0; i < length; i++) {
messageTemp += (char)message[i];
}
Serial.print("Nội dung lệnh: ");
Serial.println(messageTemp);
}
void setup() {
// ... Các phần đã có trước đó
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Gửi dữ liệu cảm biến
// ...
}
Lưu ý: Đảm bảo rằng bạn đã cấu hình đúng địa chỉ broker MQTT, cổng và thông tin đăng nhập. Kiểm tra kết nối mạng nếu gặp lỗi.
Với các bước trên, bạn đã hoàn thành việc lập trình ESP32 để giao tiếp với broker Mosquitto. Bây giờ, bạn có thể gửi và nhận dữ liệu qua giao thức MQTT một cách dễ dàng. Hãy thử nghiệm với các loại cảm biến khác nhau và mở rộng dự án của mình!
