#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
// 1. WiFi ảo của Wokwi (Giữ nguyên)
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// 2. Thông tin HiveMQ Cloud của RIÊNG BẠN
const char* mqtt_server = "1af3004441454f2aabda930c941a552d.s1.eu.hivemq.cloud"; // <--- COPY TỪ MQTT EXPLORER DÁN VÀO
const char* mqtt_user = "tram_cam_bien_1"; // <--- Username bạn đã tạo ở bước Permission
const char* mqtt_password = "Minh@2003"; // <--- Password bạn đã tạo
WiFiClientSecure espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Serial.println("\nWiFi connected");
// Quan trọng: Bật chế độ không kiểm tra chứng chỉ để ESP32 kết nối được Port 8883
espClient.setInsecure();
client.setServer(mqtt_server, 8883);
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Client ID có thể đặt tùy ý
if (client.connect("ESP32_Test_Device", mqtt_user, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
delay(5000);
}
}
}
void loop() {
if (!client.connected()) { reconnect(); }
client.loop();
// Giả lập đọc khoảng cách từ cảm biến (0-100cm)
int nuoc = random(10, 80);
// Tạo chuỗi JSON
String payload = "{\"sensor_id\": \"S01\", \"value\":" + String(nuoc) + ", \"status\": \"OK\"}";
Serial.print("Sending to Cloud: ");
Serial.println(payload);
// Gửi lên Topic: hcm/flood/data
client.publish("hcm/flood/data", payload.c_str());
delay(5000); // Đợi 5 giây gửi một lần
}