From e15503d50d07fbceca16234078596669f0477820 Mon Sep 17 00:00:00 2001 From: Quency-D Date: Mon, 2 Feb 2026 14:19:42 +0800 Subject: [PATCH 1/2] Fix low power consumption issues --- src/helpers/ui/SSD1306Display.cpp | 12 +++++++++--- variants/heltec_v4/platformio.ini | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/helpers/ui/SSD1306Display.cpp b/src/helpers/ui/SSD1306Display.cpp index 4e7fd10ad..f585feb07 100644 --- a/src/helpers/ui/SSD1306Display.cpp +++ b/src/helpers/ui/SSD1306Display.cpp @@ -18,17 +18,23 @@ bool SSD1306Display::begin() { } void SSD1306Display::turnOn() { - display.ssd1306_command(SSD1306_DISPLAYON); if (!_isOn) { - if (_peripher_power) _peripher_power->claim(); + if (_peripher_power) { + _peripher_power->claim(); + begin(); + } _isOn = true; } + display.ssd1306_command(SSD1306_DISPLAYON); } void SSD1306Display::turnOff() { display.ssd1306_command(SSD1306_DISPLAYOFF); if (_isOn) { - if (_peripher_power) _peripher_power->release(); + if (_peripher_power) { + if (PIN_OLED_RESET >= 0) digitalWrite(PIN_OLED_RESET, LOW); + _peripher_power->release(); + } _isOn = false; } } diff --git a/variants/heltec_v4/platformio.ini b/variants/heltec_v4/platformio.ini index ba7590094..fe971f065 100644 --- a/variants/heltec_v4/platformio.ini +++ b/variants/heltec_v4/platformio.ini @@ -52,6 +52,7 @@ build_flags = -D HELTEC_LORA_V4_OLED -D PIN_BOARD_SDA=17 -D PIN_BOARD_SCL=18 + -D PIN_OLED_RESET=21 -D ENV_PIN_SDA=4 -D ENV_PIN_SCL=3 build_src_filter= ${Heltec_lora32_v4.build_src_filter} From 0b1fd580f12c1d16538ea0648efbe3cb7b7ebafc Mon Sep 17 00:00:00 2001 From: Wessel Nieboer Date: Fri, 6 Feb 2026 11:35:05 +0100 Subject: [PATCH 2/2] Fix double claim, eliminate dead code at compile time --- src/helpers/ui/SSD1306Display.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/helpers/ui/SSD1306Display.cpp b/src/helpers/ui/SSD1306Display.cpp index f585feb07..464b2642a 100644 --- a/src/helpers/ui/SSD1306Display.cpp +++ b/src/helpers/ui/SSD1306Display.cpp @@ -19,11 +19,9 @@ bool SSD1306Display::begin() { void SSD1306Display::turnOn() { if (!_isOn) { - if (_peripher_power) { - _peripher_power->claim(); - begin(); - } - _isOn = true; + if (_peripher_power) _peripher_power->claim(); + _isOn = true; // set before begin() to prevent double claim + if (_peripher_power) begin(); // re-init display after power was cut } display.ssd1306_command(SSD1306_DISPLAYON); } @@ -32,7 +30,9 @@ void SSD1306Display::turnOff() { display.ssd1306_command(SSD1306_DISPLAYOFF); if (_isOn) { if (_peripher_power) { - if (PIN_OLED_RESET >= 0) digitalWrite(PIN_OLED_RESET, LOW); +#if PIN_OLED_RESET >= 0 + digitalWrite(PIN_OLED_RESET, LOW); +#endif _peripher_power->release(); } _isOn = false;