#include <Wire.h>
#include <Adafruit_GFX.h>
#include <EEPROM.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// #include <Servo.h>
//Wifi Setting
#include <WiFi.h>
#include <PubSubClient.h>
#define MQTT_SERVER "20.205.128.159"
#define MQTT_PORT 1883
#define MQTT_USERNAME ""
#define MQTT_PASSWORD ""
#define MQTT_NAME "MQTT3.1"
WiFiClient client;
PubSubClient mqtt(client);
//statusmode
int mode = 0;
bool statuswindow = false;
signed long int lasttime=0;
//WIFI Callback
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
if(String(topic) == "/ESP32/Mode"){
if(messageTemp == "Automode"){
Serial.println("Automode");
mode=(mode+1)%2;
}else if(messageTemp == "Manualmode"){
Serial.println("Manualmode");
mode =2;
}
}
}
// void servowork(bool Check){
// //ON Close Windows
// if(Check){
// for (int i=0;i<=360;i+=1) {
// servo.write(0);
// }
// }else{ //OFF Open Windows
// for (int i=0;i<=360;i+=1) {
// servo.write(180);
// }
// }
// }
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
//WIFI Connecting
Serial.print("Connecting to ");
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
mqtt.setServer(MQTT_SERVER, MQTT_PORT);
mqtt.setCallback(callback);
}
void loop() {
//Checkconnect MQTT
if (mqtt.connected() == false) {
Serial.print("MQTT connection... ");
if (mqtt.connect(MQTT_NAME, MQTT_USERNAME,
MQTT_PASSWORD)) {
Serial.println("connected");
mqtt.subscribe("/ESP32/Mode"); // Subscribe to ModeAuto
mqtt.subscribe("/ESP32/Status"); // Subscribe to Status
Serial.println("Subscribed to /ESP32/ModeAuto and /ESP32/Status");
} else {
Serial.println("failed");
delay(5000);
}
} else {
mqtt.loop();
}
//Checkmode
String KeywordMode="";
switch(mode){
case 0: //AutoModeSunny
KeywordMode= "SunnyMode";
if(statuswindow){
//dosomething
}
break;
case 1: //AutoModeNight
KeywordMode = "NightMode";
if(statuswindow){
//dosomething
}
break;
case 2: //Manualmode ON/OFF
KeywordMode = "Manualmode";
if(statuswindow){
statuswindow = !statuswindow;
}
break;
}
//Update Status
if(millis() - lasttime >= 500 ){
lasttime = millis();
// servowork(statuswindow);
String topic = "/ESP32/Status";
mqtt.publish(topic.c_str(), String(KeywordMode).c_str());
}
}