diff --git a/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin b/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin index a8c1c93..bf02b19 100644 Binary files a/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin and b/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin differ diff --git a/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino b/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino index e4bd112..8ea4a75 100644 --- a/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino +++ b/Arduino_Sketch/HASwitchPlate/HASwitchPlate.ino @@ -652,69 +652,69 @@ void mqttProcessInput(String &strTopic, String &strPayload) configSave(); } else if (strTopic == (mqttCommandTopic + "/debugserialenabled") || strTopic == (mqttGroupCommandTopic + "/debugserialenabled")) - { // '[...]/device/command/debugserialenabled' -m 'true' == enable serial debug output + { // '[...]/device/command/debugserialenabled' -m 'true' == enable serial debug output if (strPayload.equalsIgnoreCase("true")) { debugSerialEnabled = true; configSave(); } - else if(strPayload.equalsIgnoreCase("false")) + else if (strPayload.equalsIgnoreCase("false")) { debugSerialEnabled = false; configSave(); - } + } } else if (strTopic == (mqttCommandTopic + "/debugtelnetenabled") || strTopic == (mqttGroupCommandTopic + "/debugtelnetenabled")) - { // '[...]/device/command/debugtelnetenabled' -m 'true' == enable telnet debug output + { // '[...]/device/command/debugtelnetenabled' -m 'true' == enable telnet debug output if (strPayload.equalsIgnoreCase("true")) { debugTelnetEnabled = true; configSave(); } - else if(strPayload.equalsIgnoreCase("false")) + else if (strPayload.equalsIgnoreCase("false")) { debugTelnetEnabled = false; configSave(); - } + } } else if (strTopic == (mqttCommandTopic + "/mdnsenabled") || strTopic == (mqttGroupCommandTopic + "/mdnsenabled")) - { // '[...]/device/command/mdnsenabled' -m 'true' == enable mDNS responder + { // '[...]/device/command/mdnsenabled' -m 'true' == enable mDNS responder if (strPayload.equalsIgnoreCase("true")) { mdnsEnabled = true; configSave(); } - else if(strPayload.equalsIgnoreCase("false")) + else if (strPayload.equalsIgnoreCase("false")) { mdnsEnabled = false; configSave(); - } + } } else if (strTopic == (mqttCommandTopic + "/beepenabled") || strTopic == (mqttGroupCommandTopic + "/beepenabled")) - { // '[...]/device/command/beepenabled' -m 'true' == enable beep output on keypress + { // '[...]/device/command/beepenabled' -m 'true' == enable beep output on keypress if (strPayload.equalsIgnoreCase("true")) { beepEnabled = true; configSave(); } - else if(strPayload.equalsIgnoreCase("false")) + else if (strPayload.equalsIgnoreCase("false")) { beepEnabled = false; configSave(); - } + } } else if (strTopic == (mqttCommandTopic + "/ignoretouchwhenoff") || strTopic == (mqttGroupCommandTopic + "/ignoretouchwhenoff")) - { // '[...]/device/command/ignoretouchwhenoff' -m 'true' == disable actions on keypress + { // '[...]/device/command/ignoretouchwhenoff' -m 'true' == disable actions on keypress if (strPayload.equalsIgnoreCase("true")) { ignoreTouchWhenOff = true; configSave(); } - else if(strPayload.equalsIgnoreCase("false")) + else if (strPayload.equalsIgnoreCase("false")) { ignoreTouchWhenOff = false; configSave(); - } + } } else if (strTopic == (mqttCommandTopic + "/lcdupdate") || strTopic == (mqttGroupCommandTopic + "/lcdupdate")) { // '[...]/device/command/lcdupdate' -m 'http://192.168.0.10/local/HASwitchPlate.tft' == nextionOtaStartDownload("http://192.168.0.10/local/HASwitchPlate.tft") @@ -1624,8 +1624,6 @@ void nextionParseJson(const String &strPayload) //////////////////////////////////////////////////////////////////////////////////////////////////// void nextionOtaStartDownload(const String &lcdOtaUrl) { // Upload firmware to the Nextion LCD via HTTP download - // based in large part on code posted by indev2 here: - // http://support.iteadstudio.com/support/discussions/topics/11000007686/page/2 uint32_t lcdOtaFileSize = 0; String lcdOtaNextionCmd; @@ -1967,12 +1965,14 @@ void espWifiConnect() nextionSendCmd("page 0"); } - WiFi.mode(WIFI_STA); // Set the radio to Station + WiFi.persistent(false); + enableWiFiAtBootTime(); WiFi.macAddress(espMac); // Read our MAC address and save it to espMac WiFi.hostname(haspNode); // Assign our hostname before connecting to WiFi WiFi.setAutoReconnect(true); // Tell WiFi to autoreconnect if connection has dropped WiFi.setSleepMode(WIFI_NONE_SLEEP); // Disable WiFi sleep modes to prevent occasional disconnects - + WiFi.mode(WIFI_STA); // Set the radio to Station + if (String(wifiSSID) == "") { // If the sketch has no hard-coded wifiSSID, attempt to use saved creds or use WiFiManager to collect required information from the user. @@ -1981,7 +1981,9 @@ void espWifiConnect() { nextionSetAttr("p[0].b[1].txt", "\"WiFi Connecting...\\r " + String(WiFi.SSID()) + "\""); unsigned long connectTimer = millis() + 10000; + debugPrintln(String(F("WIFI: Connecting to previously-saved SSID: ")) + String(WiFi.SSID())); + WiFi.begin(); while ((WiFi.status() != WL_CONNECTED) && (millis() < connectTimer)) { @@ -2004,13 +2006,19 @@ void espWifiConnect() { yield(); } + + if (WiFi.localIP().toString() == "(IP unset)") + { // Check if we have our IP yet + debugPrintln(F("WIFI: Failed to lease address from DHCP, disconnecting and trying again")); + WiFi.disconnect(); + } } } if (WiFi.status() != WL_CONNECTED) { // We gave it a shot, still couldn't connect, so let WiFiManager run to make one last // connection attempt and then flip to AP mode to collect credentials from the user. - + WiFi.persistent(true); WiFiManagerParameter custom_haspNodeHeader("
HASPone Node"); WiFiManagerParameter custom_haspNode("haspNode", "
Node Name (required: lowercase letters, numbers, and _ only)", haspNode, 15, " maxlength=15 required pattern='[a-z0-9_]*'"); WiFiManagerParameter custom_groupName("groupName", "Group Name (required)", groupName, 15, " maxlength=15 required"); @@ -2170,16 +2178,14 @@ void espSetupOta() debugPrintln(F("ESP OTA: update start")); nextionSetAttr("p[0].b[1].txt", "\"\\rHASPone update:\\r\\r\\r \""); nextionSendCmd("page 0"); - nextionSendCmd("vis 4,1"); - }); + nextionSendCmd("vis 4,1"); }); ArduinoOTA.onEnd([]() { debugPrintln(F("ESP OTA: update complete")); nextionSetAttr("p[0].b[1].txt", "\"\\rHASPone update:\\r\\r Complete!\\rRestarting.\""); nextionSendCmd("vis 4,1"); delay(1000); - espReset(); - }); + espReset(); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { nextionUpdateProgress(progress, total); }); ArduinoOTA.onError([](ota_error_t error) @@ -2198,8 +2204,7 @@ void espSetupOta() nextionSendCmd("vis 4,0"); nextionSetAttr("p[0].b[1].txt", "\"HASPone update:\\r FAILED\\rerror: " + String(error) + "\""); delay(1000); - nextionSendCmd("page " + String(nextionActivePage)); - }); + nextionSendCmd("page " + String(nextionActivePage)); }); ArduinoOTA.begin(); debugPrintln(F("ESP OTA: Over the Air firmware update ready")); } @@ -2579,7 +2584,7 @@ void webHandleNotFound() void webHandleRoot() { // http://plate01/ if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -2832,7 +2837,7 @@ void webHandleRoot() void webHandleSaveConfig() { // http://plate01/saveConfig if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3028,7 +3033,7 @@ void webHandleSaveConfig() void webHandleResetConfig() { // http://plate01/resetConfig if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3070,7 +3075,7 @@ void webHandleResetConfig() void webHandleResetBacklight() { // http://plate01/resetBacklight if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3101,7 +3106,7 @@ void webHandleResetBacklight() void webHandleFirmware() { // http://plate01/firmware if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3174,7 +3179,7 @@ void webHandleFirmware() void webHandleEspFirmware() { // http://plate01/espfirmware if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3209,7 +3214,7 @@ void webHandleLcdUpload() // Upload firmware to the Nextion LCD via HTTP upload if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3443,7 +3448,7 @@ void webHandleLcdUpload() void webHandleLcdUpdateSuccess() { // http://plate01/lcdOtaSuccess if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3471,7 +3476,7 @@ void webHandleLcdUpdateSuccess() void webHandleLcdUpdateFailure() { // http://plate01/lcdOtaFailure if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3499,7 +3504,7 @@ void webHandleLcdUpdateFailure() void webHandleLcdDownload() { // http://plate01/lcddownload if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3528,7 +3533,7 @@ void webHandleLcdDownload() void webHandleTftFileSize() { // http://plate01/tftFileSize if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); @@ -3548,7 +3553,7 @@ void webHandleTftFileSize() void webHandleReboot() { // http://plate01/reboot if (configPassword[0] != '\0') - { //Request HTTP auth if configPassword is set + { // Request HTTP auth if configPassword is set if (!webServer.authenticate(configUser, configPassword)) { return webServer.requestAuthentication(); diff --git a/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf b/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf index 025f597..90c021c 100644 Binary files a/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf and b/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf differ diff --git a/Arduino_Sketch/platformio.ini b/Arduino_Sketch/platformio.ini index d1dee3e..f4d9acc 100644 --- a/Arduino_Sketch/platformio.ini +++ b/Arduino_Sketch/platformio.ini @@ -18,8 +18,8 @@ build_flags = -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_191122 -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH lib_deps = + 256dpi/MQTT @ ^2.5.0 + dancol90/ESP8266Ping @ ^1.0 bblanchon/ArduinoJson @ ^6.19.4 - 256dpi/MQTT @ ^2.5.0 - dancol90/ESP8266Ping @ ^1.0 krzychb/EspSaveCrash @ ^1.3.0 - https://github.com/tzapu/WiFiManager.git#91826229cb8e80c24d49ee32a243220c77f55c08 \ No newline at end of file + https://github.com/tzapu/WiFiManager.git#14cf6b81d44252a58823e8e766bfad613ad7a061 ; 2.0.9-beta, confirmed working diff --git a/Nextion_HMI/HASwitchPlate-Discovery-Inverted.tft b/Nextion_HMI/HASwitchPlate-Discovery-Inverted.tft new file mode 100644 index 0000000..dd79e62 Binary files /dev/null and b/Nextion_HMI/HASwitchPlate-Discovery-Inverted.tft differ diff --git a/Nextion_HMI/README.md b/Nextion_HMI/README.md index aa9d8c9..39cb7f8 100644 --- a/Nextion_HMI/README.md +++ b/Nextion_HMI/README.md @@ -10,7 +10,9 @@ Please [check the Nextion HMI documentation](../Documentation/02_Nextion_HMI.md) * **[HASwitchPlate.hmi](HASwitchPlate.hmi)** This is the "source" file which you can modify in the [Nextion editor](https://nextion.itead.cc/resource/download/nextion-editor/). If you want to make your own Nextion HMI, I'd recommend starting with this file, keeping Page 0 (`p0`), then start your own design on pages 1+. * **[HASwitchPlate.tft](HASwitchPlate.tft)** This is the compiled Nextion firmware for the HASPone usable on a Basic series Nextion 2.4" LCD, model `NX3224T024_011R` +* **[HASwitchPlate-Inverted.tft](HASwitchPlate-Inverted.tft)** Basic series firmware but inverted, usable if the viewing angle on your display works better when mounted upside-down. * **[HASwitchPlate-Discovery.tft](HASwitchPlate-Discovery.tft)** This is the compiled Nextion firmware for the HASPone usable on a Discovery series Nextion 2.4" LCD, model `NX3224F024_011R`. This is a drop-in replacement for the Basic series, might be cheaper or more readily available than the Basic, and is fully supported by the HASPone project. +* **[HASwitchPlate-Discovery-Inverted.tft](HASwitchPlate-Discovery-Inverted.tft)** Discovery series firmware but inverted, usable if the viewing angle on your display works better when mounted upside-down. * **[HASwitchPlate-Enhanced.tft](HASwitchPlate-Enhanced.tft)** This is the compiled Nextion firmware for the HASPone usable on an enhanced Nextion 2.4" LCD, model `NX4024K032_011R`. This panel will not fit in the provided 3D printed enclosure and no enhanced features are used in this project. **Don't buy this panel**, but if you did (*and you shouldn't*), you can use this firmware. * **[HASwitchPlate-TJC.hmi](HASwitchPlate-TJC.hmi)** This is the "source" file for the Chinese-market TJC LCD model `TJC3224T024_011`. This file cannot be used with the english language editor. If you purchase this panel, you will need to use the Chinese-language "USART HMI" editor to modify this file. **Don't buy this panel**. -* **[HASwitchPlate-TJC.tft](HASwitchPlate-TJC.tft)** This is the compiled Nextion firmware for the HASPone usable on a Chinese market TJC 2.4" LCD, model `TJC3224T024_011`. +* **[HASwitchPlate-TJC.tft](HASwitchPlate-TJC.tft)** This is the compiled Nextion firmware for the HASPone usable on a Chinese market TJC 2.4" LCD, model `TJC3224T024_011`. \ No newline at end of file diff --git a/update/version.json b/update/version.json index 836a28a..573857e 100644 --- a/update/version.json +++ b/update/version.json @@ -1,6 +1,6 @@ { "d1_mini": { - "version": "1.05", + "version": "1.06", "firmware": "https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin" }, "NX3224T024_011R": {