diff --git a/examples/WiFiConfig_simple_test/WiFiConfig_simple_test.ino b/examples/WiFiConfig_simple_test/WiFiConfig_simple_test.ino index 3150e47..32f5a42 100644 --- a/examples/WiFiConfig_simple_test/WiFiConfig_simple_test.ino +++ b/examples/WiFiConfig_simple_test/WiFiConfig_simple_test.ino @@ -1,16 +1,21 @@ -#include -#include +#if defined(ARDUINO_ARCH_ESP8266) +# include +# include +# include +#else +# include +# include +# include +#endif #include #include -#include #include #include +#define MAGIC 0xdeadbeef + // Plati pro desticku Witty s modulem ESP-12E #define PIN_FORCE_CONFIG 4 -#define PIN_LED_RED 15 -#define PIN_LED_GREEN 12 -#define PIN_LED_BLUE 13 //#define DEBUG_OUT(a) {} #define DEBUG_OUT(a) Serial.print(a) @@ -18,9 +23,9 @@ // Definice obsazeni EEPROM #define elementSize(type, element) sizeof(((type *)0)->element) #define countof(a) (sizeof(a) / sizeof(a[0])) -typedef struct -{ - char devname[32 + 2]; // jmeno zarizeni (pro NBNS plati jen 16 znaku) +typedef struct { + uint32_t magic; // kontrola spravneho obsahu EEPROM + char devname[32 + 2]; // jmeno zarizeni (pro NBNS plati jen 16 znaku) } eepromconfig_t; #define EEPROM_SIZE (sizeof(wificonfigarea_t) + sizeof(eepromconfig_t) + 10) // velikost EEPROM oblasti (POZOR!!! zbytecnym zvetsovanim se zaroven zmensuje velikost RAM kvuli zrcadlu!!!) @@ -28,118 +33,132 @@ typedef struct #define EEPROM_CONFIG_ORIGIN (0) char WiFiDeviceName[elementSize(eepromconfig_t, devname)]; // misto pro jmeno zarizeni (dodane do DNS, DHCP NBNS apod...) +#if defined(ARDUINO_ARCH_ESP8266) ESP8266WebServer wwwserver(80); // webovy server +#else +WebServer wwwserver(80); // webovy server +#endif String content; static void handleRoot(void) { - content = F("\nHello world from ESP8266"); - content += F("

"); - content += F(""); + content = F("\nHello world from ESP8266"); + content += F("

"); + content += F(""); - wwwserver.send(200, "text/html", content); + wwwserver.send(200, "text/html", content); } void ICACHE_FLASH_ATTR wcb(wificonfigstate_t state) { - switch (state) - { + switch (state) { case WCS_CONNECTSTART: - DEBUG_OUT(F("Starting connect...\r\n")); - break; + DEBUG_OUT(F("Starting connect...\r\n")); + break; case WCS_CONNECTING: - break; + break; case WCS_CONNECTED: - DEBUG_OUT(F("Connected.\r\n")); - break; + DEBUG_OUT(F("Connected.\r\n")); + break; case WCS_CONFIGSTART: - DEBUG_OUT(F("Starting config...\r\n")); - break; + DEBUG_OUT(F("Starting config...\r\n")); + break; case WCS_CONFIGWAIT: - break; - } + break; + } } void ICACHE_FLASH_ATTR saveDevname(const char *param) { - String p = param; + String p = param; - EES_storeString(EEPROM_CONFIG_ORIGIN + offsetof(eepromconfig_t, devname), elementSize(eepromconfig_t, devname), p); + EES_storeString(EEPROM_CONFIG_ORIGIN + offsetof(eepromconfig_t, devname), elementSize(eepromconfig_t, devname), p); } void ICACHE_FLASH_ATTR setup() { - WiFiConfig wifi; // konfigurace ESP modulu - WiFiConfigUsrParameter devname("devname", "Jméno zařízení", (const char *)WiFiDeviceName, 32, saveDevname); + WiFiConfig wifi; // konfigurace ESP modulu + WiFiConfigUsrParameter devname("devname", "Jméno zařízení", (const char *)WiFiDeviceName, 32, saveDevname); - EEPROM.begin(EEPROM_SIZE); // zahajujeme praci s EEPROM - pinMode(PIN_FORCE_CONFIG, INPUT_PULLUP); // pin, co slouzi jako vstup tlacitka - int fc = digitalRead(PIN_FORCE_CONFIG); // pozadavek na vynucene vyvolani konfigurace - Serial.begin(9600); - String dn = EES_readString(EEPROM_CONFIG_ORIGIN + offsetof(eepromconfig_t, devname), elementSize(eepromconfig_t, devname)); - strcpy(WiFiDeviceName, dn.c_str()); - wifi.addParameter(&devname); + EEPROM.begin(EEPROM_SIZE); // zahajujeme praci s EEPROM - if (WCR_OK != wifi.begin(EEPROM_WIFICONFIG_ORIGIN, fc, wcb)) // startujeme pripojeni - ESP.restart(); + uint32_t magic; - wwwserver.on("/", handleRoot); - wwwserver.begin(); // startujeme webovy server - - if (strlen(WiFiDeviceName) > 0) - { - NBNS.begin(WiFiDeviceName); - ArduinoOTA.setHostname(WiFiDeviceName); - } - - ArduinoOTA.onStart([]() { - DEBUG_OUT(F("Start\r\n")); - }); - ArduinoOTA.onEnd([]() { - DEBUG_OUT(F("End\r\n")); - }); - ArduinoOTA.onError([](ota_error_t error) { - DEBUG_OUT(F("Error[")); - DEBUG_OUT(error); - DEBUG_OUT(F("]: ")); - switch (error) - { - case OTA_AUTH_ERROR: - DEBUG_OUT(F("Auth Failed\r\n")); - break; - - case OTA_BEGIN_ERROR: - DEBUG_OUT(F("Begin Failed\r\n")); - break; - - case OTA_CONNECT_ERROR: - DEBUG_OUT(F("Connect Failed\r\n")); - break; - - case OTA_RECEIVE_ERROR: - DEBUG_OUT(F("Receive Failed\r\n")); - break; - - case OTA_END_ERROR: - DEBUG_OUT(F("End Failed\r\n")); - break; - - default: - DEBUG_OUT(F("\r\n")); + EEPROM.get(EEPROM_CONFIG_ORIGIN + offsetof(eepromconfig_t, magic), magic); + if (EEPROM_MAGIC != magic) { + // EEPROM ma spatny obsah + for (unsigned int i = 0; i < EEPROM_SIZE; i++) + EEPROM.write(i, 0); + magic = EEPROM_MAGIC; + EEPROM.put(EEPROM_CONFIG_ORIGIN + offsetof(eepromconfig_t, magic), magic); + EEPROM.commit(); } - }); - ArduinoOTA.begin(); + + pinMode(PIN_FORCE_CONFIG, INPUT_PULLUP); // pin, co slouzi jako vstup tlacitka + int fc = digitalRead(PIN_FORCE_CONFIG); // pozadavek na vynucene vyvolani konfigurace + Serial.begin(9600); + String dn = EES_readString(EEPROM_CONFIG_ORIGIN + offsetof(eepromconfig_t, devname), elementSize(eepromconfig_t, devname)); + strcpy(WiFiDeviceName, dn.c_str()); + wifi.addParameter(&devname); + + if (WCR_OK != wifi.begin(EEPROM_WIFICONFIG_ORIGIN, fc, wcb)) // startujeme pripojeni + ESP.restart(); + + wwwserver.on("/", handleRoot); + wwwserver.begin(); // startujeme webovy server + + if (strlen(WiFiDeviceName) > 0) { + NBNS.begin(WiFiDeviceName); + ArduinoOTA.setHostname(WiFiDeviceName); + } + + ArduinoOTA.onStart([]() { + DEBUG_OUT(F("Start\r\n")); + }); + ArduinoOTA.onEnd([]() { + DEBUG_OUT(F("End\r\n")); + }); + ArduinoOTA.onError([](ota_error_t error) { + DEBUG_OUT(F("Error[")); + DEBUG_OUT(error); + DEBUG_OUT(F("]: ")); + switch (error) { + case OTA_AUTH_ERROR: + DEBUG_OUT(F("Auth Failed\r\n")); + break; + + case OTA_BEGIN_ERROR: + DEBUG_OUT(F("Begin Failed\r\n")); + break; + + case OTA_CONNECT_ERROR: + DEBUG_OUT(F("Connect Failed\r\n")); + break; + + case OTA_RECEIVE_ERROR: + DEBUG_OUT(F("Receive Failed\r\n")); + break; + + case OTA_END_ERROR: + DEBUG_OUT(F("End Failed\r\n")); + break; + + default: + DEBUG_OUT(F("\r\n")); + } + }); + ArduinoOTA.begin(); } void loop() { - wwwserver.handleClient(); // osetrujeme praci serveru - ArduinoOTA.handle(); + wwwserver.handleClient(); // osetrujeme praci serveru + ArduinoOTA.handle(); }