#include #include #include #include #include #include #include StaticJsonDocument<200> doc; //WiFiClient client; String message; int s01, s02, s03, s04, s05, s06, s07, s08, s09, s10, s11, s12; byte s13, s14, s15, s16, s17, s18, s19, s20; // Update these with values suitable for your network. //const char* mqtt_server = "broker.mqtt-dashboard.com"; const char* mqtt_server = "mqttgo.io"; WiFiClient espClient; PubSubClient client(espClient); unsigned long lastMsg = 0; #define MSG_BUFFER_SIZE (200) int timezone = 7 * 3600; //ตั้งค่า TimeZone ตามเวลาประเทศไทย int dst = 0; //กำหนดค่า Date Swing Time char msg[MSG_BUFFER_SIZE]; String data ; #define ConfigWiFi_Pin 15 #define ESP_AP_NAME "ESP32 saksri Config move char001" int th, tw, tm, ts, td, tn, ty,vsecx,vtm,counter; String vs,vsx,vss, strz, strx, stry; int tsec, vset_t1,f_reset; float h,t; float mml; int vz, fx, fm, vf,vst1; char strzx[15]; float vsec; int value = 0; String vx1 = "105"; #define vtopic "saksri/clock" const char* host = "saksri.net"; //ใส่ IP หรือ Host ของเครื่อง Database ก็ได้ //const int httpPort = 80; #define SCOPE "" time_t now ; struct tm* p_tm ; String strg1 = ""; int ii, vnum, vnum2; void setup() { pinMode(2, OUTPUT); // Initialize the BUILTIN_LED pin as an output pinMode(ConfigWiFi_Pin, INPUT_PULLUP); Serial.begin(115200); EEPROM.begin(2000); Serial2.begin(9600, SERIAL_8N1,16, 17); // strip.begin(); Serial.println("Starting..."); WiFiManager wifiManager; if (digitalRead(ConfigWiFi_Pin) == LOW) // Press button { //reset saved settings wifiManager.resetSettings(); // go to ip 192.168.4.1 to config } wifiManager.autoConnect(ESP_AP_NAME); while (WiFi.status() != WL_CONNECTED) { delay(250); Serial.print("."); } Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); configTime(timezone, dst, "pool.ntp.org", "time.nist.gov"); //ดึงเวลาจาก Server Serial.println("\nLoading time"); while (!time(nullptr)) { Serial.print("*"); delay(1000); // wdt_enable(WDTO_2S); } client.setServer(mqtt_server, 1883); client.setCallback(callback); } void send_data(String vss) { data = vx1 + vss; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); now = time(nullptr); p_tm = localtime(&now); if (millis() - mml > 1000) { mml = millis(); ts = p_tm->tm_sec; tm = p_tm->tm_min; th = p_tm->tm_hour; tw = p_tm->tm_wday; td = p_tm->tm_mday; tn = p_tm->tm_mon + 1; ty = p_tm->tm_year+2443 ; if (digitalRead(2) == HIGH) digitalWrite(2, LOW); else digitalWrite(2, HIGH); if (tm != vtm) { vtm=tm; String vh=String(th); Serial2.print("SH"+vh+"\n"); delay(10); String vm=String(tm); Serial2.print("SM"+vm+"\n"); delay(10); String vs=String(ts); Serial2.print("SS"+vs+"\n"); } } if (s01==1 and vsta==0) { Serial2.print("AA\n"); vsta==1; } if (s02==1) { Serial2.print("AB\n"); delay(1000); } } void send_data2(String vss) { data = vss; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); message = ""; for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); message = message + (char)payload[i]; } // Serial.print("message="); // Serial.println(message); String v2 = String(message).substring(0, 1); String v2x = String(message).substring(0, 6); String v2y = String(message).substring(0, 10); String vxx = String(message).substring(3, 6); String v4 = String(message).substring(3, length); String v3 = String(message).substring(6, length); String vtt = String(message).substring(0, length); if ( v2y == vx1 + "DRRL2EE") { byte v1 = message[10] & 0b00001111; byte v2 = message[11] & 0b00001111; byte v3 = message[12] & 0b00001111; byte v4 = message[13] & 0b00001111; byte v5 = message[14] & 0b00001111; byte v6 = message[15] & 0b00001111; byte v7 = message[16] & 0b00001111; int v8 = v1*1000+v2 * 100 + v3 * 10 + v4; int v9 = v5 * 100 + v6 * 10 + v7; EEPROM.write(v8, v9); EEPROM.commit();delay(30); //Serial.print("message88=");Serial.println(v8); //Serial.print("message99=");Serial.println(v9); } if (message == vx1 + "H00") { if (s01==1) { data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} else { data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} if (s02==1) { data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} else { data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} if (s03==1) { data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} else { data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} if (s04==1) { data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} else { data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} if (s05==1) { data = vx1 + "5ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} else { data = vx1 + "5OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} if (s06==1) { data = vx1 + "6ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} else { data = vx1 + "6OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg);} if (s07 == 1) { data = vx1+"7ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"7OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s08 == 1) { data = vx1+"8ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"8OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s09 == 1) { data = vx1+"9ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"9OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s10 == 1) { data = vx1+"10ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"10OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s11 == 1) { data = vx1+"11ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"11OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s12 == 1) { data = vx1+"12ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"12OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s13 == 1) { data = vx1+"13ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"13OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s14 == 1) { data = vx1+"14ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"14OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s15 == 1) { data = vx1+"15ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"15OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s16 == 1) { data = vx1+"16ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"16OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s17 == 1) { data = vx1+"17ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"17OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s18 == 1) { data = vx1+"18ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"18OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s19 == 1) { data = vx1+"19ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"19OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } if (s20 == 1) { data = vx1+"20ON"; data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg);} else { data = vx1+"20OFF";data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } } if (message == vx1 + "AON") { data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s01 = 1; } if (message == vx1 + "AOFF") { data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s01 = 0; } if (message == vx1 + "BON") { data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s02 = 1; } if (message == vx1 + "BOFF") { data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s02 = 0; } if (message == vx1 + "CON") { data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s03 = 1; } if (message == vx1 + "COFF") { data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s03 = 0; } if (message == vx1 + "DON") { data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s04 = 1; } if (message == vx1 + "DOFF") { data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s04 = 0; } if (message == vx1 + "EON") { data = vx1 + "5ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s05 = 1; } if (message == vx1 + "EOFF") { data = vx1 + "5OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s05 = 0; } if (message == vx1 + "FON") { data = vx1 + "6ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s06 = 1; } if (message == vx1 + "FOFF") { data = vx1 + "6OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); s06 = 0; } if (message == vx1 + "GON") { s07 = 1; data = vx1 + "7ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "GOFF") { s07 = 0; data = vx1 + "7OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "HON") { s08 = 1; data = vx1 + "8ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "HOFF") { s08 = 0; data = vx1 + "8OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "ION") { s09 = 1; data = vx1 + "9ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "IOFF") { s09 = 0; data = vx1 + "9OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "JON") { s10 = 1; data = vx1 + "10ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "JOFF") { s10 = 0; data = vx1 + "10OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "KON") { s11 = 1; data = vx1 + "11ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "KOFF") { s11 = 0; data = vx1 + "11OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "LON") { s12 = 1; data = vx1 + "12ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "LOFF") { s12 = 0; data = vx1 + "12OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "MON") { s13 = 1; data = vx1 + "13ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "MOFF") { s13 = 0; data = vx1 + "13OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "NON") { s14 = 1; data = vx1 + "14ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "NOFF") { s14 = 0; data = vx1 + "14OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "OON") { s15 = 1; data = vx1 + "15ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "OOFF") { s15 = 0; data = vx1 + "15OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "PON") { s16 = 1; data = vx1 + "16ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "POFF") { s16 = 0; data = vx1 + "16OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "QON") { s17 = 1; data = vx1 + "17ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "QOFF") { s17 = 0; data = vx1 + "17OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "RON") { s18 = 1; data = vx1 + "18ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "ROFF") { s18 = 0; data = vx1 + "18OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "SON") { s19 =1; data = vx1 + "19ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "SOFF") { s19 = 0; data = vx1 + "19OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "TON") { s20 = 1; data = vx1 + "20ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "TOFF") { s20 = 0; data = vx1 + "20OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect if (client.connect(clientId.c_str())) { Serial.println("connected"); // Once connected, publish an announcement... // client.publish("outTopic", "hello world"); // ... and resubscribe // client.subscribe("saksri/muk"); client.subscribe(vtopic); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } }