diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index b51461af..5fcdcbe9 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -3459,6 +3459,75 @@ #define BUTTON3_RELAY 2 #define BUTTON4_RELAY 1 +// ----------------------------------------------------------------------------- +// Teckin SP20 +// ----------------------------------------------------------------------------- + + #elif defined(TECKIN_SP20) + + // Info + #define MANUFACTURER "TECKIN" + #define DEVICE "SP20" + + // Buttons + #define BUTTON1_PIN 13 + #define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH + #define BUTTON1_RELAY 1 + + // Relays + #define RELAY1_PIN 4 + #define RELAY1_TYPE RELAY_TYPE_NORMAL + + // LEDs + #define LED1_PIN 2 + #define LED1_PIN_INVERSE 1 + #define LED2_PIN 0 + #define LED2_PIN_INVERSE 1 + #define LED2_MODE LED_MODE_FINDME + #define LED2_RELAY 0 + + // HJL01 / BL0937 + #ifndef HLW8012_SUPPORT + #define HLW8012_SUPPORT 1 + #endif + #define HLW8012_SEL_PIN 12 + #define HLW8012_CF1_PIN 14 + #define HLW8012_CF_PIN 5 + + #define HLW8012_SEL_CURRENT LOW + #define HLW8012_CURRENT_RATIO 25740 + #define HLW8012_VOLTAGE_RATIO 313400 + #define HLW8012_POWER_RATIO 3414290 + #define HLW8012_INTERRUPT_ON FALLING + +// ----------------------------------------------------------------------------- +// Charging Essentials / LITESUN LA-WF3 +// ----------------------------------------------------------------------------- + +#elif defined(LITESUN_LA_WF3) + + // Info + #define MANUFACTURER "LITESUN" + #define DEVICE "LA_WF3" + + // Buttons + #define BUTTON1_PIN 13 + #define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH + #define BUTTON1_RELAY 1 + + // Relays + #define RELAY1_PIN 12 + #define RELAY1_TYPE RELAY_TYPE_NORMAL + + // LEDs + #define LED1_PIN 4 // 4 blue led + #define LED1_MODE LED_MODE_WIFI + #define LED1_PIN_INVERSE 1 + + #define LED2_PIN 5 // 5 red led + #define LED2_MODE LED_MODE_RELAY + #define LED2_PIN_INVERSE 1 + // ----------------------------------------------------------------------------- // TEST boards (do not use!!) // ----------------------------------------------------------------------------- diff --git a/code/espurna/config/prototypes.h b/code/espurna/config/prototypes.h index 599985a0..9805983b 100644 --- a/code/espurna/config/prototypes.h +++ b/code/espurna/config/prototypes.h @@ -157,6 +157,7 @@ bool settingsRestoreJson(JsonObject& data); // ----------------------------------------------------------------------------- char * ltrim(char * s); void nice_delay(unsigned long ms); +bool inline eraseSDKConfig(); #define ARRAYINIT(type, name, ...) type name[] = {__VA_ARGS__}; diff --git a/code/espurna/relay.ino b/code/espurna/relay.ino index c88880a8..9fb78dc1 100644 --- a/code/espurna/relay.ino +++ b/code/espurna/relay.ino @@ -660,7 +660,7 @@ void _relayWebSocketSendRelays() { #if MQTT_SUPPORT group.add(getSetting("mqttGroup", i, "")); - group_sync.add(getSetting("mqttGroupSync", i, 0).toInt() == 1); + group_sync.add(getSetting("mqttGroupSync", i, 0).toInt()); on_disconnect.add(getSetting("relayOnDisc", i, 0).toInt()); #endif } diff --git a/code/espurna/terminal.ino b/code/espurna/terminal.ino index b87918eb..7ffa7710 100644 --- a/code/espurna/terminal.ino +++ b/code/espurna/terminal.ino @@ -96,7 +96,7 @@ void _terminalInitCommand() { terminalOK(); resetReason(CUSTOM_RESET_TERMINAL); _eepromCommit(); - ESP.eraseConfig(); + eraseSDKConfig(); *((int*) 0) = 0; // see https://github.com/esp8266/Arduino/issues/1494 }); diff --git a/code/espurna/utils.ino b/code/espurna/utils.ino index 8db13590..f0ae8282 100644 --- a/code/espurna/utils.ino +++ b/code/espurna/utils.ino @@ -595,6 +595,25 @@ bool checkNeedsReset() { return _reset_reason > 0; } +// Use fixed method for Core 2.3.0, because it erases only 2 out of 4 SDK-reserved sectors +// Fixed since 2.4.0, see: esp8266/core/esp8266/Esp.cpp: ESP::eraseConfig() +bool eraseSDKConfig() { + #if defined(ARDUINO_ESP8266_RELEASE_2_3_0) + const size_t cfgsize = 0x4000; + size_t cfgaddr = ESP.getFlashChipSize() - cfgsize; + + for (size_t offset = 0; offset < cfgsize; offset += SPI_FLASH_SEC_SIZE) { + if (!ESP.flashEraseSector((cfgaddr + offset) / SPI_FLASH_SEC_SIZE)) { + return false; + } + } + + return true; + #else + return ESP.eraseConfig(); + #endif +} + // ----------------------------------------------------------------------------- char * ltrim(char * s) { diff --git a/code/platformio.ini b/code/platformio.ini index a3ae1beb..77744536 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -74,7 +74,7 @@ extra_scripts = extra_scripts.py # Please note that we don't always use the latest version of a library. # ------------------------------------------------------------------------------ lib_deps = - ArduinoJson + ArduinoJson@5.13.4 https://github.com/marvinroger/async-mqtt-client#v0.8.1 Brzo I2C https://github.com/xoseperez/debounceevent.git#2.0.5 @@ -3252,3 +3252,55 @@ upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} monitor_speed = ${common.monitor_speed} extra_scripts = ${common.extra_scripts} + +[env:teckin-sp20] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTECKIN_SP20 +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:teckin-sp20-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTECKIN_SP20 +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:litesun-la-wf3] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLITESUN_LA_WF3 +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:litesun-la-wf3-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLITESUN_LA_WF3 +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} \ No newline at end of file