// #include <WiFi.h>
// #include <PubSubClient.h>
// #include <LiquidCrystal_I2C.h>
// #include <Wire.h>
// const char *ssid = "Wokwi-GUEST";
// const char *password = "";
// const char *MQTTServer = "broker.hivemq.com";
// const char *MQTT_ID = "ESP32Client";
// WiFiClient espClient;
// PubSubClient client(espClient);
// const int ldrPin = 34;
// int ldrValue = 0;
// long lux = 0;
// LiquidCrystal_I2C lcd(0x27, 20, 4);
// void WIFIConnect() {
// Serial.println("Connecting to WiFi...");
// lcd.setCursor(0, 0);
// lcd.print("WiFi: Connecting...");
// WiFi.begin(ssid, password);
// while (WiFi.status() != WL_CONNECTED) {
// delay(500);
// Serial.print(".");
// }
// Serial.println();
// Serial.println("WiFi connected!");
// Serial.print("IP address: ");
// Serial.println(WiFi.localIP());
// lcd.setCursor(0, 0);
// lcd.print("WiFi: Connected ");
// }
// void MQTT_Reconnect() {
// while (!client.connected()) {
// Serial.println("Connecting to MQTT Broker...");
// lcd.setCursor(0, 1);
// lcd.print("MQTT: Connecting...");
// if (client.connect(MQTT_ID)) {
// Serial.println("MQTT connected!");
// lcd.setCursor(0, 1);
// lcd.print("MQTT: Connected ");
// } else {
// Serial.print("Failed to connect, rc=");
// Serial.print(client.state());
// Serial.println(". Retrying in 5 seconds...");
// lcd.setCursor(0, 1);
// lcd.print("MQTT: Disconnected ");
// delay(5000);
// }
// }
// }
// void setup() {
// Serial.begin(9600);
// lcd.init();
// lcd.backlight();
// lcd.setCursor(0, 0);
// lcd.print("Initializing...");
// pinMode(ldrPin, INPUT);
// WIFIConnect();
// client.setServer(MQTTServer, 1883);
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("LDR Lux Reader");
// delay(2000);
// lcd.clear();
// }
// void loop() {
// lcd.setCursor(0, 0);
// if (WiFi.status() == WL_CONNECTED) {
// lcd.print("WiFi: Connected ");
// Serial.println("WiFi: Connected");
// } else {
// lcd.print("WiFi: Disconnected ");
// Serial.println("WiFi: Disconnected");
// }
// lcd.setCursor(0, 1);
// if (!client.connected()) {
// Serial.println("MQTT: Disconnected");
// MQTT_Reconnect();
// } else {
// lcd.print("MQTT: Connected ");
// Serial.println("MQTT: Connected");
// }
// ldrValue = analogRead(ldrPin);
// lux = map(ldrValue, 0, 4095, 0, 20000);
// lcd.setCursor(0, 2);
// lcd.print("Lux: ");
// lcd.print(lux);
// lcd.print(" ");
// lcd.setCursor(0, 3);
// if (lux < 10) {
// lcd.print("Very dark ");
// } else if (lux >= 10 && lux < 50) {
// lcd.print("Low light ");
// } else if (lux >= 50 && lux < 500) {
// lcd.print("Dim light ");
// } else if (lux >= 500 && lux < 1000) {
// lcd.print("Natural light ");
// } else if (lux >= 1000 && lux < 10000) {
// lcd.print("Strong light ");
// } else {
// lcd.print("Very bright ");
// }
// client.loop();
// delay(500);
// }
#include <WiFi.h>
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
const char *ssid = "Wokwi-GUEST";
const char *password = "";
const char *MQTTServer = "broker.hivemq.com";
const char *MQTT_ID = "ESP32Client";
const char *MQTT_TOPIC = "VLUTE/LightSensor"; // Topic để gửi dữ liệu
WiFiClient espClient;
PubSubClient client(espClient);
const int ldrPin = 34;
int ldrValue = 0;
long lux = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void WIFIConnect() {
Serial.println("Connecting to WiFi...");
lcd.setCursor(0, 0);
lcd.print("WiFi: Connecting...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
lcd.setCursor(0, 0);
lcd.print("WiFi: Connected ");
}
void MQTT_Reconnect() {
while (!client.connected()) {
Serial.println("Connecting to MQTT Broker...");
lcd.setCursor(0, 1);
lcd.print("MQTT: Connecting...");
if (client.connect(MQTT_ID)) {
Serial.println("MQTT connected!");
lcd.setCursor(0, 1);
lcd.print("MQTT: Connected ");
} else {
Serial.print("Failed to connect, rc=");
Serial.print(client.state());
Serial.println(". Retrying in 5 seconds...");
lcd.setCursor(0, 1);
lcd.print("MQTT: Disconnected ");
delay(5000);
}
}
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
pinMode(ldrPin, INPUT);
WIFIConnect();
client.setServer(MQTTServer, 1883);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LDR Lux Reader");
delay(2000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 0);
if (WiFi.status() == WL_CONNECTED) {
lcd.print("WiFi: Connected ");
Serial.println("WiFi: Connected");
} else {
lcd.print("WiFi: Disconnected ");
Serial.println("WiFi: Disconnected");
}
lcd.setCursor(0, 1);
if (!client.connected()) {
Serial.println("MQTT: Disconnected");
MQTT_Reconnect();
} else {
lcd.print("MQTT: Connected ");
Serial.println("MQTT: Connected");
}
ldrValue = analogRead(ldrPin);
lux = map(ldrValue, 0, 4095, 0, 20000);
lcd.setCursor(0, 2);
lcd.print("Lux: ");
lcd.print(lux);
lcd.print(" ");
lcd.setCursor(0, 3);
if (lux < 10) {
lcd.print("Very dark ");
} else if (lux >= 10 && lux < 50) {
lcd.print("Low light ");
} else if (lux >= 50 && lux < 500) {
lcd.print("Dim light ");
} else if (lux >= 500 && lux < 1000) {
lcd.print("Natural light ");
} else if (lux >= 1000 && lux < 10000) {
lcd.print("Strong light ");
} else {
lcd.print("Very bright ");
}
// Gửi giá trị ánh sáng lên MQTT
String luxString = String(lux);
client.publish(MQTT_TOPIC, luxString.c_str());
Serial.print("Published Lux value: ");
Serial.println(lux);
client.loop();
delay(500);
}