#include #include #include #include #include #include #define out1 D5 #define out2 D6 #define out3 D7 #define out4 D8 #define in1 D1 #define in2 D2 #define in3 D3 #define in4 D4 #define disp D0 StaticJsonDocument<200> doc; float mml; String vs, strz, strx, stry; int th,tw, tm, ts, td, tn, ty, tsec, vset_t1; int ii = 0, vz, fx, fm, vf; String str1,data; char strzx[15]; float vmin; char msx[50]; String vx1 = "101"; #define vtopic "@msg/led" int timezone = 7 * 3600; //ตั้งค่า TimeZone ตามเวลาประเทศไทย int dst = 0; //กำหนดค่า Date Swing Time int s01, s02, s03, s04, s05, s06; const char* mqtt_server = "broker.netpie.io"; const int mqtt_port = 1883; const char* mqtt_Client = "xxxxxxxxxxxxxxxxxxxxxxx";// Client ID const char* mqtt_username = "xxxxxxxxxxxxxxxxxx"; // Token const char* mqtt_password = "xxxxxxxxxxxxxxxxxxxxx";// Secret WiFiClient espClient; PubSubClient client(espClient); char msg[50]; #define ESP_AP_NAME "ESP32 sak pie2020 004" #define ConfigWiFi_Pin D2 void setup() { Serial.begin(9600); EEPROM.begin(1500); pinMode(ConfigWiFi_Pin, INPUT_PULLUP); pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); pinMode(out3, OUTPUT); pinMode(out4, OUTPUT); pinMode(disp, OUTPUT); pinMode(in1, INPUT_PULLUP); pinMode(in2, INPUT_PULLUP); pinMode(in3, INPUT_PULLUP); pinMode(in4, INPUT_PULLUP); digitalWrite(disp, LOW);delay(500);digitalWrite(disp, HIGH);delay(500); digitalWrite(disp, LOW);delay(500);digitalWrite(disp, HIGH);delay(500); digitalWrite(disp, LOW);delay(500);digitalWrite(disp, HIGH);delay(500); digitalWrite(disp, LOW);delay(500);digitalWrite(disp, HIGH);delay(500); digitalWrite(disp, LOW); 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("AutoConnectAP"); wifiManager.autoConnect(ESP_AP_NAME); while (WiFi.status() != WL_CONNECTED) { delay(250); Serial.print("."); } Serial.println(""); 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); } client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); } void loop() { time_t now = time(nullptr); struct tm* p_tm = localtime(&now); if (millis() - vmin > 10000) { vmin = 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 ; // ty = p_tm->tm_year + 2443; // str1 = "001S4เวลา :" + String(th) + "/" + String(tm) + "/" + String(ts); // str1.toCharArray(msx, (str1.length() + 1)); // client.publish(vtopic, msx); } if (millis() - mml > 1000) { mml = millis(); fm = fm + 1; if (fm > 20) { fm = 0; } if (digitalRead(disp) == HIGH) digitalWrite(disp, LOW); else digitalWrite(disp, HIGH); } if (digitalRead(in1) == 0) { if (digitalRead(out1) == 1) { digitalWrite(out1, LOW); s01 = 0; data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } else { digitalWrite(out1, HIGH); s01 = 1; data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } while (digitalRead(in1) == 0) delay(100); } if (digitalRead(in2) == 0) { if (digitalRead(out2) == 1) { digitalWrite(out2, LOW); s02 = 0; data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } else { digitalWrite(out2, HIGH); s02 = 1; data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } while (digitalRead(in2) == 0) delay(100); } if (digitalRead(in3) == 0) { if (digitalRead(out3) == 1) { digitalWrite(out3, LOW); s03 = 0; data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } else { digitalWrite(out3, HIGH); s03 = 1; data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } while (digitalRead(in3) == 0) delay(100); } if (digitalRead(in4) == 0) { if (digitalRead(out4) == 1) { digitalWrite(out4, LOW); s04 = 0; data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } else { digitalWrite(out4, HIGH); s04 = 1; data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } while (digitalRead(in4) == 0) delay(100); } while (!client.connected()) { Serial.print("Attempting MQTT connection…"); if (client.connect(mqtt_Client, mqtt_username, mqtt_password)) { Serial.println("connected"); client.subscribe(vtopic); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println("try again in 5 seconds"); delay(5000); return; } } client.loop(); } void callback(char* topic, byte* payload, unsigned int msglen) { // Serial.print("Message arrive ["); // Serial.print(topic); // Serial.print("]"); String message; for (int i = 0; i < msglen; i++) { message = message + (char)payload[i]; } // Serial.println(message); if (message == vx1 + "GET") { if (s01 == 1) { data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s01 == 0) { 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); } if (s02 == 0) { 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); } if (s03 == 0) { 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); } if (s04 == 0) { data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } } String stateStr = String(message).substring(1, msglen); String v2 = String(message).substring(0, 1); String v2x = String(message).substring(0, 3); String vxx = String(message).substring(3, 6); String v4 = String(message).substring(3, msglen); String v3 = String(message).substring(6, msglen); String vtt = String(message).substring(0, msglen); Serial.print("vxx="); Serial.println(vxx); Serial.print("v2x="); Serial.println(v2x); if (message == vx1 + "AON") { digitalWrite(out1,1); s01 = 1; String data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "BON") { digitalWrite(out2,1); s02 = 1; String data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "CON") { digitalWrite(out3,1); s03 = 1; String data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "DON") { digitalWrite(out4,1); s04 = 1; String data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "EON") { s05 = 1; String data = vx1 + "5ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "FON") { s06 = 1; String data = vx1 + "6ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "AOFF") { digitalWrite(out1,0); s01 = 0; String data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "BOFF") { digitalWrite(out2,0); s02 = 0; String data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "COFF") { digitalWrite(out3,0); s03 = 0; String data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "DOFF") { digitalWrite(out4,0); s04 = 0; String data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "EOFF") { s05 = 0; String data = vx1 + "5OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (message == vx1 + "FOFF") { s06 = 0; String data = vx1 + "6OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } }