From c0a51aff66ee53949e6a499d270cd00e6809dab7 Mon Sep 17 00:00:00 2001 From: Tomas P <128642216+tpp-at-idx@users.noreply.github.com> Date: Fri, 7 Nov 2025 09:47:18 +0100 Subject: [PATCH 1/3] change ADC_MULTIPLIER to better reflect battery voltage --- variants/thinknode_m2/variant.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/variants/thinknode_m2/variant.h b/variants/thinknode_m2/variant.h index 928f56ec0..223bfbb56 100644 --- a/variants/thinknode_m2/variant.h +++ b/variants/thinknode_m2/variant.h @@ -1,8 +1,8 @@ #define I2C_SCL 15 #define I2C_SDA 16 -#define PIN_VBAT_READ 17 +#define PIN_VBAT_READ 17 #define AREF_VOLTAGE (3.0) -#define ADC_MULTIPLIER (1.548F) +#define ADC_MULTIPLIER (1.509F) #define PIN_BUZZER 5 #define PIN_VEXT_EN_ACTIVE HIGH #define PIN_VEXT_EN 46 @@ -10,6 +10,3 @@ #define PIN_LED 6 #define PIN_STATUS_LED 6 #define PIN_PWRBTN 4 - - - From 429f82106bbb16a353d0aa5e86be8fbf18aa2972 Mon Sep 17 00:00:00 2001 From: Tomas P <128642216+tpp-at-idx@users.noreply.github.com> Date: Fri, 7 Nov 2025 09:48:57 +0100 Subject: [PATCH 2/3] tweak getBattMilliVolts to report battery more accurately --- variants/thinknode_m2/ThinknodeM2Board.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/variants/thinknode_m2/ThinknodeM2Board.cpp b/variants/thinknode_m2/ThinknodeM2Board.cpp index 3a2f067e2..332f1f670 100644 --- a/variants/thinknode_m2/ThinknodeM2Board.cpp +++ b/variants/thinknode_m2/ThinknodeM2Board.cpp @@ -19,14 +19,21 @@ void ThinknodeM2Board::begin() { enterDeepSleep(0); } - uint16_t ThinknodeM2Board::getBattMilliVolts() { + uint16_t ThinknodeM2Board::getBattMilliVolts() { analogReadResolution(12); - delay(10); - float volts = (analogRead(PIN_VBAT_READ) * ADC_MULTIPLIER * AREF_VOLTAGE) / 4096; - analogReadResolution(10); - return volts * 1000; - } + analogSetPinAttenuation(PIN_VBAT_READ, ADC_11db); + + uint32_t mv = 0; + for (int i = 0; i < 8; ++i) { + mv += analogReadMilliVolts(PIN_VBAT_READ); + delayMicroseconds(200); + } + mv /= 8; + + analogReadResolution(10); + return static_cast(mv * ADC_MULTIPLIER ); +} const char* ThinknodeM2Board::getManufacturerName() const { return "Elecrow ThinkNode M2"; - } \ No newline at end of file + } From a0bf66f9d83dbe75353d665de827f503d533c600 Mon Sep 17 00:00:00 2001 From: Tomas P <128642216+tpp-at-idx@users.noreply.github.com> Date: Fri, 7 Nov 2025 09:50:21 +0100 Subject: [PATCH 3/3] Fix for display not coming on after poweron --- variants/thinknode_m2/ThinknodeM2Board.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/variants/thinknode_m2/ThinknodeM2Board.cpp b/variants/thinknode_m2/ThinknodeM2Board.cpp index 332f1f670..059651036 100644 --- a/variants/thinknode_m2/ThinknodeM2Board.cpp +++ b/variants/thinknode_m2/ThinknodeM2Board.cpp @@ -3,12 +3,13 @@ void ThinknodeM2Board::begin() { + pinMode(PIN_VEXT_EN, OUTPUT); + digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); // force power cycle + delay(20); // allow power rail to discharge + digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // turn backlight back on + delay(120); // give display time to bias on cold boot ESP32Board::begin(); - pinMode(PIN_VEXT_EN, OUTPUT); // init display - digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // pin needs to be high - delay(10); - digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // need to do this twice. do not know why.. - pinMode(PIN_STATUS_LED, OUTPUT); // init power led + pinMode(PIN_STATUS_LED, OUTPUT); // init power led } void ThinknodeM2Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {