//Generated Date: Mon, 20 May 2024 05:54:16 GMT
#include <WiFi.h>
#include <PubSubClient.h>
#define MQTT_USER ""
#define MQTT_PASSWORD ""
char _lwifi_ssid[] = "Wokwi-GUEST";
char _lwifi_pass[] = "";
const char* mqtt_server = "broker.MQTTGO.io";
const unsigned int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient mqtt_client(espClient);
String mqtt_data = "";
void mqtt_sendText(String topic, String text) {
String clientId = "D1104183039";
if (mqtt_client.connect(clientId.c_str(), MQTT_USER, MQTT_PASSWORD)) {
mqtt_client.publish(topic.c_str(), text.c_str());
}
}
void reconnect() {
while (!mqtt_client.connected()) {
String mqtt_clientId = "D1104183039";
if (mqtt_client.connect(mqtt_clientId.c_str(), MQTT_USER, MQTT_PASSWORD)) {
Serial.print("MQTT OK");
mqtt_client.subscribe("lhucin/D110IOT/D1104183039/ch05/btn");
mqtt_client.subscribe("lhucin/D110IOT/D1104183039/ch05/value");
} else {
delay(5000);
}
}
}
int light = 0;
int value = 90;
boolean led_Auto = false;
boolean btn = false;
void setup()
{
Serial.begin(9600);
randomSeed(micros());
mqtt_client.setServer(mqtt_server,mqtt_port);
mqtt_client.setCallback(callback);
//mqtt_client.setBufferSize(1024);
Serial.print("Wifi...");
WiFi.disconnect();
WiFi.softAPdisconnect(true);
WiFi.mode(WIFI_STA);
WiFi.begin(_lwifi_ssid, _lwifi_pass);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
delay(300);
Serial.print("MQTT...");
pinMode(4, INPUT);
pinMode(2, OUTPUT);
}
void loop()
{
if (!mqtt_client.connected()) {
reconnect();
}
mqtt_client.loop();
if (digitalRead(4) && !btn) {
btn = !btn;
led_Auto = btn;
mqtt_sendText("lhucin/D110IOT/D1104183039/ch05/btn", String(btn));
}
if (digitalRead(4) && btn) {
btn = !btn;
led_Auto = btn;
mqtt_sendText("lhucin/D110IOT/D1104183039/ch05/btn", String(btn));
}
light = analogRead(35);
Serial.println((String("btn:")+String(btn)+String("led_Auto:")+String(led_Auto)+String(", light:")+String(light)));
if (led_Auto) {
if (light < value) {
digitalWrite(2, HIGH);
Serial.println((String("Auto light:")+String(light)+String(", value:")+String(value)+String(", ON")));
mqtt_sendText("lhucin/D110IOT/D1104183039/ch05/led", "1");
} else {
digitalWrite(2, LOW);
Serial.println((String("Auto light:")+String(light)+String(", value:")+String(value)+String(", OFF")));
mqtt_sendText("lhucin/D110IOT/D1104183039/ch05/led", "0");
}
} else {
digitalWrite(2, HIGH);
Serial.println((String("light:")+String(light)+String(", ON")));
mqtt_sendText("lhucin/D110IOT/D1104183039/ch05/led", "1");
}
mqtt_sendText("lhucin/D110IOT/D1104183039/ch05/light", String(light));
delay(300);
}
void callback(char* topic, byte* payload, unsigned int length) {
mqtt_data = "";
for (int ci = 0; ci < length; ci++) {
char c = payload[ci];
mqtt_data+=c;
}
if (String(topic)=="lhucin/D110IOT/D1104183039/ch05/value"&&mqtt_data!="[]") {
Serial.print((mqtt_data));
value = (mqtt_data).toInt();
mqtt_sendText("lhucin/D110IOT/D1104183039/ch05/light", String(light));
}
if (String(topic)=="lhucin/D110IOT/D1104183039/ch05/btn"&&mqtt_data!="[]") {
Serial.print((mqtt_data));
btn = (mqtt_data).toInt();
led_Auto = btn;
}
}