From 7a4255b2bb1fa9067cef56b352865889fd54c77d Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 10:34:06 +0700 Subject: [PATCH 1/4] Turn off LED bar and Display if brightness is 0%, fix #114 --- examples/OneOpenAir/OneOpenAir.ino | 13 ++++++-- src/AgOledDisplay.cpp | 48 ++++++++++++++++++++++++++++-- src/AgOledDisplay.h | 1 + 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 198bc0e..a865575 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -239,6 +239,9 @@ void setup() { if (ag->isOne()) { oledDisplay.setText("Warming Up", "Serial Number:", ag->deviceId().c_str()); delay(DISPLAY_DELAY_SHOW_CONTENT_MS); + + Serial.println("Display brightness: " + String(configuration.getDisplayBrightness())); + oledDisplay.setBrightness(configuration.getDisplayBrightness()); } appLedHandler(); @@ -443,8 +446,14 @@ static void wdgFeedUpdate(void) { static void ledBarEnabledUpdate(void) { if (ag->isOne()) { - ag->ledBar.setBrighness(configuration.getLedBarBrightness()); - ag->ledBar.setEnable(configuration.getLedBarMode() != LedBarModeOff); + int brightness = configuration.getLedBarBrightness(); + Serial.println("LED bar brightness: " + String(brightness)); + if ((brightness == 0) || (configuration.getLedBarMode() == LedBarModeOff)) { + ag->ledBar.setEnable(false); + } else { + ag->ledBar.setBrighness(brightness); + ag->ledBar.setEnable(configuration.getLedBarMode() != LedBarModeOff); + } } } diff --git a/src/AgOledDisplay.cpp b/src/AgOledDisplay.cpp index 1bee257..d5164e2 100644 --- a/src/AgOledDisplay.cpp +++ b/src/AgOledDisplay.cpp @@ -103,7 +103,12 @@ bool OledDisplay::begin(void) { return false; } - setBrightness(config.getDisplayBrightness()); + /** Show low brightness on startup. then it's completely turn off on main + * application */ + int brightness = config.getDisplayBrightness(); + if(brightness == 0) { + setBrightness(1); + } isBegin = true; logInfo("begin"); @@ -148,6 +153,10 @@ void OledDisplay::setText(String &line1, String &line2, String &line3) { */ void OledDisplay::setText(const char *line1, const char *line2, const char *line3) { + if (isDisplayOff) { + return; + } + DISP()->firstPage(); do { DISP()->setFont(u8g2_font_t0_16_tf); @@ -180,6 +189,10 @@ void OledDisplay::setText(String &line1, String &line2, String &line3, */ void OledDisplay::setText(const char *line1, const char *line2, const char *line3, const char *line4) { + if (isDisplayOff) { + return; + } + DISP()->firstPage(); do { DISP()->setFont(u8g2_font_t0_16_tf); @@ -201,6 +214,10 @@ void OledDisplay::showDashboard(void) { showDashboard(NULL); } * */ void OledDisplay::showDashboard(const char *status) { + if (isDisplayOff) { + return; + } + char strBuf[10]; DISP()->firstPage(); @@ -299,10 +316,25 @@ void OledDisplay::showDashboard(const char *status) { } void OledDisplay::setBrightness(int percent) { - DISP()->setContrast((127 * percent) / 100); + if (percent == 0) { + isDisplayOff = true; + + // Clear display. + DISP()->firstPage(); + do { + } while (DISP()->nextPage()); + + } else { + isDisplayOff = false; + DISP()->setContrast((127 * percent) / 100); + } } void OledDisplay::showNewFirmwareVersion(String version) { + if (isDisplayOff) { + return; + } + DISP()->firstPage(); do { DISP()->setFont(u8g2_font_t0_16_tf); @@ -313,6 +345,10 @@ void OledDisplay::showNewFirmwareVersion(String version) { } void OledDisplay::showNewFirmwareUpdating(String percent) { + if (isDisplayOff) { + return; + } + DISP()->firstPage(); do { DISP()->setFont(u8g2_font_t0_16_tf); @@ -322,6 +358,10 @@ void OledDisplay::showNewFirmwareUpdating(String percent) { } void OledDisplay::showNewFirmwareSuccess(String count) { + if (isDisplayOff) { + return; + } + DISP()->firstPage(); do { DISP()->setFont(u8g2_font_t0_16_tf); @@ -332,6 +372,10 @@ void OledDisplay::showNewFirmwareSuccess(String count) { } void OledDisplay::showNewFirmwareFailed(void) { + if (isDisplayOff) { + return; + } + DISP()->firstPage(); do { DISP()->setFont(u8g2_font_t0_16_tf); diff --git a/src/AgOledDisplay.h b/src/AgOledDisplay.h index 6770c38..9d06354 100644 --- a/src/AgOledDisplay.h +++ b/src/AgOledDisplay.h @@ -14,6 +14,7 @@ private: bool isBegin = false; void *u8g2 = NULL; Measurements &value; + bool isDisplayOff = false; void showTempHum(bool hasStatus); void setCentralText(int y, String text); From 22dc2136e4b2180dd4f94dcc3b3a73dbb1ff8a6c Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 11:18:08 +0700 Subject: [PATCH 2/4] Update watchdog reset message --- examples/OneOpenAir/OneOpenAir.ino | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index a865575..0514c5b 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -440,7 +440,7 @@ static void factoryConfigReset(void) { static void wdgFeedUpdate(void) { ag->watchdog.reset(); Serial.println(); - Serial.println("External watchdog feed"); + Serial.println("Offline mode or isPostToAirGradient = false: watchdog reset"); Serial.println(); } @@ -584,11 +584,6 @@ static void sendDataToAg() { stateMachine.handleLeds(AgStateMachineNormal); } -/** - * @brief Must reset each 5min to avoid ESP32 reset - */ -static void resetWatchdog() { ag->watchdog.reset(); } - void dispSensorNotFound(String ss) { ss = ss + " not found"; oledDisplay.setText("Sensor init", "Error:", ss.c_str()); @@ -1101,10 +1096,19 @@ static void updatePm(void) { } static void sendDataToServer(void) { + /** Ignore send data to server if postToAirGradient disabled */ + if (configuration.isPostDataToAirGradient() == false) { + return; + } + String syncData = measurements.toString(false, fwMode, wifiConnector.RSSI(), ag, &configuration); if (apiClient.postToServer(syncData)) { - resetWatchdog(); + ag->watchdog.reset(); + Serial.println(); + Serial.println( + "Online mode and isPostToAirGradient = true: watchdog reset"); + Serial.println(); } measurements.bootCount++; From a6d8936ea61fd38d5bc5acaa0446284d1e847c90 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 11:47:37 +0700 Subject: [PATCH 3/4] Fix factory reset failed, the configuration not set to default. #112 --- examples/OneOpenAir/OneOpenAir.ino | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 0514c5b..f458d6e 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -402,9 +402,8 @@ static void factoryConfigReset(void) { mqttTask = NULL; } - /** Disconnect WIFI */ - wifiConnector.disconnect(); - wifiConnector.reset(); + /** Reset WIFI */ + WiFi.disconnect(true, true); /** Reset local config */ configuration.reset(); From 1b69e8a599014f6a08f0f718387cb117df6222f7 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 12:02:17 +0700 Subject: [PATCH 4/4] Offline mode should not shown status on display. #111 --- examples/OneOpenAir/OneOpenAir.ino | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index f458d6e..876d667 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -874,14 +874,17 @@ static void appLedHandler(void) { static void appDispHandler(void) { if (ag->isOne()) { AgStateMachineState state = AgStateMachineNormal; - if (wifiConnector.isConnected() == false) { - state = AgStateMachineWiFiLost; - } else if (apiClient.isFetchConfigureFailed()) { - state = AgStateMachineSensorConfigFailed; - } else if (apiClient.isPostToServerFailed()) { - state = AgStateMachineServerLost; - } + /** Only show display status on online mode. */ + if (configuration.isOfflineMode() == false) { + if (wifiConnector.isConnected() == false) { + state = AgStateMachineWiFiLost; + } else if (apiClient.isFetchConfigureFailed()) { + state = AgStateMachineSensorConfigFailed; + } else if (apiClient.isPostToServerFailed()) { + state = AgStateMachineServerLost; + } + } stateMachine.displayHandle(state); } }