diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b59a99e2..460c04d4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,27 +10,32 @@ However, before reporting a bug please check through the following: If you don't find anything, please [open a new issue](https://github.com/khoih-prog/ESP_AT_WiFiManager/issues/new). +--- + ### How to submit a bug report Please ensure to specify the following: * Arduino IDE version (e.g. 1.8.19) or Platform.io version -* Board Core Version (e.g. Arduino SAMDUE core v1.6.12, ESP32 core v2.0.5, ESP8266 core v3.0.2, ArduinoCore-mbed v3.4.1, etc.) +* Board Core Version (e.g. Arduino SAMDUE core v1.6.12, ESP32 core v2.0.6, ESP8266 core v3.1.1, ArduinoCore-mbed v3.5.4, etc.) * Contextual information (e.g. what you were trying to achieve) * Simplest possible steps to reproduce * Anything that might be relevant in your opinion, such as: * Operating system (Windows, Ubuntu, etc.) and the output of `uname -a` * Network configuration +Please be educated, civilized and constructive as you've always been. Disrespective posts against [GitHub Code of Conduct](https://docs.github.com/en/site-policy/github-terms/github-event-code-of-conduct) will be ignored and deleted. + +--- ### Example ``` Arduino IDE version: 1.8.19 RASPBERRY_PI_PICO board -ArduinoCore-mbed v3.4.1 +ArduinoCore-mbed v3.5.4 OS: Ubuntu 20.04 LTS -Linux xy-Inspiron-3593 5.15.0-52-generic #58~20.04.1-Ubuntu SMP Thu Oct 13 13:09:46 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux +Linux xy-Inspiron-3593 5.15.0-58-generic #64~20.04.1-Ubuntu SMP Fri Jan 6 16:42:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux Context: I encountered a crash while trying to use the library diff --git a/Images/WIZNET_WIZFI360_EVB_PICO.png b/Images/WIZNET_WIZFI360_EVB_PICO.png new file mode 100644 index 00000000..61aecec4 Binary files /dev/null and b/Images/WIZNET_WIZFI360_EVB_PICO.png differ diff --git a/Images/wizfi360-pa.png b/Images/wizfi360-pa.png new file mode 100644 index 00000000..20e1adc7 Binary files /dev/null and b/Images/wizfi360-pa.png differ diff --git a/changelog.md b/changelog.md index d2534fd6..1a3e6605 100644 --- a/changelog.md +++ b/changelog.md @@ -15,6 +15,7 @@ ## Table of Contents * [Changelog](#changelog) + * [Release v1.4.0](#release-v140) * [Release v1.3.1](#release-v131) * [Major Release v1.3.0](#major-release-v130) * [Major Release v1.2.0](#major-release-v120) @@ -28,6 +29,10 @@ ## Changelog +### Release v1.4.0 + +1. Add support to WizNet `WizFi360`, such as `WIZNET_WIZFI360_EVB_PICO` using `arduino-pico` core + ### Release v1.3.1 1. Update `platform.ini` and `library.json` to use original `khoih-prog` instead of `khoih.prog` after PIO fix diff --git a/examples/AutoConnect/AutoConnect.ino b/examples/AutoConnect/AutoConnect.ino index 662dd916..d82111bd 100644 --- a/examples/AutoConnect/AutoConnect.ino +++ b/examples/AutoConnect/AutoConnect.ino @@ -1,13 +1,13 @@ /**************************************************************************************************************************** AutoConnect.ino WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license *****************************************************************************************************************************/ @@ -59,6 +59,7 @@ void check_status() static ulong checkstatus_timeout = 0; #define HEARTBEAT_INTERVAL 10000L + // Print hearbeat every HEARTBEAT_INTERVAL (10) seconds. if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0)) { @@ -76,6 +77,8 @@ void enterConfigPortal() ESP_AT_wiFiManager.setMinimumSignalQuality(-1); + // 0 for random channel + //ESP_AT_wiFiManager.setAPChannel(0); ESP_AT_wiFiManager.setAPChannel(1); // Default AP IP is 192.168.4.1. Uncomment to use different AP IP @@ -92,14 +95,14 @@ void enterConfigPortal() Router_Pass = ESP_AT_wiFiManager.WiFi_Pass(); if ( (Router_SSID != "") && ESP_AT_wiFiManager.isWiFiConfigValid() ) - { + { if (ESP_AT_wiFiManager.connectWifi(Router_SSID, Router_Pass) == WL_CONNECTED) { Serial.println(F("Got stored Credentials. Try to connect first")); - + return; } - + ESP_AT_wiFiManager.setConfigPortalTimeout(60); //If no access point name has been previously entered disable timeout. Serial.println(F("Got stored Credentials but can't connect. Timeout 60s")); } @@ -136,19 +139,22 @@ void setup() // put your setup code here, to run once: // initialize the LED digital pin as an output. pinMode(LOCAL_PIN_LED, OUTPUT); - digitalWrite(LOCAL_PIN_LED, LED_ON); // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + + // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + digitalWrite(LOCAL_PIN_LED, LED_ON); Serial.begin(115200); - while (!Serial); + + while (!Serial && millis() < 5000); #if USE_ESP32_AT Serial.println("\nStart AutoConnect with ESP32-AT WiFi module on " + String(BOARD_NAME)); #else Serial.println("\nStart AutoConnect with ESP8266-AT WiFi module on " + String(BOARD_NAME)); #endif - + Serial.println(ESP_AT_WIFIMANAGER_VERSION); - + // initialize serial for ESP module EspSerial.begin(115200); @@ -159,6 +165,7 @@ void setup() if (WiFi.status() == WL_NO_SHIELD) { Serial.println(F("WiFi shield not present")); + // don't continue while (true); } diff --git a/examples/AutoConnect/defines.h b/examples/AutoConnect/defines.h index 6fd2aec2..bc00164a 100644 --- a/examples/AutoConnect/defines.h +++ b/examples/AutoConnect/defines.h @@ -1,13 +1,13 @@ /**************************************************************************************************************************** defines.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license *****************************************************************************************************************************/ @@ -21,27 +21,33 @@ #define _ESP_AT_LOGLEVEL_ 1 #define DEBUG_WIFIMGR true //false -// Uncomment to use ESP32-AT commands -//#define USE_ESP32_AT true +#define USING_WIZFI360 true + +#if (USING_WIZFI360) || defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #define USE_ESP32_AT true +#else + // Uncomment to use ESP32-AT commands + //#define USE_ESP32_AT true +#endif #if ( defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) \ || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_SAMD_MKRFox1200) || defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) \ || defined(ARDUINO_SAMD_MKRGSM1400) || defined(ARDUINO_SAMD_MKRNB1500) || defined(ARDUINO_SAMD_MKRVIDOR4000) || defined(__SAMD21G18A__) \ || defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) || defined(__SAMD21E18A__) || defined(__SAMD51__) || defined(__SAMD51J20A__) || defined(__SAMD51J19A__) \ || defined(__SAMD51G19A__) || defined(__SAMD51P19A__) || defined(__SAMD21G18A__) ) - #if defined(ESP8266_AT_USE_SAMD) - #undef ESP8266_AT_USE_SAMD - #endif - #define ESP8266_AT_USE_SAMD true +#if defined(ESP8266_AT_USE_SAMD) + #undef ESP8266_AT_USE_SAMD +#endif +#define ESP8266_AT_USE_SAMD true #endif #if ( defined(NRF52840_FEATHER) || defined(NRF52832_FEATHER) || defined(NRF52_SERIES) || defined(ARDUINO_NRF52_ADAFRUIT) || \ defined(NRF52840_FEATHER_SENSE) || defined(NRF52840_ITSYBITSY) || defined(NRF52840_CIRCUITPLAY) || defined(NRF52840_CLUE) || \ defined(NRF52840_METRO) || defined(NRF52840_PCA10056) || defined(PARTICLE_XENON) || defined(NINA_B302_ublox) || defined(NINA_B112_ublox) ) - #if defined(ESP8266_AT_USE_NRF528XX) - #undef ESP8266_AT_USE_NRF528XX - #endif - #define ESP8266_AT_USE_NRF528XX true +#if defined(ESP8266_AT_USE_NRF528XX) + #undef ESP8266_AT_USE_NRF528XX +#endif +#define ESP8266_AT_USE_NRF528XX true #endif #if ( defined(ARDUINO_SAM_DUE) || defined(__SAM3X8E__) ) @@ -54,298 +60,303 @@ #if ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ defined(STM32WB) || defined(STM32MP1) || defined(STM32L5) ) - #if defined(ESP8266_AT_USE_STM32) - #undef ESP8266_AT_USE_STM32 - #endif - #define ESP8266_AT_USE_STM32 true +#if defined(ESP8266_AT_USE_STM32) + #undef ESP8266_AT_USE_STM32 +#endif +#define ESP8266_AT_USE_STM32 true #endif #ifdef CORE_TEENSY +// For Teensy 4.1/4.0 +#define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 + +#if defined(__IMXRT1062__) // For Teensy 4.1/4.0 - #define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 - - #if defined(__IMXRT1062__) - // For Teensy 4.1/4.0 - #define BOARD_TYPE "TEENSY 4.1/4.0" - #elif defined(__MK66FX1M0__) - #define BOARD_TYPE "Teensy 3.6" - #elif defined(__MK64FX512__) - #define BOARD_TYPE "Teensy 3.5" - #elif defined(__MKL26Z64__) - #define BOARD_TYPE "Teensy LC" - #elif defined(__MK20DX256__) - #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) - #elif defined(__MK20DX128__) - #define BOARD_TYPE "Teensy 3.0" - #elif defined(__AVR_AT90USB1286__) - #error Teensy 2.0++ not supported yet - #elif defined(__AVR_ATmega32U4__) - #error Teensy 2.0 not supported yet - #else - // For Other Boards - #define BOARD_TYPE "Unknown Teensy Board" - #endif + #define BOARD_TYPE "TEENSY 4.1/4.0" +#elif defined(__MK66FX1M0__) + #define BOARD_TYPE "Teensy 3.6" +#elif defined(__MK64FX512__) + #define BOARD_TYPE "Teensy 3.5" +#elif defined(__MKL26Z64__) + #define BOARD_TYPE "Teensy LC" +#elif defined(__MK20DX256__) + #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) +#elif defined(__MK20DX128__) + #define BOARD_TYPE "Teensy 3.0" +#elif defined(__AVR_AT90USB1286__) + #error Teensy 2.0++ not supported yet +#elif defined(__AVR_ATmega32U4__) + #error Teensy 2.0 not supported yet +#else + // For Other Boards + #define BOARD_TYPE "Unknown Teensy Board" +#endif #elif defined(ESP8266_AT_USE_SAMD) - // For SAMD - #define EspSerial Serial1 - - #if defined(ARDUINO_SAMD_ZERO) - #define BOARD_TYPE "SAMD Zero" - #elif defined(ARDUINO_SAMD_MKR1000) - #define BOARD_TYPE "SAMD MKR1000" - #elif defined(ARDUINO_SAMD_MKRWIFI1010) - #define BOARD_TYPE "SAMD MKRWIFI1010" - #elif defined(ARDUINO_SAMD_NANO_33_IOT) - #define BOARD_TYPE "SAMD NANO_33_IOT" - #elif defined(ARDUINO_SAMD_MKRFox1200) - #define BOARD_TYPE "SAMD MKRFox1200" - #elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) - #define BOARD_TYPE "SAMD MKRWAN13X0" - #elif defined(ARDUINO_SAMD_MKRGSM1400) - #define BOARD_TYPE "SAMD MKRGSM1400" - #elif defined(ARDUINO_SAMD_MKRNB1500) - #define BOARD_TYPE "SAMD MKRNB1500" - #elif defined(ARDUINO_SAMD_MKRVIDOR4000) - #define BOARD_TYPE "SAMD MKRVIDOR4000" - #elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) - #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" - #elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" - #elif defined(ADAFRUIT_METRO_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" - #elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" - #elif defined(ADAFRUIT_GEMMA_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" - #elif defined(ADAFRUIT_TRINKET_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" - #elif defined(ADAFRUIT_ITSYBITSY_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" - #elif defined(ARDUINO_SAMD_HALLOWING_M0) - #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" - #elif defined(ADAFRUIT_METRO_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" - #elif defined(ADAFRUIT_GRAND_CENTRAL_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" - #elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" - #elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" - #elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" - #elif defined(ADAFRUIT_PYPORTAL) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" - #elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" - #elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" - #elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" - #elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" - #elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" - #elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" - #elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" - #elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" - #elif defined(SEEED_WIO_TERMINAL) - #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" - #elif defined(SEEED_FEMTO_M0) - #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" - #elif defined(SEEED_XIAO_M0) - #define BOARD_TYPE "SAMD SEEED_XIAO_M0" - #elif defined(Wio_Lite_MG126) - #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" - #elif defined(WIO_GPS_BOARD) - #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" - #elif defined(SEEEDUINO_ZERO) - #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" - #elif defined(SEEEDUINO_LORAWAN) - #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" - #elif defined(SEEED_GROVE_UI_WIRELESS) - #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" - #elif defined(__SAMD21E18A__) - #define BOARD_TYPE "SAMD21E18A" - #elif defined(__SAMD21G18A__) - #define BOARD_TYPE "SAMD21G18A" - #elif defined(__SAMD51G19A__) - #define BOARD_TYPE "SAMD51G19A" - #elif defined(__SAMD51J19A__) - #define BOARD_TYPE "SAMD51J19A" - #elif defined(__SAMD51J20A__) - #define BOARD_TYPE "SAMD51J20A" - #elif defined(__SAM3X8E__) - #define BOARD_TYPE "SAM3X8E" - #elif defined(__CPU_ARC__) - #define BOARD_TYPE "CPU_ARC" - #elif defined(__SAMD51__) - #define BOARD_TYPE "SAMD51" - #else - #define BOARD_TYPE "SAMD Unknown" - #endif +// For SAMD +#define EspSerial Serial1 + +#if defined(ARDUINO_SAMD_ZERO) + #define BOARD_TYPE "SAMD Zero" +#elif defined(ARDUINO_SAMD_MKR1000) + #define BOARD_TYPE "SAMD MKR1000" +#elif defined(ARDUINO_SAMD_MKRWIFI1010) + #define BOARD_TYPE "SAMD MKRWIFI1010" +#elif defined(ARDUINO_SAMD_NANO_33_IOT) + #define BOARD_TYPE "SAMD NANO_33_IOT" +#elif defined(ARDUINO_SAMD_MKRFox1200) + #define BOARD_TYPE "SAMD MKRFox1200" +#elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) + #define BOARD_TYPE "SAMD MKRWAN13X0" +#elif defined(ARDUINO_SAMD_MKRGSM1400) + #define BOARD_TYPE "SAMD MKRGSM1400" +#elif defined(ARDUINO_SAMD_MKRNB1500) + #define BOARD_TYPE "SAMD MKRNB1500" +#elif defined(ARDUINO_SAMD_MKRVIDOR4000) + #define BOARD_TYPE "SAMD MKRVIDOR4000" +#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) + #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" +#elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" +#elif defined(ADAFRUIT_METRO_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" +#elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" +#elif defined(ADAFRUIT_GEMMA_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" +#elif defined(ADAFRUIT_TRINKET_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" +#elif defined(ADAFRUIT_ITSYBITSY_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" +#elif defined(ARDUINO_SAMD_HALLOWING_M0) + #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" +#elif defined(ADAFRUIT_METRO_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" +#elif defined(ADAFRUIT_GRAND_CENTRAL_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" +#elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" +#elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" +#elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" +#elif defined(ADAFRUIT_PYPORTAL) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" +#elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" +#elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" +#elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" +#elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" +#elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" +#elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" +#elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" +#elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" +#elif defined(SEEED_WIO_TERMINAL) + #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" +#elif defined(SEEED_FEMTO_M0) + #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" +#elif defined(SEEED_XIAO_M0) + #define BOARD_TYPE "SAMD SEEED_XIAO_M0" +#elif defined(Wio_Lite_MG126) + #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" +#elif defined(WIO_GPS_BOARD) + #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" +#elif defined(SEEEDUINO_ZERO) + #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" +#elif defined(SEEEDUINO_LORAWAN) + #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" +#elif defined(SEEED_GROVE_UI_WIRELESS) + #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" +#elif defined(__SAMD21E18A__) + #define BOARD_TYPE "SAMD21E18A" +#elif defined(__SAMD21G18A__) + #define BOARD_TYPE "SAMD21G18A" +#elif defined(__SAMD51G19A__) + #define BOARD_TYPE "SAMD51G19A" +#elif defined(__SAMD51J19A__) + #define BOARD_TYPE "SAMD51J19A" +#elif defined(__SAMD51J20A__) + #define BOARD_TYPE "SAMD51J20A" +#elif defined(__SAM3X8E__) + #define BOARD_TYPE "SAM3X8E" +#elif defined(__CPU_ARC__) + #define BOARD_TYPE "CPU_ARC" +#elif defined(__SAMD51__) + #define BOARD_TYPE "SAMD51" +#else + #define BOARD_TYPE "SAMD Unknown" +#endif #elif (ESP8266_AT_USE_NRF528XX) - #if defined(NRF52840_FEATHER) - #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" - #elif defined(NRF52832_FEATHER) - #define BOARD_TYPE "NRF52832_FEATHER" - #elif defined(NRF52840_FEATHER_SENSE) - #define BOARD_TYPE "NRF52840_FEATHER_SENSE" - #elif defined(NRF52840_ITSYBITSY) - #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" - #elif defined(NRF52840_CIRCUITPLAY) - #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" - #elif defined(NRF52840_CLUE) - #define BOARD_TYPE "NRF52840_CLUE" - #elif defined(NRF52840_METRO) - #define BOARD_TYPE "NRF52840_METRO_EXPRESS" - #elif defined(NRF52840_PCA10056) - #define BOARD_TYPE "NORDIC_NRF52840DK" - #elif defined(NINA_B302_ublox) - #define BOARD_TYPE "NINA_B302_ublox" - #elif defined(NINA_B112_ublox) - #define BOARD_TYPE "NINA_B112_ublox" - #elif defined(PARTICLE_XENON) - #define BOARD_TYPE "PARTICLE_XENON" - #elif defined(MDBT50Q_RX) - #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" - #elif defined(ARDUINO_NRF52_ADAFRUIT) - #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" - #else - #define BOARD_TYPE "nRF52 Unknown" - #endif +#if defined(NRF52840_FEATHER) + #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" +#elif defined(NRF52832_FEATHER) + #define BOARD_TYPE "NRF52832_FEATHER" +#elif defined(NRF52840_FEATHER_SENSE) + #define BOARD_TYPE "NRF52840_FEATHER_SENSE" +#elif defined(NRF52840_ITSYBITSY) + #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" +#elif defined(NRF52840_CIRCUITPLAY) + #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" +#elif defined(NRF52840_CLUE) + #define BOARD_TYPE "NRF52840_CLUE" +#elif defined(NRF52840_METRO) + #define BOARD_TYPE "NRF52840_METRO_EXPRESS" +#elif defined(NRF52840_PCA10056) + #define BOARD_TYPE "NORDIC_NRF52840DK" +#elif defined(NINA_B302_ublox) + #define BOARD_TYPE "NINA_B302_ublox" +#elif defined(NINA_B112_ublox) + #define BOARD_TYPE "NINA_B112_ublox" +#elif defined(PARTICLE_XENON) + #define BOARD_TYPE "PARTICLE_XENON" +#elif defined(MDBT50Q_RX) + #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" +#elif defined(ARDUINO_NRF52_ADAFRUIT) + #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" +#else + #define BOARD_TYPE "nRF52 Unknown" +#endif #define EspSerial Serial1 #elif defined(ESP8266_AT_USE_SAM_DUE) - // For SAM DUE - #define EspSerial Serial1 - #define BOARD_TYPE "SAM DUE" +// For SAM DUE +#define EspSerial Serial1 +#define BOARD_TYPE "SAM DUE" #elif defined(ESP8266_AT_USE_STM32) - // For STM32 - #warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h - #define EspSerial SERIAL_PORT_HARDWARE //Serial1 - - #if defined(STM32F0) - #warning STM32F0 board selected - #define BOARD_TYPE "STM32F0" - #elif defined(STM32F1) - #warning STM32F1 board selected - #define BOARD_TYPE "STM32F1" - #elif defined(STM32F2) - #warning STM32F2 board selected - #define BOARD_TYPE "STM32F2" - #elif defined(STM32F3) - #warning STM32F3 board selected - #define BOARD_TYPE "STM32F3" - #elif defined(STM32F4) - #warning STM32F4 board selected - #define BOARD_TYPE "STM32F4" - #elif defined(STM32F7) - - #if defined(ARDUINO_NUCLEO_F767ZI) - #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_F767ZI" - // RX TX - HardwareSerial Serial1(D0, D1); - #else - - #warning STM32F7 board selected - #define BOARD_TYPE "STM32F7" +// For STM32 +#warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h +#define EspSerial SERIAL_PORT_HARDWARE //Serial1 + +#if defined(STM32F0) + #warning STM32F0 board selected + #define BOARD_TYPE "STM32F0" +#elif defined(STM32F1) + #warning STM32F1 board selected + #define BOARD_TYPE "STM32F1" +#elif defined(STM32F2) + #warning STM32F2 board selected + #define BOARD_TYPE "STM32F2" +#elif defined(STM32F3) + #warning STM32F3 board selected + #define BOARD_TYPE "STM32F3" +#elif defined(STM32F4) + #warning STM32F4 board selected + #define BOARD_TYPE "STM32F4" +#elif defined(STM32F7) + + #if defined(ARDUINO_NUCLEO_F767ZI) + #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_F767ZI" + // RX TX + HardwareSerial Serial1(D0, D1); + #else - #endif - - #elif defined(STM32L0) - #if defined(ARDUINO_NUCLEO_L053R8) - #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_L053R8" - // RX TX - HardwareSerial Serial1(D0, D1); // (PA3, PA2); - #else - - #warning STM32L0 board selected - #define BOARD_TYPE "STM32L0" + #warning STM32F7 board selected + #define BOARD_TYPE "STM32F7" - #endif - - #elif defined(STM32L1) - #warning STM32L1 board selected - #define BOARD_TYPE "STM32L1" - #elif defined(STM32L4) - #warning STM32L4 board selected - #define BOARD_TYPE "STM32L4" - #elif defined(STM32L5) - #warning STM32L5 board selected - #define BOARD_TYPE "STM32L5" - #elif defined(STM32H7) - #warning STM32H7 board selected - #define BOARD_TYPE "STM32H7" - #elif defined(STM32G0) - #warning STM32G0 board selected - #define BOARD_TYPE "STM32G0" - #elif defined(STM32G4) - #warning STM32G4 board selected - #define BOARD_TYPE "STM32G4" - #elif defined(STM32WB) - #warning STM32WB board selected - #define BOARD_TYPE "STM32WB" - #elif defined(STM32MP1) - #warning STM32MP1 board selected - #define BOARD_TYPE "STM32MP1" + #endif + +#elif defined(STM32L0) + #if defined(ARDUINO_NUCLEO_L053R8) + #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_L053R8" + // RX TX + HardwareSerial Serial1(D0, D1); // (PA3, PA2); #else - #warning STM32 unknown board selected - #define BOARD_TYPE "STM32 Unknown" + + #warning STM32L0 board selected + #define BOARD_TYPE "STM32L0" + #endif +#elif defined(STM32L1) + #warning STM32L1 board selected + #define BOARD_TYPE "STM32L1" +#elif defined(STM32L4) + #warning STM32L4 board selected + #define BOARD_TYPE "STM32L4" +#elif defined(STM32L5) + #warning STM32L5 board selected + #define BOARD_TYPE "STM32L5" +#elif defined(STM32H7) + #warning STM32H7 board selected + #define BOARD_TYPE "STM32H7" +#elif defined(STM32G0) + #warning STM32G0 board selected + #define BOARD_TYPE "STM32G0" +#elif defined(STM32G4) + #warning STM32G4 board selected + #define BOARD_TYPE "STM32G4" +#elif defined(STM32WB) + #warning STM32WB board selected + #define BOARD_TYPE "STM32WB" +#elif defined(STM32MP1) + #warning STM32MP1 board selected + #define BOARD_TYPE "STM32MP1" +#else + #warning STM32 unknown board selected + #define BOARD_TYPE "STM32 Unknown" +#endif + #elif ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - - #warning RASPBERRY_PI_PICO board selected - #if defined(ARDUINO_ARCH_MBED) +#warning RASPBERRY_PI_PICO board selected + +#if defined(ARDUINO_ARCH_MBED) + +#warning Using ARDUINO_ARCH_MBED +#define ESP8266_AT_USE_MBED_RP2040 true - #warning Using ARDUINO_ARCH_MBED - #define ESP8266_AT_USE_MBED_RP2040 true +// Use true only for testing. Will erase stored config data +#define FORCE_REFORMAT false - // Use true only for testing. Will erase stored config data - #define FORCE_REFORMAT false - - #if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ +#if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - // Only undef known BOARD_NAME to use better one - #undef BOARD_NAME - #endif - - #if defined(ARDUINO_RASPBERRY_PI_PICO) - #define BOARD_NAME "MBED RASPBERRY_PI_PICO" - #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) - #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" - #elif defined(ARDUINO_GENERIC_RP2040) - #define BOARD_NAME "MBED GENERIC_RP2040" - #elif defined(ARDUINO_NANO_RP2040_CONNECT) - #define BOARD_NAME "MBED NANO_RP2040_CONNECT" - #else - // Use default BOARD_NAME if exists - #if !defined(BOARD_NAME) - #define BOARD_NAME "MBED Unknown RP2040" - #endif - #endif + // Only undef known BOARD_NAME to use better one + #undef BOARD_NAME + #endif + #if defined(ARDUINO_RASPBERRY_PI_PICO) + #define BOARD_NAME "MBED RASPBERRY_PI_PICO" + #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) + #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" + #elif defined(ARDUINO_GENERIC_RP2040) + #define BOARD_NAME "MBED GENERIC_RP2040" + #elif defined(ARDUINO_NANO_RP2040_CONNECT) + #define BOARD_NAME "MBED NANO_RP2040_CONNECT" + #else + // Use default BOARD_NAME if exists + #if !defined(BOARD_NAME) + #define BOARD_NAME "MBED Unknown RP2040" + #endif #endif - #define EspSerial Serial1 + #endif + #if defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #warning WIZNET_WIZFI360_EVB_PICO + #define EspSerial Serial2 + #else + #define EspSerial Serial1 + #endif + #else - // For Mega - #define EspSerial Serial3 - #define BOARD_TYPE "AVR Mega" +// For Mega +#define EspSerial Serial3 +#define BOARD_TYPE "AVR Mega" #endif #ifndef BOARD_NAME diff --git a/examples/AutoConnectWithFeedback/AutoConnectWithFeedback.ino b/examples/AutoConnectWithFeedback/AutoConnectWithFeedback.ino index 8ab91c39..ad144f29 100644 --- a/examples/AutoConnectWithFeedback/AutoConnectWithFeedback.ino +++ b/examples/AutoConnectWithFeedback/AutoConnectWithFeedback.ino @@ -1,13 +1,13 @@ /**************************************************************************************************************************** AutoConnectWithFeedBack.ino WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license *****************************************************************************************************************************/ @@ -59,6 +59,7 @@ void check_status() static ulong checkstatus_timeout = 0; #define HEARTBEAT_INTERVAL 10000L + // Print hearbeat every HEARTBEAT_INTERVAL (10) seconds. if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0)) { @@ -70,7 +71,8 @@ void check_status() void configModeCallback (ESP_AT_WiFiManager *myESP_WiFiManager) { Serial.print("Entered config mode with "); - Serial.println("AP_SSID : " + myESP_WiFiManager->getConfigPortalSSID() + " and AP_PASS = " + myESP_WiFiManager->getConfigPortalPW()); + Serial.println("AP_SSID : " + myESP_WiFiManager->getConfigPortalSSID() + " and AP_PASS = " + + myESP_WiFiManager->getConfigPortalPW()); } void enterConfigPortal() @@ -84,6 +86,8 @@ void enterConfigPortal() ESP_AT_wiFiManager.setMinimumSignalQuality(-1); + // 0 for random channel + //ESP_AT_wiFiManager.setAPChannel(0); ESP_AT_wiFiManager.setAPChannel(1); // Default AP IP is 192.168.4.1. Uncomment to use different AP IP @@ -100,14 +104,14 @@ void enterConfigPortal() Router_Pass = ESP_AT_wiFiManager.WiFi_Pass(); if ( (Router_SSID != "") && ESP_AT_wiFiManager.isWiFiConfigValid() ) - { + { if (ESP_AT_wiFiManager.connectWifi(Router_SSID, Router_Pass) == WL_CONNECTED) { Serial.println(F("Got stored Credentials. Try to connect first")); - + return; } - + ESP_AT_wiFiManager.setConfigPortalTimeout(60); //If no access point name has been previously entered disable timeout. Serial.println(F("Got stored Credentials but can't connect. Timeout 60s")); } @@ -144,10 +148,13 @@ void setup() // put your setup code here, to run once: // initialize the LED digital pin as an output. pinMode(LOCAL_PIN_LED, OUTPUT); - digitalWrite(LOCAL_PIN_LED, LED_ON); // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + + // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + digitalWrite(LOCAL_PIN_LED, LED_ON); Serial.begin(115200); - while (!Serial); + + while (!Serial && millis() < 5000); #if USE_ESP32_AT Serial.println("\nStart AutoConnectWithFeedBack with ESP32-AT WiFi module on " + String(BOARD_NAME)); @@ -167,6 +174,7 @@ void setup() if (WiFi.status() == WL_NO_SHIELD) { Serial.println(F("WiFi shield not present")); + // don't continue while (true); } diff --git a/examples/AutoConnectWithFeedback/defines.h b/examples/AutoConnectWithFeedback/defines.h index 5614772a..bc00164a 100644 --- a/examples/AutoConnectWithFeedback/defines.h +++ b/examples/AutoConnectWithFeedback/defines.h @@ -1,15 +1,15 @@ /**************************************************************************************************************************** defines.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager - Licensed under MIT license + Licensed under MIT license *****************************************************************************************************************************/ #ifndef defines_h @@ -21,27 +21,33 @@ #define _ESP_AT_LOGLEVEL_ 1 #define DEBUG_WIFIMGR true //false -// Uncomment to use ESP32-AT commands -//#define USE_ESP32_AT true +#define USING_WIZFI360 true + +#if (USING_WIZFI360) || defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #define USE_ESP32_AT true +#else + // Uncomment to use ESP32-AT commands + //#define USE_ESP32_AT true +#endif #if ( defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) \ || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_SAMD_MKRFox1200) || defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) \ || defined(ARDUINO_SAMD_MKRGSM1400) || defined(ARDUINO_SAMD_MKRNB1500) || defined(ARDUINO_SAMD_MKRVIDOR4000) || defined(__SAMD21G18A__) \ || defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) || defined(__SAMD21E18A__) || defined(__SAMD51__) || defined(__SAMD51J20A__) || defined(__SAMD51J19A__) \ || defined(__SAMD51G19A__) || defined(__SAMD51P19A__) || defined(__SAMD21G18A__) ) - #if defined(ESP8266_AT_USE_SAMD) - #undef ESP8266_AT_USE_SAMD - #endif - #define ESP8266_AT_USE_SAMD true +#if defined(ESP8266_AT_USE_SAMD) + #undef ESP8266_AT_USE_SAMD +#endif +#define ESP8266_AT_USE_SAMD true #endif #if ( defined(NRF52840_FEATHER) || defined(NRF52832_FEATHER) || defined(NRF52_SERIES) || defined(ARDUINO_NRF52_ADAFRUIT) || \ defined(NRF52840_FEATHER_SENSE) || defined(NRF52840_ITSYBITSY) || defined(NRF52840_CIRCUITPLAY) || defined(NRF52840_CLUE) || \ defined(NRF52840_METRO) || defined(NRF52840_PCA10056) || defined(PARTICLE_XENON) || defined(NINA_B302_ublox) || defined(NINA_B112_ublox) ) - #if defined(ESP8266_AT_USE_NRF528XX) - #undef ESP8266_AT_USE_NRF528XX - #endif - #define ESP8266_AT_USE_NRF528XX true +#if defined(ESP8266_AT_USE_NRF528XX) + #undef ESP8266_AT_USE_NRF528XX +#endif +#define ESP8266_AT_USE_NRF528XX true #endif #if ( defined(ARDUINO_SAM_DUE) || defined(__SAM3X8E__) ) @@ -51,300 +57,306 @@ #define ESP8266_AT_USE_SAM_DUE true #endif -#if ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ - defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ - defined(STM32WB) || defined(STM32MP1) ) - #if defined(ESP8266_AT_USE_STM32) - #undef ESP8266_AT_USE_STM32 - #endif - #define ESP8266_AT_USE_STM32 true +#if ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ + defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ + defined(STM32WB) || defined(STM32MP1) || defined(STM32L5) ) +#if defined(ESP8266_AT_USE_STM32) + #undef ESP8266_AT_USE_STM32 +#endif +#define ESP8266_AT_USE_STM32 true #endif #ifdef CORE_TEENSY +// For Teensy 4.1/4.0 +#define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 + +#if defined(__IMXRT1062__) // For Teensy 4.1/4.0 - #define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 - - #if defined(__IMXRT1062__) - // For Teensy 4.1/4.0 - #define BOARD_TYPE "TEENSY 4.1/4.0" - #elif defined(__MK66FX1M0__) - #define BOARD_TYPE "Teensy 3.6" - #elif defined(__MK64FX512__) - #define BOARD_TYPE "Teensy 3.5" - #elif defined(__MKL26Z64__) - #define BOARD_TYPE "Teensy LC" - #elif defined(__MK20DX256__) - #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) - #elif defined(__MK20DX128__) - #define BOARD_TYPE "Teensy 3.0" - #elif defined(__AVR_AT90USB1286__) - #error Teensy 2.0++ not supported yet - #elif defined(__AVR_ATmega32U4__) - #error Teensy 2.0 not supported yet - #else - // For Other Boards - #define BOARD_TYPE "Unknown Teensy Board" - #endif + #define BOARD_TYPE "TEENSY 4.1/4.0" +#elif defined(__MK66FX1M0__) + #define BOARD_TYPE "Teensy 3.6" +#elif defined(__MK64FX512__) + #define BOARD_TYPE "Teensy 3.5" +#elif defined(__MKL26Z64__) + #define BOARD_TYPE "Teensy LC" +#elif defined(__MK20DX256__) + #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) +#elif defined(__MK20DX128__) + #define BOARD_TYPE "Teensy 3.0" +#elif defined(__AVR_AT90USB1286__) + #error Teensy 2.0++ not supported yet +#elif defined(__AVR_ATmega32U4__) + #error Teensy 2.0 not supported yet +#else + // For Other Boards + #define BOARD_TYPE "Unknown Teensy Board" +#endif #elif defined(ESP8266_AT_USE_SAMD) - // For SAMD - #define EspSerial Serial1 - - #if defined(ARDUINO_SAMD_ZERO) - #define BOARD_TYPE "SAMD Zero" - #elif defined(ARDUINO_SAMD_MKR1000) - #define BOARD_TYPE "SAMD MKR1000" - #elif defined(ARDUINO_SAMD_MKRWIFI1010) - #define BOARD_TYPE "SAMD MKRWIFI1010" - #elif defined(ARDUINO_SAMD_NANO_33_IOT) - #define BOARD_TYPE "SAMD NANO_33_IOT" - #elif defined(ARDUINO_SAMD_MKRFox1200) - #define BOARD_TYPE "SAMD MKRFox1200" - #elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) - #define BOARD_TYPE "SAMD MKRWAN13X0" - #elif defined(ARDUINO_SAMD_MKRGSM1400) - #define BOARD_TYPE "SAMD MKRGSM1400" - #elif defined(ARDUINO_SAMD_MKRNB1500) - #define BOARD_TYPE "SAMD MKRNB1500" - #elif defined(ARDUINO_SAMD_MKRVIDOR4000) - #define BOARD_TYPE "SAMD MKRVIDOR4000" - #elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) - #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" - #elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" - #elif defined(ADAFRUIT_METRO_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" - #elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" - #elif defined(ADAFRUIT_GEMMA_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" - #elif defined(ADAFRUIT_TRINKET_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" - #elif defined(ADAFRUIT_ITSYBITSY_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" - #elif defined(ARDUINO_SAMD_HALLOWING_M0) - #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" - #elif defined(ADAFRUIT_METRO_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" - #elif defined(ADAFRUIT_GRAND_CENTRAL_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" - #elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" - #elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" - #elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" - #elif defined(ADAFRUIT_PYPORTAL) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" - #elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" - #elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" - #elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" - #elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" - #elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" - #elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" - #elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" - #elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" - #elif defined(SEEED_WIO_TERMINAL) - #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" - #elif defined(SEEED_FEMTO_M0) - #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" - #elif defined(SEEED_XIAO_M0) - #define BOARD_TYPE "SAMD SEEED_XIAO_M0" - #elif defined(Wio_Lite_MG126) - #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" - #elif defined(WIO_GPS_BOARD) - #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" - #elif defined(SEEEDUINO_ZERO) - #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" - #elif defined(SEEEDUINO_LORAWAN) - #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" - #elif defined(SEEED_GROVE_UI_WIRELESS) - #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" - #elif defined(__SAMD21E18A__) - #define BOARD_TYPE "SAMD21E18A" - #elif defined(__SAMD21G18A__) - #define BOARD_TYPE "SAMD21G18A" - #elif defined(__SAMD51G19A__) - #define BOARD_TYPE "SAMD51G19A" - #elif defined(__SAMD51J19A__) - #define BOARD_TYPE "SAMD51J19A" - #elif defined(__SAMD51J20A__) - #define BOARD_TYPE "SAMD51J20A" - #elif defined(__SAM3X8E__) - #define BOARD_TYPE "SAM3X8E" - #elif defined(__CPU_ARC__) - #define BOARD_TYPE "CPU_ARC" - #elif defined(__SAMD51__) - #define BOARD_TYPE "SAMD51" - #else - #define BOARD_TYPE "SAMD Unknown" - #endif +// For SAMD +#define EspSerial Serial1 + +#if defined(ARDUINO_SAMD_ZERO) + #define BOARD_TYPE "SAMD Zero" +#elif defined(ARDUINO_SAMD_MKR1000) + #define BOARD_TYPE "SAMD MKR1000" +#elif defined(ARDUINO_SAMD_MKRWIFI1010) + #define BOARD_TYPE "SAMD MKRWIFI1010" +#elif defined(ARDUINO_SAMD_NANO_33_IOT) + #define BOARD_TYPE "SAMD NANO_33_IOT" +#elif defined(ARDUINO_SAMD_MKRFox1200) + #define BOARD_TYPE "SAMD MKRFox1200" +#elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) + #define BOARD_TYPE "SAMD MKRWAN13X0" +#elif defined(ARDUINO_SAMD_MKRGSM1400) + #define BOARD_TYPE "SAMD MKRGSM1400" +#elif defined(ARDUINO_SAMD_MKRNB1500) + #define BOARD_TYPE "SAMD MKRNB1500" +#elif defined(ARDUINO_SAMD_MKRVIDOR4000) + #define BOARD_TYPE "SAMD MKRVIDOR4000" +#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) + #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" +#elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" +#elif defined(ADAFRUIT_METRO_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" +#elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" +#elif defined(ADAFRUIT_GEMMA_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" +#elif defined(ADAFRUIT_TRINKET_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" +#elif defined(ADAFRUIT_ITSYBITSY_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" +#elif defined(ARDUINO_SAMD_HALLOWING_M0) + #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" +#elif defined(ADAFRUIT_METRO_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" +#elif defined(ADAFRUIT_GRAND_CENTRAL_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" +#elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" +#elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" +#elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" +#elif defined(ADAFRUIT_PYPORTAL) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" +#elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" +#elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" +#elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" +#elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" +#elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" +#elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" +#elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" +#elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" +#elif defined(SEEED_WIO_TERMINAL) + #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" +#elif defined(SEEED_FEMTO_M0) + #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" +#elif defined(SEEED_XIAO_M0) + #define BOARD_TYPE "SAMD SEEED_XIAO_M0" +#elif defined(Wio_Lite_MG126) + #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" +#elif defined(WIO_GPS_BOARD) + #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" +#elif defined(SEEEDUINO_ZERO) + #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" +#elif defined(SEEEDUINO_LORAWAN) + #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" +#elif defined(SEEED_GROVE_UI_WIRELESS) + #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" +#elif defined(__SAMD21E18A__) + #define BOARD_TYPE "SAMD21E18A" +#elif defined(__SAMD21G18A__) + #define BOARD_TYPE "SAMD21G18A" +#elif defined(__SAMD51G19A__) + #define BOARD_TYPE "SAMD51G19A" +#elif defined(__SAMD51J19A__) + #define BOARD_TYPE "SAMD51J19A" +#elif defined(__SAMD51J20A__) + #define BOARD_TYPE "SAMD51J20A" +#elif defined(__SAM3X8E__) + #define BOARD_TYPE "SAM3X8E" +#elif defined(__CPU_ARC__) + #define BOARD_TYPE "CPU_ARC" +#elif defined(__SAMD51__) + #define BOARD_TYPE "SAMD51" +#else + #define BOARD_TYPE "SAMD Unknown" +#endif #elif (ESP8266_AT_USE_NRF528XX) - #if defined(NRF52840_FEATHER) - #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" - #elif defined(NRF52832_FEATHER) - #define BOARD_TYPE "NRF52832_FEATHER" - #elif defined(NRF52840_FEATHER_SENSE) - #define BOARD_TYPE "NRF52840_FEATHER_SENSE" - #elif defined(NRF52840_ITSYBITSY) - #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" - #elif defined(NRF52840_CIRCUITPLAY) - #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" - #elif defined(NRF52840_CLUE) - #define BOARD_TYPE "NRF52840_CLUE" - #elif defined(NRF52840_METRO) - #define BOARD_TYPE "NRF52840_METRO_EXPRESS" - #elif defined(NRF52840_PCA10056) - #define BOARD_TYPE "NORDIC_NRF52840DK" - #elif defined(NINA_B302_ublox) - #define BOARD_TYPE "NINA_B302_ublox" - #elif defined(NINA_B112_ublox) - #define BOARD_TYPE "NINA_B112_ublox" - #elif defined(PARTICLE_XENON) - #define BOARD_TYPE "PARTICLE_XENON" - #elif defined(MDBT50Q_RX) - #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" - #elif defined(ARDUINO_NRF52_ADAFRUIT) - #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" - #else - #define BOARD_TYPE "nRF52 Unknown" - #endif +#if defined(NRF52840_FEATHER) + #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" +#elif defined(NRF52832_FEATHER) + #define BOARD_TYPE "NRF52832_FEATHER" +#elif defined(NRF52840_FEATHER_SENSE) + #define BOARD_TYPE "NRF52840_FEATHER_SENSE" +#elif defined(NRF52840_ITSYBITSY) + #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" +#elif defined(NRF52840_CIRCUITPLAY) + #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" +#elif defined(NRF52840_CLUE) + #define BOARD_TYPE "NRF52840_CLUE" +#elif defined(NRF52840_METRO) + #define BOARD_TYPE "NRF52840_METRO_EXPRESS" +#elif defined(NRF52840_PCA10056) + #define BOARD_TYPE "NORDIC_NRF52840DK" +#elif defined(NINA_B302_ublox) + #define BOARD_TYPE "NINA_B302_ublox" +#elif defined(NINA_B112_ublox) + #define BOARD_TYPE "NINA_B112_ublox" +#elif defined(PARTICLE_XENON) + #define BOARD_TYPE "PARTICLE_XENON" +#elif defined(MDBT50Q_RX) + #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" +#elif defined(ARDUINO_NRF52_ADAFRUIT) + #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" +#else + #define BOARD_TYPE "nRF52 Unknown" +#endif #define EspSerial Serial1 #elif defined(ESP8266_AT_USE_SAM_DUE) - // For SAM DUE - #define EspSerial Serial1 - #define BOARD_TYPE "SAM DUE" +// For SAM DUE +#define EspSerial Serial1 +#define BOARD_TYPE "SAM DUE" #elif defined(ESP8266_AT_USE_STM32) - // For STM32 - #warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h - #define EspSerial SERIAL_PORT_HARDWARE //Serial1 - - #if defined(STM32F0) - #warning STM32F0 board selected - #define BOARD_TYPE "STM32F0" - #elif defined(STM32F1) - #warning STM32F1 board selected - #define BOARD_TYPE "STM32F1" - #elif defined(STM32F2) - #warning STM32F2 board selected - #define BOARD_TYPE "STM32F2" - #elif defined(STM32F3) - #warning STM32F3 board selected - #define BOARD_TYPE "STM32F3" - #elif defined(STM32F4) - #warning STM32F4 board selected - #define BOARD_TYPE "STM32F4" - #elif defined(STM32F7) - - #if defined(ARDUINO_NUCLEO_F767ZI) - #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_F767ZI" - // RX TX - HardwareSerial Serial1(D0, D1); - #else - - #warning STM32F7 board selected - #define BOARD_TYPE "STM32F7" +// For STM32 +#warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h +#define EspSerial SERIAL_PORT_HARDWARE //Serial1 + +#if defined(STM32F0) + #warning STM32F0 board selected + #define BOARD_TYPE "STM32F0" +#elif defined(STM32F1) + #warning STM32F1 board selected + #define BOARD_TYPE "STM32F1" +#elif defined(STM32F2) + #warning STM32F2 board selected + #define BOARD_TYPE "STM32F2" +#elif defined(STM32F3) + #warning STM32F3 board selected + #define BOARD_TYPE "STM32F3" +#elif defined(STM32F4) + #warning STM32F4 board selected + #define BOARD_TYPE "STM32F4" +#elif defined(STM32F7) + + #if defined(ARDUINO_NUCLEO_F767ZI) + #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_F767ZI" + // RX TX + HardwareSerial Serial1(D0, D1); + #else - #endif - - #elif defined(STM32L0) - #if defined(ARDUINO_NUCLEO_L053R8) - #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_L053R8" - // RX TX - HardwareSerial Serial1(D0, D1); // (PA3, PA2); - #else - - #warning STM32L0 board selected - #define BOARD_TYPE "STM32L0" + #warning STM32F7 board selected + #define BOARD_TYPE "STM32F7" - #endif - - #elif defined(STM32L1) - #warning STM32L1 board selected - #define BOARD_TYPE "STM32L1" - #elif defined(STM32L4) - #warning STM32L4 board selected - #define BOARD_TYPE "STM32L4" - #elif defined(STM32L5) - #warning STM32L5 board selected - #define BOARD_TYPE "STM32L5" - #elif defined(STM32H7) - #warning STM32H7 board selected - #define BOARD_TYPE "STM32H7" - #elif defined(STM32G0) - #warning STM32G0 board selected - #define BOARD_TYPE "STM32G0" - #elif defined(STM32G4) - #warning STM32G4 board selected - #define BOARD_TYPE "STM32G4" - #elif defined(STM32WB) - #warning STM32WB board selected - #define BOARD_TYPE "STM32WB" - #elif defined(STM32MP1) - #warning STM32MP1 board selected - #define BOARD_TYPE "STM32MP1" + #endif + +#elif defined(STM32L0) + #if defined(ARDUINO_NUCLEO_L053R8) + #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_L053R8" + // RX TX + HardwareSerial Serial1(D0, D1); // (PA3, PA2); #else - #warning STM32 unknown board selected - #define BOARD_TYPE "STM32 Unknown" + + #warning STM32L0 board selected + #define BOARD_TYPE "STM32L0" + #endif +#elif defined(STM32L1) + #warning STM32L1 board selected + #define BOARD_TYPE "STM32L1" +#elif defined(STM32L4) + #warning STM32L4 board selected + #define BOARD_TYPE "STM32L4" +#elif defined(STM32L5) + #warning STM32L5 board selected + #define BOARD_TYPE "STM32L5" +#elif defined(STM32H7) + #warning STM32H7 board selected + #define BOARD_TYPE "STM32H7" +#elif defined(STM32G0) + #warning STM32G0 board selected + #define BOARD_TYPE "STM32G0" +#elif defined(STM32G4) + #warning STM32G4 board selected + #define BOARD_TYPE "STM32G4" +#elif defined(STM32WB) + #warning STM32WB board selected + #define BOARD_TYPE "STM32WB" +#elif defined(STM32MP1) + #warning STM32MP1 board selected + #define BOARD_TYPE "STM32MP1" +#else + #warning STM32 unknown board selected + #define BOARD_TYPE "STM32 Unknown" +#endif + #elif ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - - #warning RASPBERRY_PI_PICO board selected - #if defined(ARDUINO_ARCH_MBED) +#warning RASPBERRY_PI_PICO board selected + +#if defined(ARDUINO_ARCH_MBED) - #warning Using ARDUINO_ARCH_MBED - #define ESP8266_AT_USE_MBED_RP2040 true +#warning Using ARDUINO_ARCH_MBED +#define ESP8266_AT_USE_MBED_RP2040 true - // Use true only for testing. Will erase stored config data - #define FORCE_REFORMAT false - - #if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ +// Use true only for testing. Will erase stored config data +#define FORCE_REFORMAT false + +#if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - // Only undef known BOARD_NAME to use better one - #undef BOARD_NAME - #endif - - #if defined(ARDUINO_RASPBERRY_PI_PICO) - #define BOARD_NAME "MBED RASPBERRY_PI_PICO" - #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) - #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" - #elif defined(ARDUINO_GENERIC_RP2040) - #define BOARD_NAME "MBED GENERIC_RP2040" - #elif defined(ARDUINO_NANO_RP2040_CONNECT) - #define BOARD_NAME "MBED NANO_RP2040_CONNECT" - #else - // Use default BOARD_NAME if exists - #if !defined(BOARD_NAME) - #define BOARD_NAME "MBED Unknown RP2040" - #endif - #endif + // Only undef known BOARD_NAME to use better one + #undef BOARD_NAME + #endif + #if defined(ARDUINO_RASPBERRY_PI_PICO) + #define BOARD_NAME "MBED RASPBERRY_PI_PICO" + #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) + #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" + #elif defined(ARDUINO_GENERIC_RP2040) + #define BOARD_NAME "MBED GENERIC_RP2040" + #elif defined(ARDUINO_NANO_RP2040_CONNECT) + #define BOARD_NAME "MBED NANO_RP2040_CONNECT" + #else + // Use default BOARD_NAME if exists + #if !defined(BOARD_NAME) + #define BOARD_NAME "MBED Unknown RP2040" + #endif #endif - #define EspSerial Serial1 + #endif + #if defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #warning WIZNET_WIZFI360_EVB_PICO + #define EspSerial Serial2 + #else + #define EspSerial Serial1 + #endif + #else - // For Mega - #define EspSerial Serial3 - #define BOARD_TYPE "AVR Mega" + +// For Mega +#define EspSerial Serial3 +#define BOARD_TYPE "AVR Mega" #endif #ifndef BOARD_NAME diff --git a/examples/ConfigOnStartup/ConfigOnStartup.ino b/examples/ConfigOnStartup/ConfigOnStartup.ino index be1bb402..1ff965db 100644 --- a/examples/ConfigOnStartup/ConfigOnStartup.ino +++ b/examples/ConfigOnStartup/ConfigOnStartup.ino @@ -1,13 +1,13 @@ /**************************************************************************************************************************** ConfigOnStartup.ino WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license *****************************************************************************************************************************/ @@ -75,6 +75,7 @@ void check_status() //KH #define HEARTBEAT_INTERVAL 600000L + // Print hearbeat every HEARTBEAT_INTERVAL (600) seconds. if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0)) { @@ -92,10 +93,12 @@ void enterConfigPortal() ESP_AT_wiFiManager.setMinimumSignalQuality(-1); + // 0 for random channel + //ESP_AT_wiFiManager.setAPChannel(0); ESP_AT_wiFiManager.setAPChannel(1); // Default AP IP is 192.168.4.1. Uncomment to use different AP IP - ESP_AT_wiFiManager.setAPStaticIPConfig(staticAP_IP); + //ESP_AT_wiFiManager.setAPStaticIPConfig(staticAP_IP); // Set static STA IP ESP_AT_wiFiManager.setSTAStaticIPConfig(IPAddress(192, 168, 2, 114)); @@ -108,14 +111,14 @@ void enterConfigPortal() Router_Pass = ESP_AT_wiFiManager.WiFi_Pass(); if ( (Router_SSID != "") && ESP_AT_wiFiManager.isWiFiConfigValid() ) - { + { if (ESP_AT_wiFiManager.connectWifi(Router_SSID, Router_Pass) == WL_CONNECTED) { Serial.println(F("Got stored Credentials. Try to connect first")); - + return; } - + ESP_AT_wiFiManager.setConfigPortalTimeout(60); //If no access point name has been previously entered disable timeout. Serial.println(F("Got stored Credentials but can't connect. Timeout 60s")); } @@ -143,10 +146,13 @@ void setup() // put your setup code here, to run once: // initialize the LED digital pin as an output. pinMode(LOCAL_PIN_LED, OUTPUT); - digitalWrite(LOCAL_PIN_LED, LED_ON); // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + + // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + digitalWrite(LOCAL_PIN_LED, LED_ON); Serial.begin(115200); - while (!Serial); + + while (!Serial && millis() < 5000); unsigned long startedAt = millis(); @@ -168,6 +174,7 @@ void setup() if (WiFi.status() == WL_NO_SHIELD) { Serial.println(F("WiFi shield not present")); + // don't continue while (true); } @@ -185,6 +192,7 @@ void setup() while ( (WiFi.status() != WL_CONNECTED) && (millis() - startedAt < WIFI_CONNECT_TIMEOUT ) ) { int i = 0; + while ((!WiFi.status() || WiFi.status() >= WL_DISCONNECTED) && i++ < WHILE_LOOP_STEPS) { delay(WHILE_LOOP_DELAY); diff --git a/examples/ConfigOnStartup/defines.h b/examples/ConfigOnStartup/defines.h index eb5b2025..bc00164a 100644 --- a/examples/ConfigOnStartup/defines.h +++ b/examples/ConfigOnStartup/defines.h @@ -1,13 +1,13 @@ /**************************************************************************************************************************** defines.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license *****************************************************************************************************************************/ @@ -21,27 +21,33 @@ #define _ESP_AT_LOGLEVEL_ 1 #define DEBUG_WIFIMGR true //false -// Uncomment to use ESP32-AT commands -//#define USE_ESP32_AT true +#define USING_WIZFI360 true + +#if (USING_WIZFI360) || defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #define USE_ESP32_AT true +#else + // Uncomment to use ESP32-AT commands + //#define USE_ESP32_AT true +#endif #if ( defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) \ || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_SAMD_MKRFox1200) || defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) \ || defined(ARDUINO_SAMD_MKRGSM1400) || defined(ARDUINO_SAMD_MKRNB1500) || defined(ARDUINO_SAMD_MKRVIDOR4000) || defined(__SAMD21G18A__) \ || defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) || defined(__SAMD21E18A__) || defined(__SAMD51__) || defined(__SAMD51J20A__) || defined(__SAMD51J19A__) \ || defined(__SAMD51G19A__) || defined(__SAMD51P19A__) || defined(__SAMD21G18A__) ) - #if defined(ESP8266_AT_USE_SAMD) - #undef ESP8266_AT_USE_SAMD - #endif - #define ESP8266_AT_USE_SAMD true +#if defined(ESP8266_AT_USE_SAMD) + #undef ESP8266_AT_USE_SAMD +#endif +#define ESP8266_AT_USE_SAMD true #endif #if ( defined(NRF52840_FEATHER) || defined(NRF52832_FEATHER) || defined(NRF52_SERIES) || defined(ARDUINO_NRF52_ADAFRUIT) || \ defined(NRF52840_FEATHER_SENSE) || defined(NRF52840_ITSYBITSY) || defined(NRF52840_CIRCUITPLAY) || defined(NRF52840_CLUE) || \ defined(NRF52840_METRO) || defined(NRF52840_PCA10056) || defined(PARTICLE_XENON) || defined(NINA_B302_ublox) || defined(NINA_B112_ublox) ) - #if defined(ESP8266_AT_USE_NRF528XX) - #undef ESP8266_AT_USE_NRF528XX - #endif - #define ESP8266_AT_USE_NRF528XX true +#if defined(ESP8266_AT_USE_NRF528XX) + #undef ESP8266_AT_USE_NRF528XX +#endif +#define ESP8266_AT_USE_NRF528XX true #endif #if ( defined(ARDUINO_SAM_DUE) || defined(__SAM3X8E__) ) @@ -51,300 +57,306 @@ #define ESP8266_AT_USE_SAM_DUE true #endif -#if ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ - defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ - defined(STM32WB) || defined(STM32MP1) ) - #if defined(ESP8266_AT_USE_STM32) - #undef ESP8266_AT_USE_STM32 - #endif - #define ESP8266_AT_USE_STM32 true +#if ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ + defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ + defined(STM32WB) || defined(STM32MP1) || defined(STM32L5) ) +#if defined(ESP8266_AT_USE_STM32) + #undef ESP8266_AT_USE_STM32 +#endif +#define ESP8266_AT_USE_STM32 true #endif #ifdef CORE_TEENSY +// For Teensy 4.1/4.0 +#define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 + +#if defined(__IMXRT1062__) // For Teensy 4.1/4.0 - #define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 - - #if defined(__IMXRT1062__) - // For Teensy 4.1/4.0 - #define BOARD_TYPE "TEENSY 4.1/4.0" - #elif defined(__MK66FX1M0__) - #define BOARD_TYPE "Teensy 3.6" - #elif defined(__MK64FX512__) - #define BOARD_TYPE "Teensy 3.5" - #elif defined(__MKL26Z64__) - #define BOARD_TYPE "Teensy LC" - #elif defined(__MK20DX256__) - #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) - #elif defined(__MK20DX128__) - #define BOARD_TYPE "Teensy 3.0" - #elif defined(__AVR_AT90USB1286__) - #error Teensy 2.0++ not supported yet - #elif defined(__AVR_ATmega32U4__) - #error Teensy 2.0 not supported yet - #else - // For Other Boards - #define BOARD_TYPE "Unknown Teensy Board" - #endif + #define BOARD_TYPE "TEENSY 4.1/4.0" +#elif defined(__MK66FX1M0__) + #define BOARD_TYPE "Teensy 3.6" +#elif defined(__MK64FX512__) + #define BOARD_TYPE "Teensy 3.5" +#elif defined(__MKL26Z64__) + #define BOARD_TYPE "Teensy LC" +#elif defined(__MK20DX256__) + #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) +#elif defined(__MK20DX128__) + #define BOARD_TYPE "Teensy 3.0" +#elif defined(__AVR_AT90USB1286__) + #error Teensy 2.0++ not supported yet +#elif defined(__AVR_ATmega32U4__) + #error Teensy 2.0 not supported yet +#else + // For Other Boards + #define BOARD_TYPE "Unknown Teensy Board" +#endif #elif defined(ESP8266_AT_USE_SAMD) - // For SAMD - #define EspSerial Serial1 - - #if defined(ARDUINO_SAMD_ZERO) - #define BOARD_TYPE "SAMD Zero" - #elif defined(ARDUINO_SAMD_MKR1000) - #define BOARD_TYPE "SAMD MKR1000" - #elif defined(ARDUINO_SAMD_MKRWIFI1010) - #define BOARD_TYPE "SAMD MKRWIFI1010" - #elif defined(ARDUINO_SAMD_NANO_33_IOT) - #define BOARD_TYPE "SAMD NANO_33_IOT" - #elif defined(ARDUINO_SAMD_MKRFox1200) - #define BOARD_TYPE "SAMD MKRFox1200" - #elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) - #define BOARD_TYPE "SAMD MKRWAN13X0" - #elif defined(ARDUINO_SAMD_MKRGSM1400) - #define BOARD_TYPE "SAMD MKRGSM1400" - #elif defined(ARDUINO_SAMD_MKRNB1500) - #define BOARD_TYPE "SAMD MKRNB1500" - #elif defined(ARDUINO_SAMD_MKRVIDOR4000) - #define BOARD_TYPE "SAMD MKRVIDOR4000" - #elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) - #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" - #elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" - #elif defined(ADAFRUIT_METRO_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" - #elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" - #elif defined(ADAFRUIT_GEMMA_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" - #elif defined(ADAFRUIT_TRINKET_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" - #elif defined(ADAFRUIT_ITSYBITSY_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" - #elif defined(ARDUINO_SAMD_HALLOWING_M0) - #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" - #elif defined(ADAFRUIT_METRO_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" - #elif defined(ADAFRUIT_GRAND_CENTRAL_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" - #elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" - #elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" - #elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" - #elif defined(ADAFRUIT_PYPORTAL) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" - #elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" - #elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" - #elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" - #elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" - #elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" - #elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" - #elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" - #elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" - #elif defined(SEEED_WIO_TERMINAL) - #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" - #elif defined(SEEED_FEMTO_M0) - #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" - #elif defined(SEEED_XIAO_M0) - #define BOARD_TYPE "SAMD SEEED_XIAO_M0" - #elif defined(Wio_Lite_MG126) - #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" - #elif defined(WIO_GPS_BOARD) - #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" - #elif defined(SEEEDUINO_ZERO) - #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" - #elif defined(SEEEDUINO_LORAWAN) - #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" - #elif defined(SEEED_GROVE_UI_WIRELESS) - #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" - #elif defined(__SAMD21E18A__) - #define BOARD_TYPE "SAMD21E18A" - #elif defined(__SAMD21G18A__) - #define BOARD_TYPE "SAMD21G18A" - #elif defined(__SAMD51G19A__) - #define BOARD_TYPE "SAMD51G19A" - #elif defined(__SAMD51J19A__) - #define BOARD_TYPE "SAMD51J19A" - #elif defined(__SAMD51J20A__) - #define BOARD_TYPE "SAMD51J20A" - #elif defined(__SAM3X8E__) - #define BOARD_TYPE "SAM3X8E" - #elif defined(__CPU_ARC__) - #define BOARD_TYPE "CPU_ARC" - #elif defined(__SAMD51__) - #define BOARD_TYPE "SAMD51" - #else - #define BOARD_TYPE "SAMD Unknown" - #endif +// For SAMD +#define EspSerial Serial1 + +#if defined(ARDUINO_SAMD_ZERO) + #define BOARD_TYPE "SAMD Zero" +#elif defined(ARDUINO_SAMD_MKR1000) + #define BOARD_TYPE "SAMD MKR1000" +#elif defined(ARDUINO_SAMD_MKRWIFI1010) + #define BOARD_TYPE "SAMD MKRWIFI1010" +#elif defined(ARDUINO_SAMD_NANO_33_IOT) + #define BOARD_TYPE "SAMD NANO_33_IOT" +#elif defined(ARDUINO_SAMD_MKRFox1200) + #define BOARD_TYPE "SAMD MKRFox1200" +#elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) + #define BOARD_TYPE "SAMD MKRWAN13X0" +#elif defined(ARDUINO_SAMD_MKRGSM1400) + #define BOARD_TYPE "SAMD MKRGSM1400" +#elif defined(ARDUINO_SAMD_MKRNB1500) + #define BOARD_TYPE "SAMD MKRNB1500" +#elif defined(ARDUINO_SAMD_MKRVIDOR4000) + #define BOARD_TYPE "SAMD MKRVIDOR4000" +#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) + #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" +#elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" +#elif defined(ADAFRUIT_METRO_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" +#elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" +#elif defined(ADAFRUIT_GEMMA_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" +#elif defined(ADAFRUIT_TRINKET_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" +#elif defined(ADAFRUIT_ITSYBITSY_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" +#elif defined(ARDUINO_SAMD_HALLOWING_M0) + #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" +#elif defined(ADAFRUIT_METRO_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" +#elif defined(ADAFRUIT_GRAND_CENTRAL_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" +#elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" +#elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" +#elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" +#elif defined(ADAFRUIT_PYPORTAL) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" +#elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" +#elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" +#elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" +#elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" +#elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" +#elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" +#elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" +#elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" +#elif defined(SEEED_WIO_TERMINAL) + #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" +#elif defined(SEEED_FEMTO_M0) + #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" +#elif defined(SEEED_XIAO_M0) + #define BOARD_TYPE "SAMD SEEED_XIAO_M0" +#elif defined(Wio_Lite_MG126) + #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" +#elif defined(WIO_GPS_BOARD) + #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" +#elif defined(SEEEDUINO_ZERO) + #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" +#elif defined(SEEEDUINO_LORAWAN) + #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" +#elif defined(SEEED_GROVE_UI_WIRELESS) + #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" +#elif defined(__SAMD21E18A__) + #define BOARD_TYPE "SAMD21E18A" +#elif defined(__SAMD21G18A__) + #define BOARD_TYPE "SAMD21G18A" +#elif defined(__SAMD51G19A__) + #define BOARD_TYPE "SAMD51G19A" +#elif defined(__SAMD51J19A__) + #define BOARD_TYPE "SAMD51J19A" +#elif defined(__SAMD51J20A__) + #define BOARD_TYPE "SAMD51J20A" +#elif defined(__SAM3X8E__) + #define BOARD_TYPE "SAM3X8E" +#elif defined(__CPU_ARC__) + #define BOARD_TYPE "CPU_ARC" +#elif defined(__SAMD51__) + #define BOARD_TYPE "SAMD51" +#else + #define BOARD_TYPE "SAMD Unknown" +#endif #elif (ESP8266_AT_USE_NRF528XX) - #if defined(NRF52840_FEATHER) - #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" - #elif defined(NRF52832_FEATHER) - #define BOARD_TYPE "NRF52832_FEATHER" - #elif defined(NRF52840_FEATHER_SENSE) - #define BOARD_TYPE "NRF52840_FEATHER_SENSE" - #elif defined(NRF52840_ITSYBITSY) - #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" - #elif defined(NRF52840_CIRCUITPLAY) - #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" - #elif defined(NRF52840_CLUE) - #define BOARD_TYPE "NRF52840_CLUE" - #elif defined(NRF52840_METRO) - #define BOARD_TYPE "NRF52840_METRO_EXPRESS" - #elif defined(NRF52840_PCA10056) - #define BOARD_TYPE "NORDIC_NRF52840DK" - #elif defined(NINA_B302_ublox) - #define BOARD_TYPE "NINA_B302_ublox" - #elif defined(NINA_B112_ublox) - #define BOARD_TYPE "NINA_B112_ublox" - #elif defined(PARTICLE_XENON) - #define BOARD_TYPE "PARTICLE_XENON" - #elif defined(MDBT50Q_RX) - #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" - #elif defined(ARDUINO_NRF52_ADAFRUIT) - #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" - #else - #define BOARD_TYPE "nRF52 Unknown" - #endif +#if defined(NRF52840_FEATHER) + #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" +#elif defined(NRF52832_FEATHER) + #define BOARD_TYPE "NRF52832_FEATHER" +#elif defined(NRF52840_FEATHER_SENSE) + #define BOARD_TYPE "NRF52840_FEATHER_SENSE" +#elif defined(NRF52840_ITSYBITSY) + #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" +#elif defined(NRF52840_CIRCUITPLAY) + #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" +#elif defined(NRF52840_CLUE) + #define BOARD_TYPE "NRF52840_CLUE" +#elif defined(NRF52840_METRO) + #define BOARD_TYPE "NRF52840_METRO_EXPRESS" +#elif defined(NRF52840_PCA10056) + #define BOARD_TYPE "NORDIC_NRF52840DK" +#elif defined(NINA_B302_ublox) + #define BOARD_TYPE "NINA_B302_ublox" +#elif defined(NINA_B112_ublox) + #define BOARD_TYPE "NINA_B112_ublox" +#elif defined(PARTICLE_XENON) + #define BOARD_TYPE "PARTICLE_XENON" +#elif defined(MDBT50Q_RX) + #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" +#elif defined(ARDUINO_NRF52_ADAFRUIT) + #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" +#else + #define BOARD_TYPE "nRF52 Unknown" +#endif #define EspSerial Serial1 #elif defined(ESP8266_AT_USE_SAM_DUE) - // For SAM DUE - #define EspSerial Serial1 - #define BOARD_TYPE "SAM DUE" +// For SAM DUE +#define EspSerial Serial1 +#define BOARD_TYPE "SAM DUE" #elif defined(ESP8266_AT_USE_STM32) - // For STM32 - #warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h - #define EspSerial SERIAL_PORT_HARDWARE //Serial1 - - #if defined(STM32F0) - #warning STM32F0 board selected - #define BOARD_TYPE "STM32F0" - #elif defined(STM32F1) - #warning STM32F1 board selected - #define BOARD_TYPE "STM32F1" - #elif defined(STM32F2) - #warning STM32F2 board selected - #define BOARD_TYPE "STM32F2" - #elif defined(STM32F3) - #warning STM32F3 board selected - #define BOARD_TYPE "STM32F3" - #elif defined(STM32F4) - #warning STM32F4 board selected - #define BOARD_TYPE "STM32F4" - #elif defined(STM32F7) - - #if defined(ARDUINO_NUCLEO_F767ZI) - #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_F767ZI" - // RX TX - HardwareSerial Serial1(D0, D1); - #else - - #warning STM32F7 board selected - #define BOARD_TYPE "STM32F7" +// For STM32 +#warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h +#define EspSerial SERIAL_PORT_HARDWARE //Serial1 + +#if defined(STM32F0) + #warning STM32F0 board selected + #define BOARD_TYPE "STM32F0" +#elif defined(STM32F1) + #warning STM32F1 board selected + #define BOARD_TYPE "STM32F1" +#elif defined(STM32F2) + #warning STM32F2 board selected + #define BOARD_TYPE "STM32F2" +#elif defined(STM32F3) + #warning STM32F3 board selected + #define BOARD_TYPE "STM32F3" +#elif defined(STM32F4) + #warning STM32F4 board selected + #define BOARD_TYPE "STM32F4" +#elif defined(STM32F7) + + #if defined(ARDUINO_NUCLEO_F767ZI) + #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_F767ZI" + // RX TX + HardwareSerial Serial1(D0, D1); + #else - #endif - - #elif defined(STM32L0) - #if defined(ARDUINO_NUCLEO_L053R8) - #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_L053R8" - // RX TX - HardwareSerial Serial1(D0, D1); // (PA3, PA2); - #else - - #warning STM32L0 board selected - #define BOARD_TYPE "STM32L0" + #warning STM32F7 board selected + #define BOARD_TYPE "STM32F7" - #endif - - #elif defined(STM32L1) - #warning STM32L1 board selected - #define BOARD_TYPE "STM32L1" - #elif defined(STM32L4) - #warning STM32L4 board selected - #define BOARD_TYPE "STM32L4" - #elif defined(STM32L5) - #warning STM32L5 board selected - #define BOARD_TYPE "STM32L5" - #elif defined(STM32H7) - #warning STM32H7 board selected - #define BOARD_TYPE "STM32H7" - #elif defined(STM32G0) - #warning STM32G0 board selected - #define BOARD_TYPE "STM32G0" - #elif defined(STM32G4) - #warning STM32G4 board selected - #define BOARD_TYPE "STM32G4" - #elif defined(STM32WB) - #warning STM32WB board selected - #define BOARD_TYPE "STM32WB" - #elif defined(STM32MP1) - #warning STM32MP1 board selected - #define BOARD_TYPE "STM32MP1" + #endif + +#elif defined(STM32L0) + #if defined(ARDUINO_NUCLEO_L053R8) + #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_L053R8" + // RX TX + HardwareSerial Serial1(D0, D1); // (PA3, PA2); #else - #warning STM32 unknown board selected - #define BOARD_TYPE "STM32 Unknown" + + #warning STM32L0 board selected + #define BOARD_TYPE "STM32L0" + #endif +#elif defined(STM32L1) + #warning STM32L1 board selected + #define BOARD_TYPE "STM32L1" +#elif defined(STM32L4) + #warning STM32L4 board selected + #define BOARD_TYPE "STM32L4" +#elif defined(STM32L5) + #warning STM32L5 board selected + #define BOARD_TYPE "STM32L5" +#elif defined(STM32H7) + #warning STM32H7 board selected + #define BOARD_TYPE "STM32H7" +#elif defined(STM32G0) + #warning STM32G0 board selected + #define BOARD_TYPE "STM32G0" +#elif defined(STM32G4) + #warning STM32G4 board selected + #define BOARD_TYPE "STM32G4" +#elif defined(STM32WB) + #warning STM32WB board selected + #define BOARD_TYPE "STM32WB" +#elif defined(STM32MP1) + #warning STM32MP1 board selected + #define BOARD_TYPE "STM32MP1" +#else + #warning STM32 unknown board selected + #define BOARD_TYPE "STM32 Unknown" +#endif + #elif ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - - #warning RASPBERRY_PI_PICO board selected - #if defined(ARDUINO_ARCH_MBED) +#warning RASPBERRY_PI_PICO board selected + +#if defined(ARDUINO_ARCH_MBED) - #warning Using ARDUINO_ARCH_MBED - #define ESP8266_AT_USE_MBED_RP2040 true +#warning Using ARDUINO_ARCH_MBED +#define ESP8266_AT_USE_MBED_RP2040 true - // Use true only for testing. Will erase stored config data - #define FORCE_REFORMAT false - - #if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ +// Use true only for testing. Will erase stored config data +#define FORCE_REFORMAT false + +#if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - // Only undef known BOARD_NAME to use better one - #undef BOARD_NAME - #endif - - #if defined(ARDUINO_RASPBERRY_PI_PICO) - #define BOARD_NAME "MBED RASPBERRY_PI_PICO" - #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) - #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" - #elif defined(ARDUINO_GENERIC_RP2040) - #define BOARD_NAME "MBED GENERIC_RP2040" - #elif defined(ARDUINO_NANO_RP2040_CONNECT) - #define BOARD_NAME "MBED NANO_RP2040_CONNECT" - #else - // Use default BOARD_NAME if exists - #if !defined(BOARD_NAME) - #define BOARD_NAME "MBED Unknown RP2040" - #endif - #endif + // Only undef known BOARD_NAME to use better one + #undef BOARD_NAME + #endif + #if defined(ARDUINO_RASPBERRY_PI_PICO) + #define BOARD_NAME "MBED RASPBERRY_PI_PICO" + #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) + #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" + #elif defined(ARDUINO_GENERIC_RP2040) + #define BOARD_NAME "MBED GENERIC_RP2040" + #elif defined(ARDUINO_NANO_RP2040_CONNECT) + #define BOARD_NAME "MBED NANO_RP2040_CONNECT" + #else + // Use default BOARD_NAME if exists + #if !defined(BOARD_NAME) + #define BOARD_NAME "MBED Unknown RP2040" + #endif #endif - #define EspSerial Serial1 + #endif + #if defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #warning WIZNET_WIZFI360_EVB_PICO + #define EspSerial Serial2 + #else + #define EspSerial Serial1 + #endif + #else - // For Mega - #define EspSerial Serial3 - #define BOARD_TYPE "AVR Mega" + +// For Mega +#define EspSerial Serial3 +#define BOARD_TYPE "AVR Mega" #endif #ifndef BOARD_NAME diff --git a/examples/ConfigOnSwitch/ConfigOnSwitch.ino b/examples/ConfigOnSwitch/ConfigOnSwitch.ino index 2e7ebe2e..29b3bbfc 100644 --- a/examples/ConfigOnSwitch/ConfigOnSwitch.ino +++ b/examples/ConfigOnSwitch/ConfigOnSwitch.ino @@ -1,16 +1,16 @@ - /**************************************************************************************************************************** +/**************************************************************************************************************************** ConfigOnSwitch.ino WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - *****************************************************************************************************************************/ +*****************************************************************************************************************************/ /**************************************************************************************************************************** This example will open a configuration portal when no WiFi configuration has been previously entered or when a button is pushed. It is the easiest scenario for configuration but requires a pin and a button on the device. @@ -49,7 +49,7 @@ Flash button is convenient to use but if it is pressed it will stuff up the serial port device driver until the computer is rebooted on windows machines. */ -const int TRIGGER_PIN = 22; // Change the PIN to whatever you'd like +const int TRIGGER_PIN = 16; //22; // Change the PIN to whatever you'd like /* Alternative trigger pin. Needs to be connected to a button to use this pin. It must be a momentary connection not connected permanently to ground. Either trigger pin will work. @@ -84,6 +84,7 @@ void check_status() static unsigned long checkstatus_timeout = 0; #define HEARTBEAT_INTERVAL 10000L + // Print hearbeat every HEARTBEAT_INTERVAL (10) seconds. if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0)) { @@ -101,6 +102,8 @@ void enterConfigPortal() ESP_AT_wiFiManager.setMinimumSignalQuality(-1); + // 0 for random channel + //ESP_AT_wiFiManager.setAPChannel(0); ESP_AT_wiFiManager.setAPChannel(1); // Default AP IP is 192.168.4.1. Uncomment to use different AP IP @@ -117,14 +120,14 @@ void enterConfigPortal() Router_Pass = ESP_AT_wiFiManager.WiFi_Pass(); if ( !forcedConfig && (Router_SSID != "") && ESP_AT_wiFiManager.isWiFiConfigValid() ) - { + { if (ESP_AT_wiFiManager.connectWifi(Router_SSID, Router_Pass) == WL_CONNECTED) { Serial.println(F("Got stored Credentials. Try to connect first")); - + return; } - + ESP_AT_wiFiManager.setConfigPortalTimeout(60); //If no access point name has been previously entered disable timeout. Serial.println(F("Got stored Credentials but can't connect. Timeout 60s")); } @@ -132,7 +135,7 @@ void enterConfigPortal() Serial.println(F("Forced CP, No stored or not valid Credentials. No timeout")); forcedConfig = false; - + // SSID to uppercase ssid.toUpperCase(); @@ -148,7 +151,7 @@ void enterConfigPortal() digitalWrite(LOCAL_PIN_LED, LED_OFF); // Turn led off as we exit Config Portal - //ESP_AT_wiFiManager.resetBoard(); + ESP_AT_wiFiManager.resetBoard(); } void setup() @@ -158,10 +161,13 @@ void setup() pinMode(TRIGGER_PIN, INPUT_PULLUP); pinMode(TRIGGER_PIN2, INPUT_PULLUP); pinMode(LOCAL_PIN_LED, OUTPUT); - digitalWrite(LOCAL_PIN_LED, LED_ON); // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + + // turn the LED on by making the voltage LOW to tell us we are in configuration mode. + digitalWrite(LOCAL_PIN_LED, LED_ON); Serial.begin(115200); - while (!Serial); + + while (!Serial && millis() < 5000); unsigned long startedAt = millis(); @@ -172,7 +178,7 @@ void setup() #endif Serial.println(ESP_AT_WIFIMANAGER_VERSION); - + // initialize serial for ESP module EspSerial.begin(115200); @@ -183,6 +189,7 @@ void setup() if (WiFi.status() == WL_NO_SHIELD) { Serial.println(F("WiFi shield not present")); + // don't continue while (true); } @@ -200,6 +207,7 @@ void setup() while ( (WiFi.status() != WL_CONNECTED) && (millis() - startedAt < WIFI_CONNECT_TIMEOUT ) ) { int i = 0; + while ((!WiFi.status() || WiFi.status() >= WL_DISCONNECTED) && i++ < WHILE_LOOP_STEPS) { delay(WHILE_LOOP_DELAY); @@ -224,7 +232,7 @@ void loop() { Serial.println("\nConfig Portal requested."); forcedConfig = true; - + enterConfigPortal(); } diff --git a/examples/ConfigOnSwitch/defines.h b/examples/ConfigOnSwitch/defines.h index cf2569c2..7d4cffcd 100644 --- a/examples/ConfigOnSwitch/defines.h +++ b/examples/ConfigOnSwitch/defines.h @@ -1,15 +1,15 @@ /**************************************************************************************************************************** defines.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - + Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor - + Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager - Licensed under MIT license + Licensed under MIT license *****************************************************************************************************************************/ #ifndef defines_h @@ -19,29 +19,35 @@ // Debug Level from 0 to 4 #define _ESP_AT_LOGLEVEL_ 1 -#define DEBUG_WIFIMGR true //false +//#define DEBUG_WIFIMGR true + +#define USING_WIZFI360 true -// Uncomment to use ESP32-AT commands -//#define USE_ESP32_AT true +#if (USING_WIZFI360) || defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #define USE_ESP32_AT true +#else + // Uncomment to use ESP32-AT commands + //#define USE_ESP32_AT true +#endif #if ( defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) \ || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_SAMD_MKRFox1200) || defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) \ || defined(ARDUINO_SAMD_MKRGSM1400) || defined(ARDUINO_SAMD_MKRNB1500) || defined(ARDUINO_SAMD_MKRVIDOR4000) || defined(__SAMD21G18A__) \ || defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) || defined(__SAMD21E18A__) || defined(__SAMD51__) || defined(__SAMD51J20A__) || defined(__SAMD51J19A__) \ || defined(__SAMD51G19A__) || defined(__SAMD51P19A__) || defined(__SAMD21G18A__) ) - #if defined(ESP8266_AT_USE_SAMD) - #undef ESP8266_AT_USE_SAMD - #endif - #define ESP8266_AT_USE_SAMD true +#if defined(ESP8266_AT_USE_SAMD) + #undef ESP8266_AT_USE_SAMD +#endif +#define ESP8266_AT_USE_SAMD true #endif #if ( defined(NRF52840_FEATHER) || defined(NRF52832_FEATHER) || defined(NRF52_SERIES) || defined(ARDUINO_NRF52_ADAFRUIT) || \ defined(NRF52840_FEATHER_SENSE) || defined(NRF52840_ITSYBITSY) || defined(NRF52840_CIRCUITPLAY) || defined(NRF52840_CLUE) || \ defined(NRF52840_METRO) || defined(NRF52840_PCA10056) || defined(PARTICLE_XENON) || defined(NINA_B302_ublox) || defined(NINA_B112_ublox) ) - #if defined(ESP8266_AT_USE_NRF528XX) - #undef ESP8266_AT_USE_NRF528XX - #endif - #define ESP8266_AT_USE_NRF528XX true +#if defined(ESP8266_AT_USE_NRF528XX) + #undef ESP8266_AT_USE_NRF528XX +#endif +#define ESP8266_AT_USE_NRF528XX true #endif #if ( defined(ARDUINO_SAM_DUE) || defined(__SAM3X8E__) ) @@ -53,298 +59,304 @@ #if ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ - defined(STM32WB) || defined(STM32MP1) || defined(STM32L5)) - #if defined(ESP8266_AT_USE_STM32) - #undef ESP8266_AT_USE_STM32 - #endif - #define ESP8266_AT_USE_STM32 true + defined(STM32WB) || defined(STM32MP1) || defined(STM32L5) ) +#if defined(ESP8266_AT_USE_STM32) + #undef ESP8266_AT_USE_STM32 +#endif +#define ESP8266_AT_USE_STM32 true #endif #ifdef CORE_TEENSY +// For Teensy 4.1/4.0 +#define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 + +#if defined(__IMXRT1062__) // For Teensy 4.1/4.0 - #define EspSerial Serial2 //Serial2, Pin RX2 : 7, TX2 : 8 - - #if defined(__IMXRT1062__) - // For Teensy 4.1/4.0 - #define BOARD_TYPE "TEENSY 4.1/4.0" - #elif defined(__MK66FX1M0__) - #define BOARD_TYPE "Teensy 3.6" - #elif defined(__MK64FX512__) - #define BOARD_TYPE "Teensy 3.5" - #elif defined(__MKL26Z64__) - #define BOARD_TYPE "Teensy LC" - #elif defined(__MK20DX256__) - #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) - #elif defined(__MK20DX128__) - #define BOARD_TYPE "Teensy 3.0" - #elif defined(__AVR_AT90USB1286__) - #error Teensy 2.0++ not supported yet - #elif defined(__AVR_ATmega32U4__) - #error Teensy 2.0 not supported yet - #else - // For Other Boards - #define BOARD_TYPE "Unknown Teensy Board" - #endif + #define BOARD_TYPE "TEENSY 4.1/4.0" +#elif defined(__MK66FX1M0__) + #define BOARD_TYPE "Teensy 3.6" +#elif defined(__MK64FX512__) + #define BOARD_TYPE "Teensy 3.5" +#elif defined(__MKL26Z64__) + #define BOARD_TYPE "Teensy LC" +#elif defined(__MK20DX256__) + #define BOARD_TYPE "Teensy 3.2" // and Teensy 3.1 (obsolete) +#elif defined(__MK20DX128__) + #define BOARD_TYPE "Teensy 3.0" +#elif defined(__AVR_AT90USB1286__) + #error Teensy 2.0++ not supported yet +#elif defined(__AVR_ATmega32U4__) + #error Teensy 2.0 not supported yet +#else + // For Other Boards + #define BOARD_TYPE "Unknown Teensy Board" +#endif #elif defined(ESP8266_AT_USE_SAMD) - // For SAMD - #define EspSerial Serial1 - - #if defined(ARDUINO_SAMD_ZERO) - #define BOARD_TYPE "SAMD Zero" - #elif defined(ARDUINO_SAMD_MKR1000) - #define BOARD_TYPE "SAMD MKR1000" - #elif defined(ARDUINO_SAMD_MKRWIFI1010) - #define BOARD_TYPE "SAMD MKRWIFI1010" - #elif defined(ARDUINO_SAMD_NANO_33_IOT) - #define BOARD_TYPE "SAMD NANO_33_IOT" - #elif defined(ARDUINO_SAMD_MKRFox1200) - #define BOARD_TYPE "SAMD MKRFox1200" - #elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) - #define BOARD_TYPE "SAMD MKRWAN13X0" - #elif defined(ARDUINO_SAMD_MKRGSM1400) - #define BOARD_TYPE "SAMD MKRGSM1400" - #elif defined(ARDUINO_SAMD_MKRNB1500) - #define BOARD_TYPE "SAMD MKRNB1500" - #elif defined(ARDUINO_SAMD_MKRVIDOR4000) - #define BOARD_TYPE "SAMD MKRVIDOR4000" - #elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) - #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" - #elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" - #elif defined(ADAFRUIT_METRO_M0_EXPRESS) - #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" - #elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" - #elif defined(ADAFRUIT_GEMMA_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" - #elif defined(ADAFRUIT_TRINKET_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" - #elif defined(ADAFRUIT_ITSYBITSY_M0) - #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" - #elif defined(ARDUINO_SAMD_HALLOWING_M0) - #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" - #elif defined(ADAFRUIT_METRO_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" - #elif defined(ADAFRUIT_GRAND_CENTRAL_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" - #elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" - #elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" - #elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" - #elif defined(ADAFRUIT_PYPORTAL) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" - #elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" - #elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" - #elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) - #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" - #elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" - #elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" - #elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) - #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" - #elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" - #elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) - #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" - #elif defined(SEEED_WIO_TERMINAL) - #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" - #elif defined(SEEED_FEMTO_M0) - #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" - #elif defined(SEEED_XIAO_M0) - #define BOARD_TYPE "SAMD SEEED_XIAO_M0" - #elif defined(Wio_Lite_MG126) - #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" - #elif defined(WIO_GPS_BOARD) - #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" - #elif defined(SEEEDUINO_ZERO) - #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" - #elif defined(SEEEDUINO_LORAWAN) - #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" - #elif defined(SEEED_GROVE_UI_WIRELESS) - #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" - #elif defined(__SAMD21E18A__) - #define BOARD_TYPE "SAMD21E18A" - #elif defined(__SAMD21G18A__) - #define BOARD_TYPE "SAMD21G18A" - #elif defined(__SAMD51G19A__) - #define BOARD_TYPE "SAMD51G19A" - #elif defined(__SAMD51J19A__) - #define BOARD_TYPE "SAMD51J19A" - #elif defined(__SAMD51J20A__) - #define BOARD_TYPE "SAMD51J20A" - #elif defined(__SAM3X8E__) - #define BOARD_TYPE "SAM3X8E" - #elif defined(__CPU_ARC__) - #define BOARD_TYPE "CPU_ARC" - #elif defined(__SAMD51__) - #define BOARD_TYPE "SAMD51" - #else - #define BOARD_TYPE "SAMD Unknown" - #endif +// For SAMD +#define EspSerial Serial1 + +#if defined(ARDUINO_SAMD_ZERO) + #define BOARD_TYPE "SAMD Zero" +#elif defined(ARDUINO_SAMD_MKR1000) + #define BOARD_TYPE "SAMD MKR1000" +#elif defined(ARDUINO_SAMD_MKRWIFI1010) + #define BOARD_TYPE "SAMD MKRWIFI1010" +#elif defined(ARDUINO_SAMD_NANO_33_IOT) + #define BOARD_TYPE "SAMD NANO_33_IOT" +#elif defined(ARDUINO_SAMD_MKRFox1200) + #define BOARD_TYPE "SAMD MKRFox1200" +#elif ( defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) ) + #define BOARD_TYPE "SAMD MKRWAN13X0" +#elif defined(ARDUINO_SAMD_MKRGSM1400) + #define BOARD_TYPE "SAMD MKRGSM1400" +#elif defined(ARDUINO_SAMD_MKRNB1500) + #define BOARD_TYPE "SAMD MKRNB1500" +#elif defined(ARDUINO_SAMD_MKRVIDOR4000) + #define BOARD_TYPE "SAMD MKRVIDOR4000" +#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) + #define BOARD_TYPE "SAMD ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS" +#elif defined(ADAFRUIT_FEATHER_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_FEATHER_M0_EXPRESS" +#elif defined(ADAFRUIT_METRO_M0_EXPRESS) + #define BOARD_TYPE "SAMD21 ADAFRUIT_METRO_M0_EXPRESS" +#elif defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_CIRCUITPLAYGROUND_M0" +#elif defined(ADAFRUIT_GEMMA_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_GEMMA_M0" +#elif defined(ADAFRUIT_TRINKET_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_TRINKET_M0" +#elif defined(ADAFRUIT_ITSYBITSY_M0) + #define BOARD_TYPE "SAMD21 ADAFRUIT_ITSYBITSY_M0" +#elif defined(ARDUINO_SAMD_HALLOWING_M0) + #define BOARD_TYPE "SAMD21 ARDUINO_SAMD_HALLOWING_M0" +#elif defined(ADAFRUIT_METRO_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_EXPRESS" +#elif defined(ADAFRUIT_GRAND_CENTRAL_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_GRAND_CENTRAL_M4" +#elif defined(ADAFRUIT_FEATHER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_FEATHER_M4_EXPRESS" +#elif defined(ADAFRUIT_ITSYBITSY_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_ITSYBITSY_M4_EXPRESS" +#elif defined(ADAFRUIT_TRELLIS_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_TRELLIS_M4_EXPRESS" +#elif defined(ADAFRUIT_PYPORTAL) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL" +#elif defined(ADAFRUIT_PYPORTAL_M4_TITANO) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYPORTAL_M4_TITANO" +#elif defined(ADAFRUIT_PYBADGE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_M4_EXPRESS" +#elif defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) + #define BOARD_TYPE "SAMD51 ADAFRUIT_METRO_M4_AIRLIFT_LITE" +#elif defined(ADAFRUIT_PYGAMER_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_M4_EXPRESS" +#elif defined(ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYGAMER_ADVANCE_M4_EXPRESS" +#elif defined(ADAFRUIT_PYBADGE_AIRLIFT_M4) + #define BOARD_TYPE "SAMD51 ADAFRUIT_PYBADGE_AIRLIFT_M4" +#elif defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_MONSTER_M4SK_EXPRESS" +#elif defined(ADAFRUIT_HALLOWING_M4_EXPRESS) + #define BOARD_TYPE "SAMD51 ADAFRUIT_HALLOWING_M4_EXPRESS" +#elif defined(SEEED_WIO_TERMINAL) + #define BOARD_TYPE "SAMD SEEED_WIO_TERMINAL" +#elif defined(SEEED_FEMTO_M0) + #define BOARD_TYPE "SAMD SEEED_FEMTO_M0" +#elif defined(SEEED_XIAO_M0) + #define BOARD_TYPE "SAMD SEEED_XIAO_M0" +#elif defined(Wio_Lite_MG126) + #define BOARD_TYPE "SAMD SEEED Wio_Lite_MG126" +#elif defined(WIO_GPS_BOARD) + #define BOARD_TYPE "SAMD SEEED WIO_GPS_BOARD" +#elif defined(SEEEDUINO_ZERO) + #define BOARD_TYPE "SAMD SEEEDUINO_ZERO" +#elif defined(SEEEDUINO_LORAWAN) + #define BOARD_TYPE "SAMD SEEEDUINO_LORAWAN" +#elif defined(SEEED_GROVE_UI_WIRELESS) + #define BOARD_TYPE "SAMD SEEED_GROVE_UI_WIRELESS" +#elif defined(__SAMD21E18A__) + #define BOARD_TYPE "SAMD21E18A" +#elif defined(__SAMD21G18A__) + #define BOARD_TYPE "SAMD21G18A" +#elif defined(__SAMD51G19A__) + #define BOARD_TYPE "SAMD51G19A" +#elif defined(__SAMD51J19A__) + #define BOARD_TYPE "SAMD51J19A" +#elif defined(__SAMD51J20A__) + #define BOARD_TYPE "SAMD51J20A" +#elif defined(__SAM3X8E__) + #define BOARD_TYPE "SAM3X8E" +#elif defined(__CPU_ARC__) + #define BOARD_TYPE "CPU_ARC" +#elif defined(__SAMD51__) + #define BOARD_TYPE "SAMD51" +#else + #define BOARD_TYPE "SAMD Unknown" +#endif #elif (ESP8266_AT_USE_NRF528XX) - #if defined(NRF52840_FEATHER) - #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" - #elif defined(NRF52832_FEATHER) - #define BOARD_TYPE "NRF52832_FEATHER" - #elif defined(NRF52840_FEATHER_SENSE) - #define BOARD_TYPE "NRF52840_FEATHER_SENSE" - #elif defined(NRF52840_ITSYBITSY) - #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" - #elif defined(NRF52840_CIRCUITPLAY) - #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" - #elif defined(NRF52840_CLUE) - #define BOARD_TYPE "NRF52840_CLUE" - #elif defined(NRF52840_METRO) - #define BOARD_TYPE "NRF52840_METRO_EXPRESS" - #elif defined(NRF52840_PCA10056) - #define BOARD_TYPE "NORDIC_NRF52840DK" - #elif defined(NINA_B302_ublox) - #define BOARD_TYPE "NINA_B302_ublox" - #elif defined(NINA_B112_ublox) - #define BOARD_TYPE "NINA_B112_ublox" - #elif defined(PARTICLE_XENON) - #define BOARD_TYPE "PARTICLE_XENON" - #elif defined(MDBT50Q_RX) - #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" - #elif defined(ARDUINO_NRF52_ADAFRUIT) - #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" - #else - #define BOARD_TYPE "nRF52 Unknown" - #endif +#if defined(NRF52840_FEATHER) + #define BOARD_TYPE "NRF52840_FEATHER_EXPRESS" +#elif defined(NRF52832_FEATHER) + #define BOARD_TYPE "NRF52832_FEATHER" +#elif defined(NRF52840_FEATHER_SENSE) + #define BOARD_TYPE "NRF52840_FEATHER_SENSE" +#elif defined(NRF52840_ITSYBITSY) + #define BOARD_TYPE "NRF52840_ITSYBITSY_EXPRESS" +#elif defined(NRF52840_CIRCUITPLAY) + #define BOARD_TYPE "NRF52840_CIRCUIT_PLAYGROUND" +#elif defined(NRF52840_CLUE) + #define BOARD_TYPE "NRF52840_CLUE" +#elif defined(NRF52840_METRO) + #define BOARD_TYPE "NRF52840_METRO_EXPRESS" +#elif defined(NRF52840_PCA10056) + #define BOARD_TYPE "NORDIC_NRF52840DK" +#elif defined(NINA_B302_ublox) + #define BOARD_TYPE "NINA_B302_ublox" +#elif defined(NINA_B112_ublox) + #define BOARD_TYPE "NINA_B112_ublox" +#elif defined(PARTICLE_XENON) + #define BOARD_TYPE "PARTICLE_XENON" +#elif defined(MDBT50Q_RX) + #define BOARD_TYPE "RAYTAC_MDBT50Q_RX" +#elif defined(ARDUINO_NRF52_ADAFRUIT) + #define BOARD_TYPE "ARDUINO_NRF52_ADAFRUIT" +#else + #define BOARD_TYPE "nRF52 Unknown" +#endif #define EspSerial Serial1 #elif defined(ESP8266_AT_USE_SAM_DUE) - // For SAM DUE - #define EspSerial Serial1 - #define BOARD_TYPE "SAM DUE" +// For SAM DUE +#define EspSerial Serial1 +#define BOARD_TYPE "SAM DUE" #elif defined(ESP8266_AT_USE_STM32) - // For STM32 - #warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h - #define EspSerial SERIAL_PORT_HARDWARE //Serial1 - - #if defined(STM32F0) - #warning STM32F0 board selected - #define BOARD_TYPE "STM32F0" - #elif defined(STM32F1) - #warning STM32F1 board selected - #define BOARD_TYPE "STM32F1" - #elif defined(STM32F2) - #warning STM32F2 board selected - #define BOARD_TYPE "STM32F2" - #elif defined(STM32F3) - #warning STM32F3 board selected - #define BOARD_TYPE "STM32F3" - #elif defined(STM32F4) - #warning STM32F4 board selected - #define BOARD_TYPE "STM32F4" - #elif defined(STM32F7) - - #if defined(ARDUINO_NUCLEO_F767ZI) - #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_F767ZI" - // RX TX - HardwareSerial Serial1(D0, D1); - #else - - #warning STM32F7 board selected - #define BOARD_TYPE "STM32F7" +// For STM32 +#warning EspSerial using SERIAL_PORT_HARDWARE, can be Serial or Serial1. See your board variant.h +#define EspSerial SERIAL_PORT_HARDWARE //Serial1 + +#if defined(STM32F0) + #warning STM32F0 board selected + #define BOARD_TYPE "STM32F0" +#elif defined(STM32F1) + #warning STM32F1 board selected + #define BOARD_TYPE "STM32F1" +#elif defined(STM32F2) + #warning STM32F2 board selected + #define BOARD_TYPE "STM32F2" +#elif defined(STM32F3) + #warning STM32F3 board selected + #define BOARD_TYPE "STM32F3" +#elif defined(STM32F4) + #warning STM32F4 board selected + #define BOARD_TYPE "STM32F4" +#elif defined(STM32F7) + + #if defined(ARDUINO_NUCLEO_F767ZI) + #warning Nucleo-144 NUCLEO_F767ZI board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_F767ZI" + // RX TX + HardwareSerial Serial1(D0, D1); + #else - #endif - - #elif defined(STM32L0) - #if defined(ARDUINO_NUCLEO_L053R8) - #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX - #define BOARD_TYPE "NUCLEO_L053R8" - // RX TX - HardwareSerial Serial1(D0, D1); // (PA3, PA2); - #else - - #warning STM32L0 board selected - #define BOARD_TYPE "STM32L0" + #warning STM32F7 board selected + #define BOARD_TYPE "STM32F7" - #endif - - #elif defined(STM32L1) - #warning STM32L1 board selected - #define BOARD_TYPE "STM32L1" - #elif defined(STM32L4) - #warning STM32L4 board selected - #define BOARD_TYPE "STM32L4" - #elif defined(STM32L5) - #warning STM32L5 board selected - #define BOARD_TYPE "STM32L5" - #elif defined(STM32H7) - #warning STM32H7 board selected - #define BOARD_TYPE "STM32H7" - #elif defined(STM32G0) - #warning STM32G0 board selected - #define BOARD_TYPE "STM32G0" - #elif defined(STM32G4) - #warning STM32G4 board selected - #define BOARD_TYPE "STM32G4" - #elif defined(STM32WB) - #warning STM32WB board selected - #define BOARD_TYPE "STM32WB" - #elif defined(STM32MP1) - #warning STM32MP1 board selected - #define BOARD_TYPE "STM32MP1" + #endif + +#elif defined(STM32L0) + #if defined(ARDUINO_NUCLEO_L053R8) + #warning Nucleo-64 NUCLEO_L053R8 board selected, using HardwareSerial Serial1 @ pin D0/RX and D1/TX + #define BOARD_TYPE "NUCLEO_L053R8" + // RX TX + HardwareSerial Serial1(D0, D1); // (PA3, PA2); #else - #warning STM32 unknown board selected - #define BOARD_TYPE "STM32 Unknown" + + #warning STM32L0 board selected + #define BOARD_TYPE "STM32L0" + #endif +#elif defined(STM32L1) + #warning STM32L1 board selected + #define BOARD_TYPE "STM32L1" +#elif defined(STM32L4) + #warning STM32L4 board selected + #define BOARD_TYPE "STM32L4" +#elif defined(STM32L5) + #warning STM32L5 board selected + #define BOARD_TYPE "STM32L5" +#elif defined(STM32H7) + #warning STM32H7 board selected + #define BOARD_TYPE "STM32H7" +#elif defined(STM32G0) + #warning STM32G0 board selected + #define BOARD_TYPE "STM32G0" +#elif defined(STM32G4) + #warning STM32G4 board selected + #define BOARD_TYPE "STM32G4" +#elif defined(STM32WB) + #warning STM32WB board selected + #define BOARD_TYPE "STM32WB" +#elif defined(STM32MP1) + #warning STM32MP1 board selected + #define BOARD_TYPE "STM32MP1" +#else + #warning STM32 unknown board selected + #define BOARD_TYPE "STM32 Unknown" +#endif + #elif ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - - #warning RASPBERRY_PI_PICO board selected - #if defined(ARDUINO_ARCH_MBED) +#warning RASPBERRY_PI_PICO board selected + +#if defined(ARDUINO_ARCH_MBED) - #warning Using ARDUINO_ARCH_MBED - #define ESP8266_AT_USE_MBED_RP2040 true +#warning Using ARDUINO_ARCH_MBED +#define ESP8266_AT_USE_MBED_RP2040 true - // Use true only for testing. Will erase stored config data - #define FORCE_REFORMAT false - - #if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ +// Use true only for testing. Will erase stored config data +#define FORCE_REFORMAT false + +#if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || \ defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) ) - // Only undef known BOARD_NAME to use better one - #undef BOARD_NAME - #endif - - #if defined(ARDUINO_RASPBERRY_PI_PICO) - #define BOARD_NAME "MBED RASPBERRY_PI_PICO" - #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) - #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" - #elif defined(ARDUINO_GENERIC_RP2040) - #define BOARD_NAME "MBED GENERIC_RP2040" - #elif defined(ARDUINO_NANO_RP2040_CONNECT) - #define BOARD_NAME "MBED NANO_RP2040_CONNECT" - #else - // Use default BOARD_NAME if exists - #if !defined(BOARD_NAME) - #define BOARD_NAME "MBED Unknown RP2040" - #endif - #endif + // Only undef known BOARD_NAME to use better one + #undef BOARD_NAME + #endif + #if defined(ARDUINO_RASPBERRY_PI_PICO) + #define BOARD_NAME "MBED RASPBERRY_PI_PICO" + #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) + #define BOARD_NAME "MBED ADAFRUIT_FEATHER_RP2040" + #elif defined(ARDUINO_GENERIC_RP2040) + #define BOARD_NAME "MBED GENERIC_RP2040" + #elif defined(ARDUINO_NANO_RP2040_CONNECT) + #define BOARD_NAME "MBED NANO_RP2040_CONNECT" + #else + // Use default BOARD_NAME if exists + #if !defined(BOARD_NAME) + #define BOARD_NAME "MBED Unknown RP2040" + #endif #endif - #define EspSerial Serial1 + #endif + #if defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO) + #warning WIZNET_WIZFI360_EVB_PICO + #define EspSerial Serial2 + #else + #define EspSerial Serial1 + #endif + #else - // For Mega - #define EspSerial Serial3 - #define BOARD_TYPE "AVR Mega" + +// For Mega +#define EspSerial Serial3 +#define BOARD_TYPE "AVR Mega" #endif #ifndef BOARD_NAME diff --git a/library.json b/library.json index ab6595f8..079b022c 100644 --- a/library.json +++ b/library.json @@ -1,8 +1,8 @@ { "name": "ESP_AT_WiFiManager", "version": "1.3.1", - "keywords": "wifi, wifi-manager, ESP8266-AT, ESP32-AT, AT-command, wifi-shield, nRF52, SAM DUE, SAMD21, SAMD51, STM32, rpi-pico, rp2040, nano-rp2040-connect, Credentials, LittleFS, EEPROM, FlashStorage-SAMD, FlashStorage-STM32, DueFlashStorage", - "description": "WiFi/Credentials Manager for nRF52, SAM DUE, SAMD21, SAMD51, STM32F/L/H/G/WB/MP1, RP2040-based RASPBERRY_PI_PICO, etc. boards using ESP8266/ESP32-AT-command shields with fallback web configuration portal. Credentials are saved in EEPROM, FlashStorage_SAMD, FlashStorage_STM32, DueFlashStorage or nRF52/RP2040 LittleFS.", + "keywords": "wifi, wifi-manager, ESP8266-AT, ESP32-AT, WizFi360, AT-command, wifi-shield, nRF52, SAM DUE, SAMD21, SAMD51, STM32, rpi-pico, rp2040, nano-rp2040-connect, Credentials, LittleFS, EEPROM, FlashStorage-SAMD, FlashStorage-STM32, DueFlashStorage", + "description": "WiFi/Credentials Manager for nRF52, SAM DUE, SAMD21, SAMD51, STM32F/L/H/G/WB/MP1, RP2040-based RASPBERRY_PI_PICO, etc. boards using WizFi360/ESP8266/ESP32-AT-command shields with fallback web configuration portal. Credentials are saved in EEPROM, FlashStorage_SAMD, FlashStorage_STM32, DueFlashStorage or nRF52/RP2040 LittleFS.", "authors": { "name": "Khoi Hoang", @@ -27,14 +27,14 @@ { "owner": "khoih-prog", "name": "FlashStorage_STM32", - "version": ">=1.1.0", - "platforms": ["*"] + "version": ">=1.2.0", + "platforms": ["ststm32"] }, { "owner": "khoih-prog", "name": "FlashStorage_SAMD", - "version": "^1.2.0", - "platforms": ["*"] + "version": "^1.3.2", + "platforms": ["atmelsam"] }, { "owner": "sebnil", @@ -45,7 +45,7 @@ { "owner": "khoih-prog", "name": "ESP8266_AT_WebServer", - "version": "^1.4.0", + "version": "^1.7.1", "platforms": ["*"] } ], diff --git a/library.properties b/library.properties index 988d9688..e6652670 100644 --- a/library.properties +++ b/library.properties @@ -1,11 +1,12 @@ name=ESP_AT_WiFiManager -version=1.3.1 +version=1.4.0 author=Khoi Hoang maintainer=Khoi Hoang license=MIT -sentence=WiFi/Credentials Manager for nRF52, SAM DUE, SAMD21, SAMD51, STM32F/L/H/G/WB/MP1, RP2040-based Nano_RP2040_Connect, RASPBERRY_PI_PICO, etc. boards using ESP8266/ESP32-AT-command shields with fallback web configuration portal. Credentials are saved in EEPROM, SAMD FlashStorage, DueFlashStorage or nRF52/RP2040 LittleFS. -paragraph=Library to configure WiFi/Credentials at runtime for nRF52, SAM DUE, SAMD21, SAMD51, STM32F/L/H/G/WB/MP1, RP2040-based Nano_RP2040_Connect, RASPBERRY_PI_PICO, etc. boards using ESP8266/ESP32-AT-command shields. You can also specify static AP and STA IP. +sentence=WiFi/Credentials Manager for nRF52, SAM DUE, SAMD21, SAMD51, STM32F/L/H/G/WB/MP1, RP2040-based Nano_RP2040_Connect, RASPBERRY_PI_PICO, etc. boards using WizFi360/ESP8266/ESP32-AT-command shields with fallback web configuration portal. Credentials are saved in EEPROM, SAMD FlashStorage, DueFlashStorage or nRF52/RP2040 LittleFS. +paragraph=Library to configure WiFi/Credentials at runtime for nRF52, SAM DUE, SAMD21, SAMD51, STM32F/L/H/G/WB/MP1, RP2040-based Nano_RP2040_Connect, RASPBERRY_PI_PICO, etc. boards using WizFi360/ESP8266/ESP32-AT-command shields. You can also specify static AP and STA IP. category=Communication url=https://github.com/khoih-prog/ESP_AT_WiFiManager architectures=* depends=ESP8266_AT_WebServer, FlashStorage_STM32, FlashStorage_SAMD, DueFlashStorage +includes=ESP_AT_WiFiManager.h diff --git a/platformio/platformio.ini b/platformio/platformio.ini index 068b2c4f..612c11c3 100644 --- a/platformio/platformio.ini +++ b/platformio/platformio.ini @@ -8,6 +8,8 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html +; ============================================================ +; ============================================================ [platformio] ; ============================================================ ; chose environment: @@ -22,7 +24,12 @@ default_envs = SAMD ;default_envs = NRF52 ;default_envs = STM32 +;default_envs = pico +;default_envs = portenta_h7_m7 +;default_envs = portenta_h7_m4 +; ============================================================ +; ============================================================ [env] ; ============================================================ ; Serial configuration @@ -33,20 +40,21 @@ upload_speed = 921600 ;monitor_speed = 9600 ;monitor_port = COM11 +; ============================================================ ; Checks for the compatibility with frameworks and dev/platforms -; You have to experiment to see which combination is working for you lib_compat_mode = strict lib_ldf_mode = chain+ ;lib_ldf_mode = deep+ +; ============================================================ lib_deps = ; PlatformIO 4.x -; ESP8266_AT_WebServer@~1.6.0 +; ESP8266_AT_WebServer@~1.7.1 ; FlashStorage_STM32@~1.2.0 ; FlashStorage_SAMD@~1.3.2 ; DueFlashStorage@~1.0.0 ; PlatformIO 5.x - khoih-prog/ESP8266_AT_WebServer@~1.6.0 + khoih-prog/ESP8266_AT_WebServer@~1.7.1 khoih-prog/FlashStorage_STM32@~1.2.0 khoih-prog/FlashStorage_SAMD@~1.3.2 sebnil/DueFlashStorage@~1.0.0 @@ -57,6 +65,8 @@ build_flags = ; comment the following line to enable WiFi debugging ; -D NDEBUG +; ============================================================ +; ============================================================ [env:ESP8266] platform = espressif8266 framework = arduino @@ -102,6 +112,8 @@ board = nodemcuv2 ;board = xinabox_cw01 ;board = esp32doit-devkit-v1 +; ============================================================ +; ============================================================ [env:ESP32] platform = espressif32 framework = arduino, espidf @@ -143,6 +155,8 @@ board = esp32doit-devkit-v1 ;board = iotbusproteus ;board = nina_w10 +; ============================================================ +; ============================================================ [env:SAMD] platform = atmelsam framework = arduino @@ -216,7 +230,8 @@ board = adafruit_itsybitsy_m4 ;board = rolawan ;board = seeed_grove_ui_wireless - +; ============================================================ +; ============================================================ [env:NRF52] platform = nordicnrf52 framework = arduino @@ -237,6 +252,8 @@ board = feather52840 ;board = ninab302 ;board = ninab112 +; ============================================================ +; ============================================================ [env:STM32] platform = ststm32 framework = arduino @@ -344,6 +361,33 @@ framework = arduino ;board = coreboard_f401rc ;board = feather_f405 + +; ============================================================ +; ============================================================ +[env:portenta_h7_m7] +platform = ststm32 +board = portenta_h7_m7 +framework = arduino + +; ============================================================ +; ============================================================ +[env:portenta_h7_m4] +platform = ststm32 +board = portenta_h7_m4 +framework = arduino + +; ============================================================ +; ============================================================ +[env:pico] +; ============================================================ +; Just a sample +; You have to research and fix if there is issue +; ============================================================ +platform = raspberrypi +board = pico +framework = arduino +upload_protocol = picotool + ; ============================================================ ; Board configuration Many more Boards to be filled ; ============================================================ diff --git a/src/ESP_AT_WiFiManager-impl.h b/src/ESP_AT_WiFiManager-impl.h index 7cbefcb9..42c7fd63 100644 --- a/src/ESP_AT_WiFiManager-impl.h +++ b/src/ESP_AT_WiFiManager-impl.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager-impl.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,7 +22,8 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core *********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_impl_h @@ -54,24 +51,21 @@ ESP_AT_WMParameter::ESP_AT_WMParameter(const char *id, const char *placeholder, ////////////////////////////////////////////// -ESP_AT_WMParameter::ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length, - const char *custom) +ESP_AT_WMParameter::ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom) { init(id, placeholder, defaultValue, length, custom, WFM_LABEL_BEFORE); } ////////////////////////////////////////////// -ESP_AT_WMParameter::ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length, - const char *custom, int labelPlacement) +ESP_AT_WMParameter::ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom, int labelPlacement) { init(id, placeholder, defaultValue, length, custom, labelPlacement); } ////////////////////////////////////////////// -void ESP_AT_WMParameter::init(const char *id, const char *placeholder, const char *defaultValue, int length, - const char *custom, int labelPlacement) +void ESP_AT_WMParameter::init(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom, int labelPlacement) { _id = id; _placeholder = placeholder; @@ -89,7 +83,6 @@ void ESP_AT_WMParameter::init(const char *id, const char *placeholder, const cha strncpy(_value, defaultValue, _length); } } - _customHTML = custom; } @@ -148,10 +141,10 @@ const char* ESP_AT_WMParameter::getCustomHTML() ////////////////////////////////////////////// /** - [getParameters description] - @access public -*/ -ESP_AT_WMParameter** ESP_AT_WiFiManager::getParameters() + * [getParameters description] + * @access public + */ +ESP_AT_WMParameter** ESP_AT_WiFiManager::getParameters() { return _params; } @@ -159,10 +152,10 @@ ESP_AT_WMParameter** ESP_AT_WiFiManager::getParameters() ////////////////////////////////////////////// /** - [getParametersCount description] - @access public -*/ -int ESP_AT_WiFiManager::getParametersCount() + * [getParametersCount description] + * @access public + */ +int ESP_AT_WiFiManager::getParametersCount() { return _paramsCount; } @@ -217,7 +210,7 @@ bool ESP_AT_WiFiManager::addParameter(ESP_AT_WMParameter *p) _params[_paramsCount] = p; _paramsCount++; DEBUG_WM2(F("Adding param "), p->getID()); - + return true; } @@ -226,15 +219,13 @@ bool ESP_AT_WiFiManager::addParameter(ESP_AT_WMParameter *p) void ESP_AT_WiFiManager::setupConfigPortal() { stopConfigPortal = false; //Signal not to close config portal - -#if !USE_STATIC_WEBSERVER - + + #if !USE_STATIC_WEBSERVER if (!server) { server = new ESP8266_AT_WebServer; } - -#endif + #endif _configPortalStart = millis(); @@ -250,7 +241,7 @@ void ESP_AT_WiFiManager::setupConfigPortal() } else { - DEBUG_WM2(F("AP PW: "), _apPassword); + DEBUG_WM2(F("AP PW: "),_apPassword); } } @@ -260,9 +251,9 @@ void ESP_AT_WiFiManager::setupConfigPortal() DEBUG_WM2(F("Custom AP IP: "), _ap_static_ip); WiFi.configAP(_ap_static_ip); } - + if (_apPassword != NULL) - { + { // Use AP_STA to scan WiFi WiFi.beginAP(_apName, _apChannel, _apPassword, ENC_TYPE_WPA2_PSK, false); } @@ -275,65 +266,29 @@ void ESP_AT_WiFiManager::setupConfigPortal() DEBUG_WM2(F("AP IP: "), WiFi.localIP()); /* Setup web pages: root, wifi config pages, SO captive portal detectors and not found. */ -#if USE_STATIC_WEBSERVER - - server.on("/", [this]() - { - handleRoot(); - }); - server.on("/wifi", [this]() - { - handleWifi(); - }); - server.on("/wifisave", [this]() - { - handleWifiSave(); - }); - server.on("/close", [this]() - { - handleServerClose(); - }); - server.on("/i", [this]() - { - handleInfo(); - }); - server.onNotFound( [this]() - { - handleNotFound(); - }); - - server.begin(); // Web server start - -#else - - server->on("/", [this]() - { - handleRoot(); - }); - server->on("/wifi", [this]() - { - handleWifi(); - }); - server->on("/wifisave", [this]() - { - handleWifiSave(); - }); - server->on("/close", [this]() - { - handleServerClose(); - }); - server->on("/i", [this]() - { - handleInfo(); - }); - server->onNotFound( [this]() - { - handleNotFound(); - }); - - server->begin(); // Web server start -#endif - + #if USE_STATIC_WEBSERVER + + server.on("/", [this](){ handleRoot(); }); + server.on("/wifi", [this](){ handleWifi(); }); + server.on("/wifisave", [this](){ handleWifiSave(); }); + server.on("/close", [this](){ handleServerClose(); }); + server.on("/i", [this](){ handleInfo(); }); + server.onNotFound( [this](){ handleNotFound(); }); + + server.begin(); // Web server start + + #else + + server->on("/", [this](){ handleRoot(); }); + server->on("/wifi", [this](){ handleWifi(); }); + server->on("/wifisave", [this](){ handleWifiSave(); }); + server->on("/close", [this](){ handleServerClose(); }); + server->on("/i", [this](){ handleInfo(); }); + server->onNotFound( [this](){ handleNotFound(); }); + + server->begin(); // Web server start + #endif + DEBUG_WM2(F("HTTP server on channel "), _apChannel); } @@ -350,10 +305,10 @@ bool ESP_AT_WiFiManager::autoConnect() ////////////////////////////////////////////// /* This is not very useful as there has been an assumption that device has to be - told to connect but Wifi already does it's best to connect in background. Calling this - method will block until WiFi connects. Sketch can avoid - blocking call then use (WiFi.status()==WL_CONNECTED) test to see if connected yet. - See some discussion at https://github.com/tzapu/WiFiManager/issues/68 +told to connect but Wifi already does it's best to connect in background. Calling this +method will block until WiFi connects. Sketch can avoid +blocking call then use (WiFi.status()==WL_CONNECTED) test to see if connected yet. +See some discussion at https://github.com/tzapu/WiFiManager/issues/68 */ bool ESP_AT_WiFiManager::autoConnect(char const *apName, char const *apPassword) { @@ -384,7 +339,7 @@ bool ESP_AT_WiFiManager::startConfigPortal() String ssid = "ESP_AT_ABCDEF"; ssid.toUpperCase(); - + return startConfigPortal(ssid.c_str(), NULL); } @@ -403,19 +358,21 @@ bool ESP_AT_WiFiManager::startConfigPortal(char const *apName, char const *apPa } connect = false; - + + WiFi.reset(); + setupConfigPortal(); bool TimedOut = true; - + while (_configPortalTimeout == 0 || millis() < _configPortalStart + _configPortalTimeout) - { -#if USE_STATIC_WEBSERVER + { + #if USE_STATIC_WEBSERVER server.handleClient(); -#else + #else server->handleClient(); -#endif - + #endif + if (connect) { TimedOut = false; @@ -436,7 +393,7 @@ bool ESP_AT_WiFiManager::startConfigPortal(char const *apName, char const *apPa //todo: check if any custom parameters actually exist, and check if they really changed maybe _savecallback(); } - + break; } @@ -449,43 +406,43 @@ bool ESP_AT_WiFiManager::startConfigPortal(char const *apName, char const *apPa //todo: check if any custom parameters actually exist, and check if they really changed maybe _savecallback(); } - + break; } } if (stopConfigPortal) { - DEBUG_WM(F("Stop ConfigPortal")); //KH + DEBUG_WM(F("Stop ConfigPortal")); //KH stopConfigPortal = false; break; } - + yield(); } if (TimedOut) { WiFi.reset(); - + // check if we've got static_ip settings, if we do, use those. if (_sta_static_ip) { WiFi.config(_sta_static_ip); DEBUG_WM2(F("Static IP : "), _sta_static_ip); } - + WiFi.begin(WiFi_SSID().c_str(), WiFi_Pass().c_str()); - + DEBUG_WM2(F("Timeout, connect result: "), getStatus(waitForConnectResult())); } - -#if USE_STATIC_WEBSERVER - server.stop(); -#else - server->stop(); -#endif - + + #if USE_STATIC_WEBSERVER + server.stop(); + #else + server->stop(); + #endif + return WiFi.status() == WL_CONNECTED; } @@ -508,14 +465,14 @@ int ESP_AT_WiFiManager::connectWifi(String ssid, String pass) //TO DO, STA mode only WiFi.reset(); - + // check if we've got static_ip settings, if we do, use those. if (_sta_static_ip) { WiFi.config(_sta_static_ip); DEBUG_WM2(F("Static IP : "), _sta_static_ip); } - + WiFi.begin(ssid.c_str(), pass.c_str()); // Start Wifi with new values. } else if (WiFi_SSID() == "") @@ -547,7 +504,7 @@ uint8_t ESP_AT_WiFiManager::waitForConnectResult() while (keepConnecting) { status = WiFi.status(); - + if (millis() > start + _connectTimeout) { keepConnecting = false; @@ -558,10 +515,10 @@ uint8_t ESP_AT_WiFiManager::waitForConnectResult() { keepConnecting = false; } - + delay(100); } - + return status; } } @@ -574,20 +531,16 @@ const char* ESP_AT_WiFiManager::getStatus(int status) { switch (status) { - case WL_IDLE_STATUS: - return "WL_IDLE_STATUS"; - - case WL_CONNECTED: - return "WL_CONNECTED"; - - case WL_CONNECT_FAILED: - return "WL_CONNECT_FAILED"; - - case WL_DISCONNECTED: - return "WL_DISCONNECTED"; - - default: - return "UNKNOWN"; + case WL_IDLE_STATUS: + return "WL_IDLE_STATUS"; + case WL_CONNECTED: + return "WL_CONNECTED"; + case WL_CONNECT_FAILED: + return "WL_CONNECT_FAILED"; + case WL_DISCONNECTED: + return "WL_DISCONNECTED"; + default: + return "UNKNOWN"; } } @@ -610,9 +563,9 @@ String ESP_AT_WiFiManager::getConfigPortalPW() void ESP_AT_WiFiManager::resetSettings() { DEBUG_WM(F("Data cleared")); - + WiFi.disconnect(); - + delay(200); return; } @@ -709,18 +662,18 @@ void ESP_AT_WiFiManager::handleRoot() DEBUG_WM(F("Handle root")); // Disable _configPortalTimeout when someone accessing Portal to give some time to config - _configPortalTimeout = 0; //KH - -#if USE_STATIC_WEBSERVER - server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#else - server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#endif - + _configPortalTimeout = 0; //KH + + #if USE_STATIC_WEBSERVER + server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #else + server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #endif + String page = (HTTP_HEAD_START); page.replace("{v}", "Options"); page += (HTTP_SCRIPT); @@ -748,17 +701,17 @@ void ESP_AT_WiFiManager::handleRoot() page += F(""); page += (HTTP_PORTAL_OPTIONS); page += F("
"); - + reportStatus(page); page += F("
"); page += (HTTP_END); - -#if USE_STATIC_WEBSERVER - server.send(200, HTTP_HEAD_CT, page); -#else - server->send(200, HTTP_HEAD_CT, page); -#endif + + #if USE_STATIC_WEBSERVER + server.send(200, HTTP_HEAD_CT, page); + #else + server->send(200, HTTP_HEAD_CT, page); + #endif } @@ -770,19 +723,19 @@ void ESP_AT_WiFiManager::handleWifi() DEBUG_WM(F("Handle WiFi")); // Disable _configPortalTimeout when someone accessing Portal to give some time to config - _configPortalTimeout = 0; //KH - -#if USE_STATIC_WEBSERVER - server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#else - server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#endif - - + _configPortalTimeout = 0; //KH + + #if USE_STATIC_WEBSERVER + server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #else + server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #endif + + String page = (HTTP_HEAD_START); page.replace("{v}", "Config ESP"); page += (HTTP_SCRIPT); @@ -803,7 +756,7 @@ void ESP_AT_WiFiManager::handleWifi() //display networks in page //Limit numberOfNetworks to 3 to reduce size numberOfNetworks = 3; - + for (int i = 0; i < numberOfNetworks; i++) { if (networkIndices[i] == -1) @@ -847,23 +800,20 @@ void ESP_AT_WiFiManager::handleWifi() } String pitem; - switch (_params[i]->getLabelPlacement()) { - case WFM_LABEL_BEFORE: - pitem = (HTTP_FORM_LABEL); - pitem += (HTTP_FORM_PARAM); - break; - - case WFM_LABEL_AFTER: - pitem = (HTTP_FORM_PARAM); - pitem += (HTTP_FORM_LABEL); - break; - - default: - // WFM_NO_LABEL - pitem = (HTTP_FORM_PARAM); - break; + case WFM_LABEL_BEFORE: + pitem = (HTTP_FORM_LABEL); + pitem += (HTTP_FORM_PARAM); + break; + case WFM_LABEL_AFTER: + pitem = (HTTP_FORM_PARAM); + pitem += (HTTP_FORM_LABEL); + break; + default: + // WFM_NO_LABEL + pitem = (HTTP_FORM_PARAM); + break; } if (_params[i]->getID() != NULL) @@ -893,11 +843,11 @@ void ESP_AT_WiFiManager::handleWifi() page += (HTTP_END); -#if USE_STATIC_WEBSERVER + #if USE_STATIC_WEBSERVER server.send(200, HTTP_HEAD_CT, page); -#else + #else server->send(200, HTTP_HEAD_CT, page); -#endif + #endif DEBUG_WM(F("Sent config page")); } @@ -910,33 +860,30 @@ void ESP_AT_WiFiManager::handleWifiSave() DEBUG_WM(F("WiFi save")); //SAVE/connect here - -#if USE_STATIC_WEBSERVER - + + #if USE_STATIC_WEBSERVER if (strlen(server.arg("s").c_str()) < sizeof(ESP_AT_WM_Config.wifi_ssid) - 1) strcpy(ESP_AT_WM_Config.wifi_ssid, server.arg("s").c_str()); else strncpy(ESP_AT_WM_Config.wifi_ssid, server.arg("s").c_str(), sizeof(ESP_AT_WM_Config.wifi_ssid) - 1); - + if (strlen(server.arg("p").c_str()) < sizeof(ESP_AT_WM_Config.wifi_pw) - 1) strcpy(ESP_AT_WM_Config.wifi_pw, server.arg("p").c_str()); else strncpy(ESP_AT_WM_Config.wifi_pw, server.arg("p").c_str(), sizeof(ESP_AT_WM_Config.wifi_pw) - 1); - -#else - + #else + if (strlen(server->arg("s").c_str()) < sizeof(ESP_AT_WM_Config.wifi_ssid) - 1) strcpy(ESP_AT_WM_Config.wifi_ssid, server->arg("s").c_str()); else strncpy(ESP_AT_WM_Config.wifi_ssid, server->arg("s").c_str(), sizeof(ESP_AT_WM_Config.wifi_ssid) - 1); - + if (strlen(server->arg("p").c_str()) < sizeof(ESP_AT_WM_Config.wifi_pw) - 1) strcpy(ESP_AT_WM_Config.wifi_pw, server->arg("p").c_str()); else strncpy(ESP_AT_WM_Config.wifi_pw, server->arg("p").c_str(), sizeof(ESP_AT_WM_Config.wifi_pw) - 1); - -#endif - + #endif + //parameters for (int i = 0; i < _paramsCount; i++) { @@ -946,34 +893,33 @@ void ESP_AT_WiFiManager::handleWifiSave() } //read parameter -#if USE_STATIC_WEBSERVER + #if USE_STATIC_WEBSERVER String value = server.arg(_params[i]->getID()).c_str(); -#else + #else String value = server->arg(_params[i]->getID()).c_str(); -#endif - + #endif + //store it in array value.toCharArray(_params[i]->_value, _params[i]->_length); DEBUG_WM4(F("Param:"), _params[i]->getID(), F(" / Value:"), value); } -#if USE_STATIC_WEBSERVER - + #if USE_STATIC_WEBSERVER if (server.arg("ip") != "") -#else + #else if (server->arg("ip") != "") -#endif + #endif { DEBUG_WM(F("static ip")); - -#if USE_STATIC_WEBSERVER - DEBUG_WM(server.arg("ip")); - String ip = server.arg("ip"); -#else - DEBUG_WM(server->arg("ip")); - String ip = server->arg("ip"); -#endif - + + #if USE_STATIC_WEBSERVER + DEBUG_WM(server.arg("ip")); + String ip = server.arg("ip"); + #else + DEBUG_WM(server->arg("ip")); + String ip = server->arg("ip"); + #endif + optionalIPFromString(&_sta_static_ip, ip.c_str()); } @@ -987,21 +933,21 @@ void ESP_AT_WiFiManager::handleWifiSave() page.replace("{v}", _apName); page.replace("{x}", ESP_AT_WM_Config.wifi_ssid); page += (HTTP_END); - + // Save to EEPROM saveConfigData(); -#if USE_STATIC_WEBSERVER - server.send(200, HTTP_HEAD_CT, page); -#else - server->send(200, HTTP_HEAD_CT, page); -#endif + #if USE_STATIC_WEBSERVER + server.send(200, HTTP_HEAD_CT, page); + #else + server->send(200, HTTP_HEAD_CT, page); + #endif DEBUG_WM(F("Sent wifisave page")); connect = true; //signal ready to connect/reset - // Restore when Press Save WiFi + // Restore when Press Save WiFi _configPortalTimeout = DEFAULT_PORTAL_TIMEOUT; } @@ -1011,17 +957,17 @@ void ESP_AT_WiFiManager::handleWifiSave() void ESP_AT_WiFiManager::handleServerClose() { DEBUG_WM1(F("Server Close")); - -#if USE_STATIC_WEBSERVER - server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#else - server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#endif - + + #if USE_STATIC_WEBSERVER + server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #else + server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #endif + String page = (HTTP_HEAD_START); page.replace("{v}", "Close Server"); page += (HTTP_SCRIPT); @@ -1032,9 +978,9 @@ void ESP_AT_WiFiManager::handleServerClose() page += F("SSID "); page += WiFi_SSID(); page += F("
"); - + page += F("IP: "); - + if (_sta_static_ip) { page += IPAddressToString(_sta_static_ip); @@ -1043,18 +989,18 @@ void ESP_AT_WiFiManager::handleServerClose() { page += F("DHCP"); } - + page += F("

"); page += F("Config Portal closed.

"); page += (HTTP_END); - -#if USE_STATIC_WEBSERVER + + #if USE_STATIC_WEBSERVER server.send(200, HTTP_HEAD_CT, page); -#else + #else server->send(200, HTTP_HEAD_CT, page); -#endif - - //stopConfigPortal = true; //signal ready to shutdown config portal //KH crash if use this ??? + #endif + + //stopConfigPortal = true; //signal ready to shutdown config portal //KH crash if use this ??? DEBUG_WM1(F("Sent server close page")); // Restore when Press Save WiFi @@ -1069,18 +1015,18 @@ void ESP_AT_WiFiManager::handleInfo() DEBUG_WM(F("Info")); // Disable _configPortalTimeout when someone accessing Portal to give some time to config - _configPortalTimeout = 0; //KH - -#if USE_STATIC_WEBSERVER - server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#else - server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); -#endif - + _configPortalTimeout = 0; //KH + + #if USE_STATIC_WEBSERVER + server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #else + server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + #endif + String page = (HTTP_HEAD_START); page.replace("{v}", "Info"); page += (HTTP_SCRIPT); @@ -1097,15 +1043,15 @@ void ESP_AT_WiFiManager::handleInfo() char _macAddress[WL_MAC_ADDR_LENGTH + 1]; WiFi.macAddress((uint8_t *) _macAddress); _macAddress[WL_MAC_ADDR_LENGTH] = 0; - - String _macAdd = String(_macAddress[0], HEX) + ":" + String(_macAddress[1], HEX) + ":" - + String(_macAddress[2], HEX) + ":" + String(_macAddress[3], HEX) + ":" - + String(_macAddress[3], HEX) + ":" + String(_macAddress[5], HEX); - + + String _macAdd = String(_macAddress[0], HEX) + ":" + String(_macAddress[1], HEX) + ":" + + String(_macAddress[2], HEX) + ":" + String(_macAddress[3], HEX) + ":" + + String(_macAddress[3], HEX) + ":" + String(_macAddress[5], HEX); + _macAdd.toUpperCase(); - + page += String( _macAdd ); - + page += F("AP IP"); page += IPAddressToString(WiFi.localIP()); page += F(""); @@ -1125,11 +1071,11 @@ void ESP_AT_WiFiManager::handleInfo() page += F("

ESP_AT_WiFiManager"); page += (HTTP_END); -#if USE_STATIC_WEBSERVER - server.send(200, HTTP_HEAD_CT, page); -#else - server->send(200, HTTP_HEAD_CT, page); -#endif + #if USE_STATIC_WEBSERVER + server.send(200, HTTP_HEAD_CT, page); + #else + server->send(200, HTTP_HEAD_CT, page); + #endif DEBUG_WM(F("Sent info page")); } @@ -1139,44 +1085,44 @@ void ESP_AT_WiFiManager::handleInfo() void ESP_AT_WiFiManager::handleNotFound() { String message = "File Not Found\n\n"; + + #if USE_STATIC_WEBSERVER + message += "URI: "; + message += server.uri(); + message += "\nMethod: "; + message += (server.method() == HTTP_GET) ? "GET" : "POST"; + message += "\nArguments: "; + message += server.args(); + message += "\n"; + + for (uint8_t i = 0; i < server.args(); i++) + { + message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; + } + + server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + server.send(404, HTTP_HEAD_CT2, message); + #else + message += "URI: "; + message += server->uri(); + message += "\nMethod: "; + message += (server.method() == HTTP_GET) ? "GET" : "POST"; + message += "\nArguments: "; + message += server->args(); + message += "\n"; + + for (uint8_t i = 0; i < server->args(); i++) + { + message += " " + server->argName(i) + ": " + server->arg(i) + "\n"; + } -#if USE_STATIC_WEBSERVER - message += "URI: "; - message += server.uri(); - message += "\nMethod: "; - message += (server.method() == HTTP_GET) ? "GET" : "POST"; - message += "\nArguments: "; - message += server.args(); - message += "\n"; - - for (uint8_t i = 0; i < server.args(); i++) - { - message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; - } - - server.sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server.sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server.sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); - server.send(404, HTTP_HEAD_CT2, message); -#else - message += "URI: "; - message += server->uri(); - message += "\nMethod: "; - message += (server.method() == HTTP_GET) ? "GET" : "POST"; - message += "\nArguments: "; - message += server->args(); - message += "\n"; - - for (uint8_t i = 0; i < server->args(); i++) - { - message += " " + server->argName(i) + ": " + server->arg(i) + "\n"; - } - - server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); - server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); - server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); - server->send(404, HTTP_HEAD_CT2, message); -#endif + server->sendHeader(HTTP_HEAD_CC, HTTP_HEAD_NCNSMR); + server->sendHeader(HTTP_HEAD_PRAGMA, HTTP_HEAD_NOCACHE); + server->sendHeader(HTTP_HEAD_EXPIRE, HTTP_HEAD_M_ONE); + server->send(404, HTTP_HEAD_CT2, message); + #endif } ////////////////////////////////////////////// @@ -1198,8 +1144,7 @@ void ESP_AT_WiFiManager::setSaveConfigCallback(void(*func)()) ////////////////////////////////////////////// //sets a custom element to add to head, like a new style tag -void ESP_AT_WiFiManager::setCustomHeadElement(const char* element) -{ +void ESP_AT_WiFiManager::setCustomHeadElement(const char* element) { _customHeadElement = element; } @@ -1231,7 +1176,7 @@ int ESP_AT_WiFiManager::scanWifiNetworks(int **indicesptr) if (n <= 0) { DEBUG_WM(F("None found")); - return (0); + return(0); } else { @@ -1243,7 +1188,7 @@ int ESP_AT_WiFiManager::scanWifiNetworks(int **indicesptr) { DEBUG_WM(F("ERROR: Out of memory")); *indicesptr = NULL; - return (0); + return(0); } *indicesptr = indices; @@ -1272,14 +1217,12 @@ int ESP_AT_WiFiManager::scanWifiNetworks(int **indicesptr) if (_removeDuplicateAPs) { String cssid; - for (int i = 0; i < n; i++) { if (indices[i] == -1) continue; cssid = WiFi.SSID(indices[i]); - for (int j = i + 1; j < n; j++) { if (cssid == WiFi.SSID(indices[j])) @@ -1357,7 +1300,7 @@ bool ESP_AT_WiFiManager::isIp(String str) return false; } } - + return true; } @@ -1367,7 +1310,7 @@ bool ESP_AT_WiFiManager::isIp(String str) String ESP_AT_WiFiManager::toStringIp(IPAddress ip) { String res = ""; - + for (int i = 0; i < 3; i++) { res += String((ip >> (8 * i)) & 0xFF) + "."; @@ -1383,7 +1326,7 @@ String ESP_AT_WiFiManager::toStringIp(IPAddress ip) void ESP_AT_WiFiManager::displayConfigData() { DEBUG_WM6(F("Header = "), ESP_AT_WM_Config.header, F(", SSID = "), ESP_AT_WM_Config.wifi_ssid, - F(", PW = "), ESP_AT_WM_Config.wifi_pw); + F(", PW = "), ESP_AT_WM_Config.wifi_pw); DEBUG_WM2(F("Host Name = "), ESP_AT_WM_Config.host_name); } @@ -1392,7 +1335,7 @@ void ESP_AT_WiFiManager::displayConfigData() int ESP_AT_WiFiManager::calcChecksum() { int checkSum = 0; - + for (uint16_t index = 0; index < (sizeof(ESP_AT_WM_Config) - sizeof(ESP_AT_WM_Config.checkSum)); index++) { checkSum += * ( ( (byte*) &ESP_AT_WM_Config ) + index); @@ -1402,7 +1345,7 @@ int ESP_AT_WiFiManager::calcChecksum() } ////////////////////////////////////////////// - + bool ESP_AT_WiFiManager::isWiFiConfigValid() { // If PWD length < 8 (as required by standard) => invalid set @@ -1411,14 +1354,16 @@ bool ESP_AT_WiFiManager::isWiFiConfigValid() { // If SSID, PW = NULL or len < 8, set the flag DEBUG_WM2(F("Invalid Stored Config Data : WiFi PWD len < 8. PWD = "), ESP_AT_WM_Config.wifi_pw); - + hadConfigData = false; - + return false; } - + return true; } +////////////////////////////////////////////// + #endif //ESP_AT_WiFiManager-impl_h diff --git a/src/ESP_AT_WiFiManager-impl_DUE.h b/src/ESP_AT_WiFiManager-impl_DUE.h index 2f514cc1..0687aaf2 100644 --- a/src/ESP_AT_WiFiManager-impl_DUE.h +++ b/src/ESP_AT_WiFiManager-impl_DUE.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager-impl_DUE.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,40 +22,51 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core *********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_impl_DUE_h #define ESP_AT_WiFiManager_impl_DUE_h +////////////////////////////////////////////// + #define DEFAULT_HOST_NAME "SAM-DUE" +////////////////////////////////////////////// + //Use DueFlashStorage to simulate EEPROM //https://github.com/sebnil/DueFlashStorage #include DueFlashStorage dueFlashStorage; +////////////////////////////////////////////// + void ESP_AT_WiFiManager::resetBoard() { rstc_start_software_reset(RSTC); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::clearConfigData() { memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); dueFlashStorage.write(EEPROM_START, (byte *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); } +////////////////////////////////////////////// + bool ESP_AT_WiFiManager::getConfigData() { hadConfigData = false; - + ESP_AT_WM_Configuration* dataPointer = (ESP_AT_WM_Configuration* ) dueFlashStorage.readAddress(EEPROM_START); memcpy(&ESP_AT_WM_Config, dataPointer, sizeof(ESP_AT_WM_Config)); - + int calChecksum = calcChecksum(); - + DEBUG_WM4(F("CCSum=0x"), String(calChecksum, HEX), F(",RCSum=0x"), String(ESP_AT_WM_Config.checkSum, HEX)); if ( (strncmp(ESP_AT_WM_Config.header, ESP_AT_BOARD_TYPE, strlen(ESP_AT_BOARD_TYPE)) != 0) || @@ -74,7 +81,7 @@ bool ESP_AT_WiFiManager::getConfigData() strcpy(ESP_AT_WM_Config.host_name, DEFAULT_HOST_NAME); // Don't need ESP_AT_WM_Config.checkSum = 0; - + dueFlashStorage.write(EEPROM_START, (byte *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); return false; @@ -90,7 +97,7 @@ bool ESP_AT_WiFiManager::getConfigData() DEBUG_WM1(F("======= Start Stored Config Data =======")); displayConfigData(); } - + // If "blank" or NULL, set false flag and exit if (!isWiFiConfigValid()) { @@ -98,20 +105,24 @@ bool ESP_AT_WiFiManager::getConfigData() } hadConfigData = true; - + return true; } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::saveConfigData() { int calChecksum = calcChecksum(); ESP_AT_WM_Config.checkSum = calChecksum; - + DEBUG_WM2(F("SaveDueFlash, CSum="), calChecksum); - + dueFlashStorage.write(EEPROM_START, (byte *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); } +////////////////////////////////////////////// + #endif //ESP_AT_WiFiManager_impl_DUE_h diff --git a/src/ESP_AT_WiFiManager-impl_Mbed_RPi_Pico.h b/src/ESP_AT_WiFiManager-impl_Mbed_RPi_Pico.h index ac738313..4eaf0ed1 100644 --- a/src/ESP_AT_WiFiManager-impl_Mbed_RPi_Pico.h +++ b/src/ESP_AT_WiFiManager-impl_Mbed_RPi_Pico.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager-impl_Mbed_RPi_Pico.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,14 +22,19 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core *********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_impl_Mbed_RPi_Pico_h #define ESP_AT_WiFiManager_impl_Mbed_RPi_Pico_h +////////////////////////////////////////////// + #define DEFAULT_HOST_NAME "MBED-RP2040" +////////////////////////////////////////////// + //Use LittleFS for MBED RPI Pico #include "FlashIAPBlockDevice.h" #include "LittleFileSystem.h" @@ -69,13 +70,17 @@ FlashIAPBlockDevice bd(XIP_BASE + RP2040_FS_START, (RP2040_FS_SIZE_KB * 1024)); mbed::LittleFileSystem fs("fs"); - -#warning Using LittleFS in ESP_AT_WiFiManager-impl_Mbed_RPi_Pico.h + +#if (DEBUG_WIFIMGR) + #warning Using LittleFS in ESP_AT_WiFiManager-impl_Mbed_RPi_Pico.h +#endif // Use LittleFS/InternalFS for nRF52 #define CONFIG_FILENAME ("/fs/wm_config.dat") #define CONFIG_FILENAME_BACKUP ("/fs/wm_config.bak") +////////////////////////////////////////////// + #if 0 typedef struct { @@ -91,13 +96,13 @@ typedef struct } SCB_Type; void NVIC_SystemReset() -{ - /* SCB Application Interrupt and Reset Control Register Definitions */ +{ +/* SCB Application Interrupt and Reset Control Register Definitions */ #define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ #define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - + #define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ @@ -108,13 +113,15 @@ void NVIC_SystemReset() #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk); - while (true); + while(true); } #endif +////////////////////////////////////////////// + void ESP_AT_WiFiManager::resetBoard() { delay(1000); @@ -123,20 +130,24 @@ void ESP_AT_WiFiManager::resetBoard() NVIC_SystemReset(); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::clearConfigData() { memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); - + saveConfigData(); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::loadConfigData() { DEBUG_WM1(F("LoadCfgFile ")); - + // file existed - FILE *file = fopen(CONFIG_FILENAME, "r"); - + FILE *file = fopen(CONFIG_FILENAME, "r"); + if (!file) { DEBUG_WM1(F("failed")); @@ -151,7 +162,7 @@ void ESP_AT_WiFiManager::loadConfigData() return; } } - + fseek(file, 0, SEEK_SET); fread((uint8_t *) &ESP_AT_WM_Config, 1, sizeof(ESP_AT_WM_Config), file); fclose(file); @@ -159,6 +170,8 @@ void ESP_AT_WiFiManager::loadConfigData() DEBUG_WM1(F("OK")); } +////////////////////////////////////////////// + bool initLittleFS() { DEBUG_WM2("LittleFS size (KB) = ", RP2040_FS_SIZE_KB); @@ -168,7 +181,7 @@ bool initLittleFS() DEBUG_WM1(err ? "LittleFS Mount Fail" : "LittleFS Mount OK"); if (err || FORCE_REFORMAT) - { + { // Reformat if we can't mount the filesystem DEBUG_WM1("Formatting... "); @@ -176,7 +189,7 @@ bool initLittleFS() } bool beginOK = (err == 0); - + if (!beginOK) { DEBUG_WM1("\nLittleFS error"); @@ -185,16 +198,18 @@ bool initLittleFS() return beginOK; } +////////////////////////////////////////////// + bool ESP_AT_WiFiManager::getConfigData() { hadConfigData = false; - + if (!initLittleFS()) return false; - + // if config file exists, load loadConfigData(); - + int calChecksum = calcChecksum(); DEBUG_WM4(F("CCSum=0x"), String(calChecksum, HEX), F(",RCSum=0x"), String(ESP_AT_WM_Config.checkSum, HEX)); @@ -205,7 +220,7 @@ bool ESP_AT_WiFiManager::getConfigData() { // Including Credentials CSum DEBUG_WM2(F("InitCfgFile,sz="), sizeof(ESP_AT_WM_Config)); - + memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); // doesn't have any configuration @@ -231,7 +246,7 @@ bool ESP_AT_WiFiManager::getConfigData() DEBUG_WM1(F("======= Start Stored Config Data =======")); displayConfigData(); } - + // If "blank" or NULL, set false flag and exit if (!isWiFiConfigValid()) { @@ -239,17 +254,19 @@ bool ESP_AT_WiFiManager::getConfigData() } hadConfigData = true; - + return true; } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::saveConfigData() { DEBUG_WM1(F("SaveCfgFile ")); int calChecksum = calcChecksum(); ESP_AT_WM_Config.checkSum = calChecksum; - + DEBUG_WM2(F("WCSum=0x"), String(calChecksum, HEX)); FILE *file = fopen(CONFIG_FILENAME, "w"); @@ -259,7 +276,7 @@ void ESP_AT_WiFiManager::saveConfigData() fseek(file, 0, SEEK_SET); fwrite((uint8_t *) &ESP_AT_WM_Config, 1, sizeof(ESP_AT_WM_Config), file); fclose(file); - + DEBUG_WM1(F("OK")); } else @@ -282,7 +299,9 @@ void ESP_AT_WiFiManager::saveConfigData() else { DEBUG_WM1(F("failed")); - } + } } +////////////////////////////////////////////// + #endif //ESP_AT_WiFiManager_impl_Mbed_RPi_Pico_h diff --git a/src/ESP_AT_WiFiManager-impl_RPi_Pico.h b/src/ESP_AT_WiFiManager-impl_RPi_Pico.h index aeb005c6..e157df9a 100644 --- a/src/ESP_AT_WiFiManager-impl_RPi_Pico.h +++ b/src/ESP_AT_WiFiManager-impl_RPi_Pico.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager-impl_RPi_Pico.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,26 +22,35 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core *********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_impl_RPi_Pico_h #define ESP_AT_WiFiManager_impl_RPi_Pico_h +////////////////////////////////////////////// + #define DEFAULT_HOST_NAME "RP2040" +////////////////////////////////////////////// + //Use LittleFS for RPI Pico #include #include FS* filesystem = &LittleFS; #define FileFS LittleFS -#warning Using LittleFS in ESP_AT_WiFiManager-impl_RPi_Pico.h + +#if (DEBUG_WIFIMGR) + #warning Using LittleFS in ESP_AT_WiFiManager-impl_RPi_Pico.h +#endif // Use LittleFS/InternalFS for nRF52 #define CONFIG_FILENAME ("/wm_config.dat") #define CONFIG_FILENAME_BACKUP ("/wm_config.bak") +#if 0 typedef struct { uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ @@ -59,52 +64,49 @@ typedef struct uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ } SCB_Type; -void NVIC_SystemReset() -{ - /* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ +#endif -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +////////////////////////////////////////////// - - SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk); - - while (true); +void ESP_AT_NVIC_SystemReset() +{ +#define AIRCR_Register (*((volatile uint32_t*)(PPB_BASE + 0x0ED0C))) + AIRCR_Register = 0x5FA0004; } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::resetBoard() { delay(1000); // Restart for RPI Pico // AIRCR.SYSRESETREQ: Writing 1 to this bit causes the SYSRESETREQ - NVIC_SystemReset(); + //NVIC_SystemReset(); + DEBUG_WM1(F("resetBoard")); + + ESP_AT_NVIC_SystemReset(); + + delay(10000); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::clearConfigData() { memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); - + saveConfigData(); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::loadConfigData() { DEBUG_WM1(F("LoadCfgFile ")); - + // file existed - File file = FileFS.open(CONFIG_FILENAME, "r"); - + File file = FileFS.open(CONFIG_FILENAME, "r"); + if (!file) { DEBUG_WM1(F("failed")); @@ -119,7 +121,7 @@ void ESP_AT_WiFiManager::loadConfigData() return; } } - + file.seek(0); //file.read((char *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); file.read((uint8_t *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); @@ -128,20 +130,22 @@ void ESP_AT_WiFiManager::loadConfigData() file.close(); } +////////////////////////////////////////////// + bool ESP_AT_WiFiManager::getConfigData() { hadConfigData = false; - + // Initialize Internal File System if (!FileFS.begin()) { DEBUG_WM1(F("LittleFS failed")); return false; } - + // if config file exists, load loadConfigData(); - + int calChecksum = calcChecksum(); DEBUG_WM4(F("CCSum=0x"), String(calChecksum, HEX), F(",RCSum=0x"), String(ESP_AT_WM_Config.checkSum, HEX)); @@ -152,7 +156,7 @@ bool ESP_AT_WiFiManager::getConfigData() { // Including Credentials CSum DEBUG_WM2(F("InitCfgFile,sz="), sizeof(ESP_AT_WM_Config)); - + memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); // doesn't have any configuration @@ -178,7 +182,7 @@ bool ESP_AT_WiFiManager::getConfigData() DEBUG_WM1(F("======= Start Stored Config Data =======")); displayConfigData(); } - + // If "blank" or NULL, set false flag and exit if (!isWiFiConfigValid()) { @@ -186,17 +190,19 @@ bool ESP_AT_WiFiManager::getConfigData() } hadConfigData = true; - + return true; } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::saveConfigData() { DEBUG_WM1(F("SaveCfgFile ")); int calChecksum = calcChecksum(); ESP_AT_WM_Config.checkSum = calChecksum; - + DEBUG_WM2(F("WCSum=0x"), String(calChecksum, HEX)); File file = FileFS.open(CONFIG_FILENAME, "w"); @@ -205,7 +211,7 @@ void ESP_AT_WiFiManager::saveConfigData() { file.seek(0); file.write((uint8_t*) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); - + file.close(); DEBUG_WM1(F("OK")); } @@ -223,14 +229,16 @@ void ESP_AT_WiFiManager::saveConfigData() { file.seek(0); file.write((uint8_t *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); - + file.close(); DEBUG_WM1(F("OK")); } else { DEBUG_WM1(F("failed")); - } + } } +////////////////////////////////////////////// + #endif //ESP_AT_WiFiManager_impl_RPi_Pico_h diff --git a/src/ESP_AT_WiFiManager-impl_SAMD.h b/src/ESP_AT_WiFiManager-impl_SAMD.h index f4a11d05..09bb8952 100644 --- a/src/ESP_AT_WiFiManager-impl_SAMD.h +++ b/src/ESP_AT_WiFiManager-impl_SAMD.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager-impl_SAMD.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,37 +22,48 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core *********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_impl_SAMD_h #define ESP_AT_WiFiManager_impl_SAMD_h +////////////////////////////////////////////// + #define DEFAULT_HOST_NAME "SAMD" +////////////////////////////////////////////// + //https://github.com/khoih-prog/FlashStorage_SAMD #include FlashStorage(ESP_AT_WM_Config_data, ESP_AT_WM_Configuration); +////////////////////////////////////////////// + void ESP_AT_WiFiManager::resetBoard() { NVIC_SystemReset(); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::clearConfigData() { memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); ESP_AT_WM_Config_data.write(ESP_AT_WM_Config); } +////////////////////////////////////////////// + bool ESP_AT_WiFiManager::getConfigData() { hadConfigData = false; - + ESP_AT_WM_Config = ESP_AT_WM_Config_data.read(); - + int calChecksum = calcChecksum(); - + DEBUG_WM4(F("CCSum=0x"), String(calChecksum, HEX), F(",RCSum=0x"), String(ESP_AT_WM_Config.checkSum, HEX)); if ( (strncmp(ESP_AT_WM_Config.header, ESP_AT_BOARD_TYPE, strlen(ESP_AT_BOARD_TYPE)) != 0) || @@ -87,7 +94,7 @@ bool ESP_AT_WiFiManager::getConfigData() DEBUG_WM1(F("======= Start Stored Config Data =======")); displayConfigData(); } - + // If "blank" or NULL, set false flag and exit if (!isWiFiConfigValid()) { @@ -95,18 +102,22 @@ bool ESP_AT_WiFiManager::getConfigData() } hadConfigData = true; - + return true; } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::saveConfigData() { int calChecksum = calcChecksum(); ESP_AT_WM_Config.checkSum = calChecksum; - + DEBUG_WM2(F("SaveFlash,CSum="), calChecksum); ESP_AT_WM_Config_data.write(ESP_AT_WM_Config); } +////////////////////////////////////////////// + #endif //ESP_AT_WiFiManager_impl_SAMD_h diff --git a/src/ESP_AT_WiFiManager-impl_STM32.h b/src/ESP_AT_WiFiManager-impl_STM32.h index bab3adbb..5ece1206 100644 --- a/src/ESP_AT_WiFiManager-impl_STM32.h +++ b/src/ESP_AT_WiFiManager-impl_STM32.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager-impl_STM32.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,39 +22,50 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core ********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_impl_STM32_h #define ESP_AT_WiFiManager_impl_STM32_h +////////////////////////////////////////////// + #if !( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ defined(STM32WB) || defined(STM32MP1) || defined(STM32L5) ) -#error This code is intended to run on STM32F/L/H/G/WB/MP1 platform! Please check your Tools->Board setting. + #error This code is intended to run on STM32F/L/H/G/WB/MP1 platform! Please check your Tools->Board setting. #endif +////////////////////////////////////////////// + #define DEFAULT_HOST_NAME "STM32" #include ///////////////////////////////////////////// - + #if defined(DATA_EEPROM_BASE) // For STM32 devices having integrated EEPROM. #include - #warning STM32 devices have integrated EEPROM. Not using buffered API. -#else + + #if (DEBUG_WIFIMGR) + #warning STM32 devices have integrated EEPROM. Not using buffered API + #endif +#else /** - Most STM32 devices don't have an integrated EEPROM. To emulate a EEPROM, the STM32 Arduino core emulated - the operation of an EEPROM with the help of the embedded flash. - Writing to a flash is very expensive operation, since a whole flash page needs to be written, even if you only - want to access the flash byte-wise. - The STM32 Arduino core provides a buffered access API to the emulated EEPROM. The library has allocated the - buffer even if you don't use the buffered API, so it's strongly suggested to use the buffered API anyhow. - */ + Most STM32 devices don't have an integrated EEPROM. To emulate a EEPROM, the STM32 Arduino core emulated + the operation of an EEPROM with the help of the embedded flash. + Writing to a flash is very expensive operation, since a whole flash page needs to be written, even if you only + want to access the flash byte-wise. + The STM32 Arduino core provides a buffered access API to the emulated EEPROM. The library has allocated the + buffer even if you don't use the buffered API, so it's strongly suggested to use the buffered API anyhow. + */ #include // https://github.com/khoih-prog/FlashStorage_STM32 - #warning STM32 devices have no integrated EEPROM. Using buffered API with FlashStorage_STM32 library + + #if (DEBUG_WIFIMGR) + #warning STM32 devices have no integrated EEPROM. Using buffered API with FlashStorage_STM32 library + #endif #endif // #if defined(DATA_EEPROM_BASE) ////////////////////////////////////////////// @@ -69,8 +76,8 @@ void ESP_AT_WiFiManager::resetBoard() // This would cause a CPU reset if the IWDG timer // is not reloaded in approximately 2 seconds. IWatchdog.begin(2000000); - - // Back up + + // Back up void(*resetFunc)() = 0; resetFunc(); } @@ -88,16 +95,16 @@ void ESP_AT_WiFiManager::clearConfigData() bool ESP_AT_WiFiManager::getConfigData() { hadConfigData = false; - -#if defined(DATA_EEPROM_BASE) - EEPROM.begin(); + +#if defined(DATA_EEPROM_BASE) + EEPROM.begin(); #endif DEBUG_WM2(F("EEPROMsz:"), EEPROM_SIZE); EEPROM.get(EEPROM_START, ESP_AT_WM_Config); - + int calChecksum = calcChecksum(); - + DEBUG_WM4(F("CCSum=0x"), String(calChecksum, HEX), F(",RCSum=0x"), String(ESP_AT_WM_Config.checkSum, HEX)); if ( (strncmp(ESP_AT_WM_Config.header, ESP_AT_BOARD_TYPE, strlen(ESP_AT_BOARD_TYPE)) != 0) || @@ -129,15 +136,15 @@ bool ESP_AT_WiFiManager::getConfigData() DEBUG_WM1(F("======= Start Stored Config Data =======")); displayConfigData(); } - + // If "blank" or NULL, set false flag and exit if (!isWiFiConfigValid()) { return false; } - + hadConfigData = true; - + return true; } @@ -147,14 +154,14 @@ void ESP_AT_WiFiManager::saveConfigData() { int calChecksum = calcChecksum(); ESP_AT_WM_Config.checkSum = calChecksum; - + DEBUG_WM2(F("SaveEEPROM,CSum="), calChecksum); EEPROM.put(EEPROM_START, ESP_AT_WM_Config); } ////////////////////////////////////////////// - + #endif //ESP_AT_WiFiManager_impl_STM32_h diff --git a/src/ESP_AT_WiFiManager-impl_nRF52.h b/src/ESP_AT_WiFiManager-impl_nRF52.h index 45bcb2b3..88e6b29a 100644 --- a/src/ESP_AT_WiFiManager-impl_nRF52.h +++ b/src/ESP_AT_WiFiManager-impl_nRF52.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager-impl_nRF52.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,14 +22,19 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core *********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_impl_nRF52_h #define ESP_AT_WiFiManager_impl_nRF52_h +////////////////////////////////////////////// + #define DEFAULT_HOST_NAME "nRF52" +////////////////////////////////////////////// + //Use LittleFS for nRF52 #include #include @@ -45,6 +46,8 @@ File file(InternalFS); #define CONFIG_FILENAME ("/wm_config.dat") #define CONFIG_FILENAME_BACKUP ("/wm_config.bak") +////////////////////////////////////////////// + void ESP_AT_WiFiManager::resetBoard() { delay(1000); @@ -52,20 +55,23 @@ void ESP_AT_WiFiManager::resetBoard() NVIC_SystemReset(); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::clearConfigData() { memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); - + saveConfigData(); } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::loadConfigData() { DEBUG_WM1(F("LoadCfgFile ")); - + // file existed - file.open(CONFIG_FILENAME, FILE_O_READ); - + file.open(CONFIG_FILENAME, FILE_O_READ); if (!file) { DEBUG_WM1(F("failed")); @@ -80,7 +86,7 @@ void ESP_AT_WiFiManager::loadConfigData() return; } } - + file.seek(0); file.read((char *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); @@ -88,20 +94,22 @@ void ESP_AT_WiFiManager::loadConfigData() file.close(); } +////////////////////////////////////////////// + bool ESP_AT_WiFiManager::getConfigData() { hadConfigData = false; - + // Initialize Internal File System if (!InternalFS.begin()) { DEBUG_WM1(F("InternalFS failed")); return false; } - + // if config file exists, load loadConfigData(); - + int calChecksum = calcChecksum(); DEBUG_WM4(F("CCSum=0x"), String(calChecksum, HEX), F(",RCSum=0x"), String(ESP_AT_WM_Config.checkSum, HEX)); @@ -112,7 +120,7 @@ bool ESP_AT_WiFiManager::getConfigData() { // Including Credentials CSum DEBUG_WM2(F("InitCfgFile,sz="), sizeof(ESP_AT_WM_Config)); - + memset(&ESP_AT_WM_Config, 0, sizeof(ESP_AT_WM_Config)); // doesn't have any configuration @@ -138,7 +146,7 @@ bool ESP_AT_WiFiManager::getConfigData() DEBUG_WM1(F("======= Start Stored Config Data =======")); displayConfigData(); } - + // If "blank" or NULL, set false flag and exit if (!isWiFiConfigValid()) { @@ -146,17 +154,19 @@ bool ESP_AT_WiFiManager::getConfigData() } hadConfigData = true; - + return true; } +////////////////////////////////////////////// + void ESP_AT_WiFiManager::saveConfigData() { DEBUG_WM1(F("SaveCfgFile ")); int calChecksum = calcChecksum(); ESP_AT_WM_Config.checkSum = calChecksum; - + DEBUG_WM2(F("WCSum=0x"), String(calChecksum, HEX)); file.open(CONFIG_FILENAME, FILE_O_WRITE); @@ -165,7 +175,7 @@ void ESP_AT_WiFiManager::saveConfigData() { file.seek(0); file.write((uint8_t*) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); - + file.close(); DEBUG_WM1(F("OK")); } @@ -183,14 +193,16 @@ void ESP_AT_WiFiManager::saveConfigData() { file.seek(0); file.write((uint8_t *) &ESP_AT_WM_Config, sizeof(ESP_AT_WM_Config)); - + file.close(); DEBUG_WM1(F("OK")); } else { DEBUG_WM1(F("failed")); - } + } } +////////////////////////////////////////////// + #endif //ESP_AT_WiFiManager_impl_nRF52_h diff --git a/src/ESP_AT_WiFiManager.h b/src/ESP_AT_WiFiManager.h index d138086a..8203fc1e 100644 --- a/src/ESP_AT_WiFiManager.h +++ b/src/ESP_AT_WiFiManager.h @@ -2,20 +2,16 @@ ESP_AT_WiFiManager.h WiFi/Credentials Manager for SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` shields - (https://github.com/esp8266/Arduino) to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal - - Inspired by: - http://www.esp8266.com/viewtopic.php?f=29&t=2520 - https://github.com/chriscook8/esp-arduino-apboot - https://github.com/esp8266/Arduino/blob/master/libraries/DNSServer/examples/CaptivePortalAdvanced/ + ESP_AT_WiFiManager is a library for the Teensy, SAM DUE, SAMD, nRF52, STM32F/L/H/G/WB/MP1, etc. boards running `ESP8266/ESP32-AT-command` + shields to enable easy configuration and reconfiguration of WiFi, etc. credentials using a Captive Portal Based on and modified from Tzapu https://github.com/tzapu/WiFiManager and from Ken Taylor https://github.com/kentaylor Built by Khoi Hoang https://github.com/khoih-prog/ESP_AT_WiFiManager Licensed under MIT license - Version: 1.3.1 + + Version: 1.4.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -26,13 +22,24 @@ 1.1.0 K Hoang 27/04/2021 Use new FlashStorage_STM32 library. Add support to new STM32 core v2.0.0 and STM32L5 1.2.0 K Hoang 12/05/2021 Add support to RASPBERRY_PI_PICO using Arduino-pico core 1.3.0 K Hoang 28/05/2021 Add support to Nano_RP2040_Connect, RASPBERRY_PI_PICO using RP2040 Arduino mbed core - 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.3.1 K Hoang 10/10/2021 Update `platform.ini` and `library.json` + 1.4.0 K Hoang 28/05/2021 Add support to WizNet WizFi360 such as WIZNET_WIZFI360_EVB_PICO using arduino-pico core *********************************************************************************************************************************/ #ifndef ESP_AT_WiFiManager_h #define ESP_AT_WiFiManager_h -#define ESP_AT_WIFIMANAGER_VERSION "ESP_AT_WiFiManager v1.3.1" +//////////////////////////////////////// + +#define ESP_AT_WIFIMANAGER_VERSION "ESP_AT_WiFiManager v1.4.0" + +#define ESP_AT_WIFIMANAGER_VERSION_MAJOR 1 +#define ESP_AT_WIFIMANAGER_VERSION_MINOR 4 +#define ESP_AT_WIFIMANAGER_VERSION_PATCH 0 + +#define ESP_AT_WIFIMANAGER_VERSION_INT 1004000 + +//////////////////////////////////////// #if !defined(DEBUG_WIFIMGR) #define DEBUG_WIFIMGR false @@ -44,57 +51,86 @@ #define USE_STATIC_WEBSERVER true +//////////////////////////////////////// + #if ( defined(NRF52840_FEATHER) || defined(NRF52832_FEATHER) || defined(NRF52_SERIES) || defined(ARDUINO_NRF52_ADAFRUIT) || \ defined(NRF52840_FEATHER_SENSE) || defined(NRF52840_ITSYBITSY) || defined(NRF52840_CIRCUITPLAY) || defined(NRF52840_CLUE) || \ defined(NRF52840_METRO) || defined(NRF52840_PCA10056) || defined(PARTICLE_XENON) || defined(NINA_B302_ublox) || defined(NINA_B112_ublox) ) -#if defined(ESP8266_AT_USE_NRF528XX) - #undef ESP8266_AT_USE_NRF528XX -#endif -#define ESP8266_AT_USE_NRF528XX true -#warning Use nFR52 architecture from ESP8266_AT_WiFiManager - -#elif ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ - defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ - defined(STM32WB) || defined(STM32MP1) || defined(STM32L5) ) -#if defined(STM32F0) - #error STMF0 not supported -#endif -#if defined(ESP8266_AT_USE_STM32) - #undef ESP8266_AT_USE_STM32 -#endif -#define ESP8266_AT_USE_STM32 true + #if defined(ESP8266_AT_USE_NRF528XX) + #undef ESP8266_AT_USE_NRF528XX + #endif + #define ESP8266_AT_USE_NRF528XX true + + #if (DEBUG_WIFIMGR) + #warning Use nFR52 architecture from ESP8266_AT_WiFiManager + #endif + +//////////////////////////////////////// + +#elif ( defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) ||defined(STM32F4) || defined(STM32F7) || \ + defined(STM32L0) || defined(STM32L1) || defined(STM32L4) || defined(STM32H7) ||defined(STM32G0) || defined(STM32G4) || \ + defined(STM32WB) || defined(STM32MP1) || defined(STM32L5) ) + #if defined(STM32F0) + #error STMF0 not supported + #endif + #if defined(ESP8266_AT_USE_STM32) + #undef ESP8266_AT_USE_STM32 + #endif + #define ESP8266_AT_USE_STM32 true + +//////////////////////////////////////// #elif ( defined(ARDUINO_SAM_DUE) || defined(__SAM3X8E__) ) -#if defined(ESP8266_AT_USE_SAM_DUE) - #undef ESP8266_AT_USE_SAM_DUE -#endif -#define ESP8266_AT_USE_SAM_DUE true -#warning Use SAM_DUE architecture from ESP8266_AT_WiFiManager + #if defined(ESP8266_AT_USE_SAM_DUE) + #undef ESP8266_AT_USE_SAM_DUE + #endif + #define ESP8266_AT_USE_SAM_DUE true + + #if (DEBUG_WIFIMGR) + #warning Use SAM_DUE architecture from ESP8266_AT_WiFiManager + #endif -#elif ( defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) \ +//////////////////////////////////////// + +#elif ( defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_MKRWIFI1010) \ || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_SAMD_MKRFox1200) || defined(ARDUINO_SAMD_MKRWAN1300) || defined(ARDUINO_SAMD_MKRWAN1310) \ || defined(ARDUINO_SAMD_MKRGSM1400) || defined(ARDUINO_SAMD_MKRNB1500) || defined(ARDUINO_SAMD_MKRVIDOR4000) || defined(__SAMD21G18A__) \ || defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) || defined(__SAMD21E18A__) || defined(__SAMD51__) || defined(__SAMD51J20A__) || defined(__SAMD51J19A__) \ || defined(__SAMD51G19A__) || defined(__SAMD51P19A__) || defined(__SAMD21G18A__) ) -#if defined(ESP8266_AT_USE_SAMD) - #undef ESP8266_AT_USE_SAMD -#endif -#define ESP8266_AT_USE_SAMD true -#warning Use SAMD architecture from ESP8266_AT_WiFiManager + #if defined(ESP8266_AT_USE_SAMD) + #undef ESP8266_AT_USE_SAMD + #endif + #define ESP8266_AT_USE_SAMD true + + #if (DEBUG_WIFIMGR) + #warning Use SAMD architecture from ESP8266_AT_WiFiManager + #endif + +//////////////////////////////////////// #elif ( defined(ARDUINO_ARCH_RP2040) && !defined(ARDUINO_ARCH_MBED) ) -#if defined(ESP8266_AT_USE_RPI_PICO) - #undef ESP8266_AT_USE_RPI_PICO -#endif -#define ESP8266_AT_USE_RPI_PICO true -#warning Use RPI_PICO architecture from ESP8266_AT_WiFiManager + #if defined(ESP8266_AT_USE_RPI_PICO) + #undef ESP8266_AT_USE_RPI_PICO + #endif + #define ESP8266_AT_USE_RPI_PICO true + + #if (DEBUG_WIFIMGR) + #warning Use RPI_PICO architecture from ESP8266_AT_WiFiManager + #endif + +//////////////////////////////////////// #elif ( defined(ARDUINO_ARCH_RP2040) && defined(ARDUINO_ARCH_MBED) ) -#if defined(ESP8266_AT_USE_MBED_RP2040) - #undef ESP8266_AT_USE_MBED_RP2040 -#endif -#define ESP8266_AT_USE_MBED_RP2040 true -#warning Use MBED_RP2040 architecture from ESP8266_AT_WiFiManager + #if defined(ESP8266_AT_USE_MBED_RP2040) + #undef ESP8266_AT_USE_MBED_RP2040 + #endif + #define ESP8266_AT_USE_MBED_RP2040 true + + #if (DEBUG_WIFIMGR) + #warning Use MBED_RP2040 architecture from ESP8266_AT_WiFiManager + #endif + +//////////////////////////////////////// #elif ( defined(ARDUINO_AVR_NANO) || defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_DUEMILANOVE) || defined(ARDUINO_AVR_YUN) || \ defined(ARDUINO_AVR_MINI) || defined(ARDUINO_AVR_ETHERNET) || defined(ARDUINO_AVR_FIO) || defined(ARDUINO_AVR_BT) || \ @@ -103,14 +139,18 @@ defined(ARDUINO_AVR_ESPLORA) || defined(ARDUINO_AVR_LILYPAD) || defined(ARDUINO_AVR_LILYPAD_USB) || defined(ARDUINO_AVR_ROBOT_CONTROL) || \ defined(ARDUINO_AVR_UNO_WIFI_REV2) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega1280__) || \ defined(__AVR_ATmega1284__) || defined(__AVR_ATmega2560__) ) -#error This code is not intended to run on the AVR platform! Please check your Tools->Board setting. + #error This code is not intended to run on the AVR platform! Please check your Tools->Board setting. + +//////////////////////////////////////// #else -#error Not supported board or platform! Please check your Tools->Board setting. - + #error Not supported board or platform! Please check your Tools->Board setting. + #endif +//////////////////////////////////////// + #include #define local_swap(a, b) { int16_t t = a; a = b; b = t; } @@ -122,31 +162,26 @@ #define WFM_LABEL_AFTER 2 #define WFM_NO_LABEL 0 +//////////////////////////////////////// + //KH //Mofidy HTTP_HEAD to HTTP_HEAD_START to avoid conflict in Arduino esp8266 core 2.6.0+ const char HTTP_200[] = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; -const char HTTP_HEAD_START[] = - "{v}"; +const char HTTP_HEAD_START[] = "{v}"; -const char HTTP_STYLE[] = - ""; +const char HTTP_STYLE[] = ""; -const char HTTP_SCRIPT[] = - ""; +const char HTTP_SCRIPT[] = ""; const char HTTP_HEAD_END[] = "

"; -const char HTTP_PORTAL_OPTIONS[] = - "



"; -const char HTTP_ITEM[] = - "
{v} {r}%
"; +const char HTTP_PORTAL_OPTIONS[] = "



"; +const char HTTP_ITEM[] = "
{v} {r}%
"; const char JSON_ITEM[] = "{\"SSID\":\"{v}\", \"Encrypt\":{i}, \"Quality\":\"{r}\"}"; -const char HTTP_FORM_START[] = - "
"; +const char HTTP_FORM_START[] = ""; const char HTTP_FORM_LABEL[] = ""; const char HTTP_FORM_PARAM[] = ""; const char HTTP_FORM_END[] = "
"; -const char HTTP_SAVED[] = - "
Data Saved
Try connect ESP to the {x} network.
Wait 10s and check if OK.

The {v} AP's channel will be same as {x} network. You may have to reconnect to the {v} network.

"; +const char HTTP_SAVED[] = "
Data Saved
Try connect ESP to the {x} network.
Wait 10s and check if OK.

The {v} AP's channel will be same as {x} network. You may have to reconnect to the {v} network.

"; const char HTTP_END[] = "
"; //KH, added 2019/12/15 from Tzapu Development @@ -164,17 +199,20 @@ const char HTTP_HEAD_NOCACHE[] = "no-cache"; const char HTTP_HEAD_EXPIRE[] = "Expires"; const char HTTP_HEAD_M_ONE[] = "-1"; +//////////////////////////////////////// + //KH #define WIFI_MANAGER_MAX_PARAMS 20 +//////////////////////////////////////// + class ESP_AT_WMParameter { public: ESP_AT_WMParameter(const char *custom); ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length); ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom); - ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom, - int labelPlacement); + ESP_AT_WMParameter(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom, int labelPlacement); ~ESP_AT_WMParameter(); @@ -192,12 +230,13 @@ class ESP_AT_WMParameter int _labelPlacement; const char *_customHTML; - void init(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom, - int labelPlacement); + void init(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom, int labelPlacement); friend class ESP_AT_WiFiManager; }; +//////////////////////////////////////// + #define SSID_MAX_LEN 32 //From v1.0.3, WPA2 passwords can be min 8 and max 63 characters long. #define PASSWORD_MIN_LEN 8 @@ -206,6 +245,8 @@ class ESP_AT_WMParameter #define HEADER_MAX_LEN 16 #define RFC952_HOSTNAME_MAXLEN 24 +//////////////////////////////////////// + typedef struct _ESP_AT_WM_Configuration { char header [HEADER_MAX_LEN]; @@ -218,9 +259,13 @@ typedef struct _ESP_AT_WM_Configuration // Currently CONFIG_DATA_SIZE = 108 uint16_t CONFIG_DATA_SIZE = sizeof(ESP_AT_WM_Configuration); +//////////////////////////////////////// + #define ESP_AT_BOARD_TYPE "ESP_AT" #define ESP_AT_NO_CONFIG "blank" +//////////////////////////////////////// + //#define EEPROM_SIZE E2END //#define EEPROM_SIZE 512 @@ -232,7 +277,7 @@ uint16_t CONFIG_DATA_SIZE = sizeof(ESP_AT_WM_Configuration); #undef EEPROM_SIZE #define EEPROM_SIZE 4096 #endif - + #if (EEPROM_SIZE < CONFIG_DATA_SIZE) #warning EEPROM_SIZE must be > CONFIG_DATA_SIZE. Reset to 1024 #undef EEPROM_SIZE @@ -248,9 +293,12 @@ uint16_t CONFIG_DATA_SIZE = sizeof(ESP_AT_WM_Configuration); #endif #endif +//////////////////////////////////////// #define DEFAULT_PORTAL_TIMEOUT 60000L +//////////////////////////////////////// + class ESP_AT_WiFiManager { public: @@ -309,18 +357,24 @@ class ESP_AT_WiFiManager //space for indices array allocated on the heap and should be freed when no longer required int scanWifiNetworks(int **indicesptr); + //////////////////////////////////////// + // return SSID of router in STA mode got from config portal. NULL if no user's input //KH - String getSSID() + String getSSID() { return WiFi_SSID(); } + //////////////////////////////////////// + // return password of router in STA mode got from config portal. NULL if no user's input //KH - String getPW() + String getPW() { return WiFi_Pass(); } + //////////////////////////////////////// + //returns the list of Parameters ESP_AT_WMParameter** getParameters(); @@ -329,6 +383,8 @@ class ESP_AT_WiFiManager const char* getStatus(int status); + //////////////////////////////////////// + String WiFi_SSID() { if (!hadConfigData) @@ -340,6 +396,8 @@ class ESP_AT_WiFiManager return ""; } + //////////////////////////////////////// + String WiFi_Pass() { if (!hadConfigData) @@ -351,34 +409,44 @@ class ESP_AT_WiFiManager return ""; } + //////////////////////////////////////// + String IPAddressToString(const IPAddress& address) { return (String(address[0]) + "." + address[1] + "." + address[2] + "." + address[3]); } + //////////////////////////////////////// + void resetBoard(); -#define MAX_WIFI_CHANNEL 11 + //////////////////////////////////////// + #define MAX_WIFI_CHANNEL 11 + void setAPChannel(int apChannel) { - // Use random channel if AP_channel == 0 + // Use random channel if AP_channel == 0 if (apChannel == 0) _apChannel = (millis() % MAX_WIFI_CHANNEL) + 1; else _apChannel = apChannel; } - void clearConfigData(); + //////////////////////////////////////// + void clearConfigData(); + int connectWifi(String ssid, String pass); - + bool isWiFiConfigValid(); + //////////////////////////////////////// + private: ESP_AT_WM_Configuration ESP_AT_WM_Config; - + bool hadConfigData = false; #if USE_STATIC_WEBSERVER @@ -432,7 +500,7 @@ class ESP_AT_WiFiManager int getRSSIasQuality(int RSSI); bool isIp(String str); String toStringIp(IPAddress ip); - + bool connect; bool stopConfigPortal = false; bool _debug = false; //true; @@ -446,17 +514,25 @@ class ESP_AT_WiFiManager template void DEBUG_WM(Generic text); + //////////////////////////////////////// + template - auto optionalIPFromString(T *obj, const char *s) -> decltype(obj->fromString(s)) + auto optionalIPFromString(T *obj, const char *s) -> decltype(obj->fromString(s)) { return obj->fromString(s); } - auto optionalIPFromString(...) -> bool + + //////////////////////////////////////// + + auto optionalIPFromString(...) -> bool { + DEBUG_WM("NO fromString METHOD ON IPAddress, you need ESP8266 core 2.1.0 or newer for Custom IP configuration to work."); return false; } + //////////////////////////////////////// + void displayConfigData(); int calcChecksum(); void loadConfigData(); @@ -464,27 +540,33 @@ class ESP_AT_WiFiManager void saveConfigData(); }; +//////////////////////////////////////// + #if DEBUG_WIFIMGR -#define DEBUG_WM1(p1) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.println(p1); } -#define DEBUG_WM2(p1,p2) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ + #define DEBUG_WM1(p1) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.println(p1); } + #define DEBUG_WM2(p1,p2) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ ESP_AT_DEBUG_OUTPUT.println(p2); } -#define DEBUG_WM3(p1,p2,p3) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ + #define DEBUG_WM3(p1,p2,p3) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ ESP_AT_DEBUG_OUTPUT.print(p2); ESP_AT_DEBUG_OUTPUT.println(p3); } -#define DEBUG_WM4(p1,p2,p3,p4) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ + #define DEBUG_WM4(p1,p2,p3,p4) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ ESP_AT_DEBUG_OUTPUT.print(p2); ESP_AT_DEBUG_OUTPUT.print(p3); ESP_AT_DEBUG_OUTPUT.println(p4); } -#define DEBUG_WM6(p1,p2,p3,p4,p5,p6) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ + #define DEBUG_WM6(p1,p2,p3,p4,p5,p6) { ESP_AT_DEBUG_OUTPUT.print(F("*WM: ")); ESP_AT_DEBUG_OUTPUT.print(p1); \ ESP_AT_DEBUG_OUTPUT.print(p2); ESP_AT_DEBUG_OUTPUT.print(p3); ESP_AT_DEBUG_OUTPUT.print(p4); \ ESP_AT_DEBUG_OUTPUT.print(p5); ESP_AT_DEBUG_OUTPUT.println(p6); } #else -#define DEBUG_WM1(p1) -#define DEBUG_WM2(p1,p2) -#define DEBUG_WM3(p1,p2,p3) -#define DEBUG_WM4(p1,p2,p3,p4) -#define DEBUG_WM6(p1,p2,p3,p4,p5,p6) + #define DEBUG_WM1(p1) + #define DEBUG_WM2(p1,p2) + #define DEBUG_WM3(p1,p2,p3) + #define DEBUG_WM4(p1,p2,p3,p4) + #define DEBUG_WM6(p1,p2,p3,p4,p5,p6) #endif +//////////////////////////////////////// + #include "ESP_AT_WiFiManager-impl.h" +//////////////////////////////////////// + #if (ESP8266_AT_USE_NRF528XX) //Use nRF52's LittleFS #include "ESP_AT_WiFiManager-impl_nRF52.h" @@ -502,4 +584,6 @@ class ESP_AT_WiFiManager #error Not supported Boards. Please check your Tools->Board setting. #endif +//////////////////////////////////////// + #endif //ESP_AT_WiFiManager_h