/* ใช้สำหรับ ESP8266 netpie 2020 เชื่อมต่อกับ arduino nano */ #include #include #include #include #include #include #define LED1 16 #define LED2 D5 #define LED3 D6 #define LED4 D7 StaticJsonDocument<200> doc; float mml; String vs, strz, strx, stry; int th, tm, ts, td, tn, ty, tsec, vset_t1; int ii = 0, vz, fx, fm, vf; String str1; char strzx[15]; float vmin; char msx[50]; String humidity, temperature; String vx1 = "101"; int timezone = 7 * 3600; //ตั้งค่า TimeZone ตามเวลาประเทศไทย int dst = 0; //กำหนดค่า Date Swing Time SoftwareSerial Serial2(D3, D4); // RX, TX int s01, s02, s03, s04, s05, s06; const char* mqtt_server = "broker.netpie.io"; const int mqtt_port = 1883; const char* mqtt_Client = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // เปลี่ยนได้ const char* mqtt_username = "yyyyyyyyyyyyyyyyyyyyyyyyyy"; // เปลี่ยนได้ const char* mqtt_password = "zzzzzzzzzzzzzzzzzzzzzzzzzz"; // เปลี่ยนได้ WiFiClient espClient; PubSubClient client(espClient); char msg[50]; #define ESP_AP_NAME "ESP8266 sak pie2020 101" // เปลี่ยนได้ #define ConfigWiFi_Pin D2 void setup() { Serial.begin(9600); Serial2.begin(9600); pinMode(ConfigWiFi_Pin, INPUT_PULLUP); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(D0, OUTPUT); digitalWrite(LED1, 1); digitalWrite(LED2, 1); digitalWrite(LED3, 1); digitalWrite(LED4, 1); digitalWrite(D0, LOW);delay(500);digitalWrite(D0, HIGH);delay(500); digitalWrite(D0, LOW);delay(500);digitalWrite(D0, HIGH);delay(500); digitalWrite(D0, LOW);delay(500);digitalWrite(D0, HIGH);delay(500); digitalWrite(D0, LOW);delay(500);digitalWrite(D0, HIGH);delay(500); digitalWrite(D0, 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 pro1() { time_t now = time(nullptr); struct tm* p_tm = localtime(&now); Serial2.println("ddd"); Serial2.print("L2d"); Serial2.print(p_tm->tm_wday < 10 ? "0" : ""); Serial2.println(p_tm->tm_wday); Serial2.print("L2h"); Serial2.print(p_tm->tm_hour < 10 ? "0" : ""); Serial2.println(p_tm->tm_hour); Serial2.print("L2m"); Serial2.print(p_tm->tm_min < 10 ? "0" : ""); Serial2.println(p_tm->tm_min); Serial2.print("L2s"); Serial2.print(p_tm->tm_sec < 10 ? "0" : ""); Serial2.println(p_tm->tm_sec); } void pro2() { int vnx=1; WiFiManager wifiManager; while ( digitalRead(ConfigWiFi_Pin) == 0) { digitalWrite(D0, HIGH); vnx=vnx+1; if (vnx>10) { wifiManager.resetSettings(); ESP.restart(); } client.publish("@msg/led", "d1004"); client.publish("@msg/led", "d21"); client.publish("@msg/led", "d3001"); client.publish("@msg/led", "d4001"); client.publish("@msg/led", "d5001"); client.publish("@msg/led", "d60"); client.publish("@msg/led", "dz001"); Serial.println("ok5555555555..."); delay(200); digitalWrite(D0, LOW); delay(800); } } void loop() { time_t now = time(nullptr); struct tm* p_tm = localtime(&now); if (millis() - vmin > 1000) { vmin = millis(); ts = p_tm->tm_sec; tm = p_tm->tm_min; th = p_tm->tm_hour; td = p_tm->tm_mday; tn = p_tm->tm_mon + 1; ty = p_tm->tm_year + 2443; } if (millis() - mml > 1000) { mml = millis(); fm = fm + 1; if (fm > 20) { fm = 0; Serial2.println("OK"); } if (digitalRead(D0) == HIGH) digitalWrite(D0, LOW); else digitalWrite(D0, HIGH); } if (Serial2.available()) Serial2Event(); while (!client.connected()) { Serial.print("Attempting MQTT connection…"); if (client.connect(mqtt_Client, mqtt_username, mqtt_password)) { Serial.println("connected"); client.subscribe("@msg/led"); } 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") { Serial2.println("L2XX"); } 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 v3 = String(message).substring(6, msglen); String vtt = String(message).substring(0, msglen); Serial.print("obj="); Serial.println(vxx); //Serial.println(v2 ); if (v2x == vx1 && vxx == "DRR" ) Serial2.println(v3 ); if (v2x == vx1 && vxx == "STT") Serial2.println(message); if (v2x == vx1 && vxx == "HDT") Serial2.println(v3); if (v2x == vx1 && vxx == "SBF") Serial2.println("L2S" ); if (v2x == vx1 && vxx == "SBO" ) Serial2.println("L2R" ); if (v2x == vx1 && vxx == "SBH" ) Serial2.println("L2H" ); if (v2x == vx1 && vxx == "RE1" ) Serial2.println("L2E1" ); if (v2x == vx1 && vxx == "RE2" ) Serial2.println("L2E2" ); if (v2x == vx1 && vxx == "RE3" ) Serial2.println("L2E3" ); if (v2x == vx1 && vxx == "RE4" ) Serial2.println("L2E4" ); if (message == vx1 + "AON") { Serial2.println("L210"); s01 = 1; String data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "BON") { Serial2.println("L220"); s02 = 1; String data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "CON") { Serial2.println("L230"); s03 = 1; String data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "DON") { Serial2.println("L240"); s04 = 1; String data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "EON") { Serial2.println("L250"); s05 = 1; String data = vx1 + "5ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "FON") { Serial2.println("L260"); s06 = 1; String data = vx1 + "6ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "AOFF") { Serial2.println("L211"); s01 = 0; String data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "BOFF") { Serial2.println("L221"); s02 = 0; String data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "COFF") { Serial2.println("L231"); s03 = 0; String data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "DOFF") { Serial2.println("L241"); s04 = 0; String data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "EOFF") { Serial2.println("L251"); s05 = 0; String data = vx1 + "5OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (message == vx1 + "FOFF") { Serial2.println("L261"); s06 = 0; String data = vx1 + "6OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } } void Serial2Event() { while (Serial2.available()) { char inChar = (char)Serial2.read(); stry += inChar; ii++; if (inChar == '\n' || inChar == '\r') { strx = stry; stry = ""; // Serial.println(strx); if (strx[0] == 'K' && strx[1] == 'T' ) { // delay(10); // Serial2.println("saksri"); pro1(); } if (strx[0] == 'T' ) { // microgear.chat("controllerplug",strx); strz += strx; } if (strx[0] == 'D' && strx[1] == 'X' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; strzx[6] = strx[8]; strzx[7] = strx[9]; strzx[8] = strx[10]; strzx[9] = strx[11]; // String vstx =String(strx); String data = "Q" + vx1 + strx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'F' ) { if (strx[1] == '1' ) client.publish("@msg/led", "Q-ระบบทำงาน ตามเวลาที่ตั้งใว้ปกติ"); if (strx[1] == '2' ) client.publish("@msg/led", "Q-ระบบ งด ทำงาน ตามเวลาที่ตั้งใว้ปกติ"); if (strx[1] == '3' ) client.publish("@msg/led", "Qaaaa3333"); if (strx[1] == '4' ) client.publish("@msg/led", "Qaaaaa4444"); } if (strx[0] == 'Q' ) { strz += strx; // microgear.chat("controllerplug",strx); } if (strx[0] == 'T' ) { String data = strx; // Serial.println(data); data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); strz = ""; } if (strx[0] == 'O' ) { client.publish("@msg/led", "strx"); } if (strx[0] == 'L' && strx[1] == '2' ) { int v1 = strx[2] & 0b00001111; int v2 = strx[3] & 0b00001111; int v3 = strx[4] & 0b00001111; int v4 = v1 * 100 + v2 * 10 + v3; if (bitRead(v4, 0) == 1) { String data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (bitRead(v4, 1) == 1) { String data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); }if (bitRead(v4, 2) == 1) { String data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); }if (bitRead(v4, 3) == 1) { String data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } // Serial.print("sak "); Serial.println(v4); } if (strx[0] == 'H' && strx[1] == '1' ) { int v1 = strx[2] & 0b00001111; int v2 = strx[3] & 0b00001111; int v3 = strx[4] & 0b00001111; // Serial.println(strx); // Serial.println(v1); // Serial.println(v2); if (v1 == 2) { if (v2 == 1) { String data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } } if (v1 == 3) { if (v2 == 1) { String data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } } if (v1 == 4) { if (v2 == 1) { String data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } } if (v1 == 5) { if (v2 == 1) { String data = vx1 + "5ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "5OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } } if (v1 == 6) { if (v2 == 1) { String data = vx1 + "6ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "6OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } } if (v1 == 1) { if (v2 == 1) { String data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } else { String data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } } } if (strx[0] == 'D' && strx[1] == '1' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; strzx[6] = strx[8]; strzx[7] = strx[9]; strzx[8] = strx[10]; strzx[9] = strx[11]; String data = "D1" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'D' && strx[1] == '2' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; strzx[6] = strx[8]; strzx[7] = strx[9]; strzx[8] = strx[10]; strzx[9] = strx[11]; String data = "D2" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'D' && strx[1] == '3' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; String data = "D3" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'D' && strx[1] == '4' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; String data = "D4" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'D' && strx[1] == '5' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; String data = "D5" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'D' && strx[1] == '6' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; String data = "D6" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'D' && strx[1] == '7' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; String data = "D7" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } if (strx[0] == 'D' && strx[1] == '8' ) { strzx[0] = strx[2]; strzx[1] = strx[3]; strzx[2] = strx[4]; strzx[3] = strx[5]; strzx[4] = strx[6]; strzx[5] = strx[7]; String data = "D8" + vx1 + strzx; data.toCharArray(msg, (data.length() + 1)); client.publish("@msg/led", msg); } // Serial.println("sak "); ii = 0; } } }