#include #include #include #include #include #include // ===================================================== // CONFIG // ===================================================== const int relayPins[] = { 25,26,32,27,13,14,33,12,4 }; #define NUM_RELAYS 9 #define EEPROM_SIZE 512 WebServer server(80); String ssid=""; String password=""; String id_device=""; String serverName = "https://bintangterang.or.id/url/3/get_commands.php"; unsigned long lastTime=0; unsigned long interval=5000; // ===================================================== // EEPROM SAVE // ===================================================== void saveData(String s, String p, String id) { // hapus EEPROM lama for (int i = 0; i < EEPROM_SIZE; i++) { EEPROM.write(i, 0); } // simpan SSID for (int i = 0; i < s.length() && i < 63; i++) { EEPROM.write(i, s[i]); } // simpan password for (int i = 0; i < p.length() && i < 63; i++) { EEPROM.write(i + 64, p[i]); } // simpan ID DEVICE for (int i = 0; i < id.length() && i < 63; i++) { EEPROM.write(i + 128, id[i]); } EEPROM.commit(); } // ===================================================== // EEPROM LOAD // ===================================================== void loadData(){ char s[65]; char p[65]; char id[65]; for(int i=0;i<64;i++){ s[i]=EEPROM.read(i); p[i]=EEPROM.read(i+64); id[i]=EEPROM.read(i+128); } s[64]='\0'; p[64]='\0'; id[64]='\0'; ssid=String(s); password=String(p); id_device=String(id); ssid.trim(); password.trim(); id_device.trim(); Serial.println("================="); Serial.println("DEVICE CONFIG"); Serial.println("================="); Serial.print("SSID : "); Serial.println(ssid); Serial.print("DEVICE ID : "); Serial.println(id_device); Serial.println("================="); } // ===================================================== // ACCESS POINT SETUP // ===================================================== void setupAP(){ WiFi.mode(WIFI_AP); WiFi.softAP( "SMART-RELAY-SETUP", "12345678" ); Serial.println("AP MODE"); server.on("/",[](){ String html; html+=""; html+=""; html+="

SMART RELAY SETUP

"; html+="
"; html+="SSID
"; html+="
"; html+="PASSWORD
"; html+="
"; html+="DEVICE ID
"; html+="

"; html+=""; html+="
"; html+=""; server.send( 200, "text/html", html ); }); server.on("/save",[](){ saveData( server.arg("s"), server.arg("p"), server.arg("id") ); server.send( 200, "text/html", "SAVED RESTART..." ); delay(1000); ESP.restart(); }); server.begin(); } // ===================================================== // WIFI CONNECT // ===================================================== void connectWiFi(){ WiFi.mode(WIFI_STA); WiFi.begin( ssid.c_str(), password.c_str() ); Serial.println("Connecting WIFI"); int count=0; while( WiFi.status()!=WL_CONNECTED && count<30 ){ delay(500); Serial.print("."); count++; } if(WiFi.status()==WL_CONNECTED){ Serial.println(); Serial.println("WIFI CONNECTED"); Serial.print("IP : "); Serial.println( WiFi.localIP() ); } else{ Serial.println(); Serial.println("FAILED"); setupAP(); } } // ===================================================== // GET COMMAND // ===================================================== void getDataFromServer(){ if(WiFi.status()!=WL_CONNECTED) return; WiFiClientSecure client; client.setInsecure(); HTTPClient http; String url = serverName+ "?id_device="+ id_device; Serial.println(); Serial.println("================="); Serial.println("REQUEST SERVER"); Serial.println(url); Serial.println("================="); if(!http.begin(client,url)){ Serial.println("HTTP ERROR"); return; } int code=http.GET(); Serial.print("HTTP CODE : "); Serial.println(code); if(code==200){ String payload= http.getString(); Serial.println("JSON DATA:"); Serial.println(payload); DynamicJsonDocument doc(2048); DeserializationError error = deserializeJson( doc, payload ); if(error){ Serial.println("JSON ERROR"); http.end(); return; } // tampil id dari server Serial.print("SERVER DEVICE : "); Serial.println( doc["id_device"].as() ); // relay kontrol for(int i=0;iinterval ){ lastTime=millis(); getDataFromServer(); } }