From ccd064ad3c1a73a1fd2b7854644461b829e77b59 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Feb 2020 20:36:58 +0100 Subject: [PATCH] add new shelly in alfa creation --- .../Shelly1_v2/Shelly1_v2/Shelly1_v2.ino | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 _FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino diff --git a/_FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino b/_FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino new file mode 100644 index 0000000..ee3081d --- /dev/null +++ b/_FIRMWARE/firmwares/Shelly1/Shelly1_v2/Shelly1_v2/Shelly1_v2.ino @@ -0,0 +1,143 @@ +//Includes +#include +#include +#include +#include +#include + +//Variables +const char* ssid = "ssid"; +const char* pasw = "pasw"; +const char* apiToken = "apiToken"; +const char* host = "http://dev.steelants.cz"; +const char* url = "/vasek/home/api.php"; + +//NetworkData +// IPAddress staticIpAddress = ""; +// IPAddress subnetIpAddress = ""; +// IPAddress gatewayIpAddress = ""; +bool conf = false; + +ESP8266WebServer server(80); +StaticJsonDocument<250> jsonContent; + +//Pins +#define RELAY 4 //12 +#define SWITCH 5 //0 + +void setup() { + Serial.begin(9600); + EEPROM.begin(100); + while (!Serial) continue; + delay(10); + + //read saved data + ssid = ReadEeprom(1,33); + pasw = ReadEeprom(33,65); + apiToken = ReadEeprom(65,97); + + //set pins + pinMode(SWITCH, INPUT); + pinMode(RELAY, OUTPUT); + + //wifi + if ( ssid.length() > 1 ) { + WiFi.begin(ssid.c_str(), pasw.c_str()); + 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 +} + +void loop() { + 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"); + while (c < t) { + if (WiFi.status() == WL_CONNECTED) { return true; } + delay(500); + Serial.print(WiFi.status()); + c++; + } +} + +void CleanEeprom(){ + for (int i = 1; i < 100; ++i) { + EEPROM.write(i, 0); + } +} + +void WriteEeprom (char* data, int start = 0) { + for (int i = 0; i < data.length(); ++i) + { + EEPROM.write(start + i, data[i]); + } + EEPROM.commit(); +} + +char* ReadEeprom(int min, int max){ + char* localString; + for(int i = min; i < max; ++i) { + localString += char(EEPROM.read(i)); + } + return localString; +}