diff --git a/_FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino b/_FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino index ee3081d..b2d5156 100644 --- a/_FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino +++ b/_FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino @@ -6,9 +6,11 @@ #include //Variables -const char* ssid = "ssid"; -const char* pasw = "pasw"; -const char* apiToken = "apiToken"; +const char* ssidServer = "ESPFilip"; +const char* paswServer = "Sapatr6"; +String ssid = ""; +String pasw = ""; +String apiToken = ""; const char* host = "http://dev.steelants.cz"; const char* url = "/vasek/home/api.php"; @@ -16,6 +18,8 @@ const char* url = "/vasek/home/api.php"; // IPAddress staticIpAddress = ""; // IPAddress subnetIpAddress = ""; // IPAddress gatewayIpAddress = ""; + +String content; bool conf = false; ESP8266WebServer server(80); @@ -26,11 +30,10 @@ StaticJsonDocument<250> jsonContent; #define SWITCH 5 //0 void setup() { - Serial.begin(9600); + Serial.begin(115200); EEPROM.begin(100); while (!Serial) continue; delay(10); - //read saved data ssid = ReadEeprom(1,33); pasw = ReadEeprom(33,65); @@ -40,75 +43,28 @@ void setup() { pinMode(SWITCH, INPUT); pinMode(RELAY, OUTPUT); - //wifi - if ( ssid.length() > 1 ) { - WiFi.begin(ssid.c_str(), pasw.c_str()); - conf = !wifiVerify(20); + //wifi + if (ssid != "") { + WiFi.persistent(false); + WiFi.mode(WIFI_STA); + #if defined(staticIpAddress) && defined(subnetIpAddress) && defined(gatewayIpAddress) + WiFi.config(staticIpAddress, subnetIpAddress, gatewayIpAddress); + #endif + WiFi.begin(ssid, pasw); + conf = wifiVerify(20); if (conf) { - Serial.println(""); - Serial.println("WiFi connected"); - Serial.print("Local IP: "); - Serial.println(WiFi.localIP()); - Serial.print("SoftAP IP: "); - Serial.println(WiFi.softAPIP()); - createWeb(); - // Start the server - server.begin(); - Serial.println("Server started"); return; } - } - WiFi.persistent(false); - WiFi.mode(WIFI_STA); - WiFi.begin(ssid, pasw); - #if defined(staticIpAddress) && defined(subnetIpAddress) && defined(gatewayIpAddress) - WiFi.config(staticIpAddress, subnetIpAddress, gatewayIpAddress); - #endif + } + setupAP(); } void loop() { - if (conf) { + if (!conf) { server.handleClient(); } } -void createWeb() -{ - server.on("/", []() { - if (server.args() == 3){ - ssid = server.arg("wifi-ssid"); - pasw = server.arg("wifi-pasw"); - apiToken = server.arg("apiToken"); - if (ssid.length() > 0 && pasw.length() > 0 && apiToken.length() > 0) { - CleanEeprom(); - WriteEeprom(ssid); - WriteEeprom(pasw, 33); - WriteEeprom(apiToken, 65); - server.send(200, "application/json", "Restarting esp"); - delay(500); - ESP.restart(); - } - } - content = ""; - content += ""; - content += "

WIFI Configuration

"; - content += "Refresh"; - content += "
"; - content += "
"; - content += "
"; - content += "
"; - content += ""; - content += "
"; - content += ""; - server.send(200, "text/html", content); - }); -} - bool wifiVerify(int t){ int c = 0; Serial.println("Waiting for Wifi to connect to Shelly1"); @@ -118,6 +74,7 @@ bool wifiVerify(int t){ Serial.print(WiFi.status()); c++; } + return false; } void CleanEeprom(){ @@ -126,7 +83,7 @@ void CleanEeprom(){ } } -void WriteEeprom (char* data, int start = 0) { +void WriteEeprom (String data, int start = 1) { for (int i = 0; i < data.length(); ++i) { EEPROM.write(start + i, data[i]); @@ -134,10 +91,88 @@ void WriteEeprom (char* data, int start = 0) { EEPROM.commit(); } -char* ReadEeprom(int min, int max){ - char* localString; +String ReadEeprom(int min, int max){ + String localString; for(int i = min; i < max; ++i) { localString += char(EEPROM.read(i)); } return localString; } + +void createWeb() +{ + server.on("/", []() { + if (server.args() == 3){ + ssid = server.arg("wifi-ssid"); + pasw = server.arg("wifi-pasw"); + apiToken = server.arg("apiToken"); + if (ssid != "" && pasw != "" && apiToken != "") { + CleanEeprom(); + WriteEeprom(ssid); + WriteEeprom(pasw, 33); + WriteEeprom(apiToken, 65); + server.send(200, "application/json", "Restarting esp"); + delay(500); + ESP.restart(); + } + } + content = ""; + content += ""; + content += "

WIFI Configuration

"; + content += "Refresh"; + content += "
"; + content += "
"; + content += "
"; + content += "
"; + content += ""; + content += "
"; + content += ""; + server.send(200, "text/html", content); + }); +} + +void setupAP(void) { + WiFi.mode(WIFI_STA); + WiFi.disconnect(); + delay(100); + int n = WiFi.scanNetworks(); + Serial.println("scan done"); + if (n == 0) + Serial.println("no networks found"); + else + { + Serial.print(n); + Serial.println(" networks found"); + for (int i = 0; i < n; ++i) + { + // Print SSID and RSSI for each network found + Serial.print(i + 1); + Serial.print(": "); + Serial.print(WiFi.SSID(i)); + Serial.print(" ("); + Serial.print(WiFi.RSSI(i)); + Serial.print(")"); + Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); + delay(10); + } + } + delay(100); + WiFi.softAP(ssidServer); + Serial.println("softap"); + Serial.println(""); + Serial.println("WiFi connected"); + Serial.print("Local IP: "); + Serial.println(WiFi.localIP()); + Serial.print("SoftAP IP: "); + Serial.println(WiFi.softAPIP()); + createWeb(); + // Start the server + server.begin(); + Serial.println("Server started"); + Serial.println("over"); +}