#include <WiFi.h>
#include <PubSubClient.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "muVXtktIfnk1WchCUXgD"
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define THRESHOLD 800
const int LDR = 34;
const int LED = 5;
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
Serial.print("Kết nối WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Đã kết nối WiFi!");
}
void reconnect() {
while (!client.connected()) {
Serial.print("Đang kết nối ThingsBoard...");
if (client.connect("ESP32Client", TOKEN, NULL)) {
Serial.println(" Thành công!");
} else {
Serial.print(" Thất bại, mã lỗi = ");
Serial.print(client.state());
Serial.println(". Thử lại sau 5 giây.");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT);
setup_wifi();
client.setServer(THINGSBOARD_SERVER, 1883);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int input_val = analogRead(LDR);
Serial.print("LDR value is: ");
Serial.println(input_val);
String status;
if (input_val > THRESHOLD) {
status = "HIGH";
digitalWrite(LED, HIGH);
} else {
status = "LOW";
digitalWrite(LED, LOW);
}
// Tạo payload JSON
String payload = "{";
payload += "\"ambient_light\":" + String(input_val) + ",";
payload += "\"status\":\"" + status + "\"";
payload += "}";
Serial.println("Gửi dữ liệu: " + payload);
client.publish("v1/devices/me/telemetry", payload.c_str());
delay(1000); // Gửi mỗi 5 giây
}