Skip to content

Instantly share code, notes, and snippets.

@Tech500
Last active July 29, 2026 23:47
Show Gist options
  • Select an option

  • Save Tech500/f267db0f789fa01745ae0efaefb9149b to your computer and use it in GitHub Desktop.

Select an option

Save Tech500/f267db0f789fa01745ae0efaefb9149b to your computer and use it in GitHub Desktop.
Hackster.io doc for HSM IV

Heating System Monitor IV — Ultra‑Low‑Power LoRa WOR + ESP‑NOW Heating System Telemetry Using EoRa‑S3‑900TB (“EoRa Pi”) and ESP-NOW Blower Node ESP32-S3

Heating System Monitor IV is a three‑node, event‑driven, ultra‑low‑power monitoring system that uses LoRa Wake‑On‑Radio (WOR), ESP‑NOW, deep sleep, and cloud logging to Google Sheets. The Outside Node sleeps at ~14.59 µA Baseline, waking only when the Receiver Hub triggers a LoRa WOR event. All blower cycles, sensor readings, and runtime statistics are logged month‑to‑month and year‑to‑year in a perpetual Google Sheet.

This project demonstrates professional‑grade low‑power design using the EoRa‑S3‑900TB (“EoRa Pi”) and Nordic PPK2 power profiling.

1. Project Overview

Heating System Monitor IV consists of three cooperating nodes:

  • Blower Node (ESP32-S3) Detects blower ON/OFF using an MPU6050 vibration sensor and sends ESP‑NOW packets.
  • Receiver Hub (EoRa Pi) Receives blower updates via ESP‑NOW, triggers LoRa WOR wake packets, merges data, and logs everything to Google Sheets.
  • Outside Node (EoRa Pi) Baseline is at ~14.59 µA, wakes on LoRa WOR, reads BME280, sends ESP‑NOW to the Hub, then returns to deep sleep.

This architecture eliminates periodic wakeups entirely. The system wakes only when the blower changes state.

2. Hardware Platform — EoRa‑S3‑900TB (“EoRa Pi”)

The EoRa Pi is a fully integrated ESP32‑S3 + SX1262 LoRa development board featuring:

  • ESP32‑S3 MCU
  • SX1262 LoRa radio
  • OLED display
  • microSD slot
  • Li‑ion charger
  • Dual LDOs
  • JST battery connector
  • USB‑C
  • Full GPIO breakout
  • Under $20 USD
  • Ships from EbyteIoT.com (~13 days to US)

Despite being a full dev board, it achieves ~25 µA Deep Sleep current when:

  • No USB
  • Perperials are off
  • Battery LDO is active

This makes it ideal for long‑life battery operation.

**3. Schematic Section **

Schmatics for the Heating System Monitor IV three ESP-NOW Nodes

4. Pin Mapping Challenges — No Silkscreen, OEM Documentation Required

The EoRa Pi has no silkscreen labels, and physical pin numbers do not always correspond to ESP32‑S3 GPIO numbers.

Key implications:

  • OEM pin‑mapping diagram is mandatory
  • Several RTC‑IO pins are not exposed
  • Some RTC‑IO pins are internally wired to SX1262
  • Some RTC‑IO pins are RTC‑capable but not RTC‑wake‑capable
  • DIO1 was wired to a non‑wake‑capable pin (GPIO33)

Correct pin verification is essential.

EoRa Pi User Manual

5. SX1262 DIO1 Routing — Why Rerouting Was Required

Factory wiring connects SX1262 DIO1 to GPIO33.

However:

  • GPIO33 is not RTC‑wake‑capable
  • It cannot be used with EXT0 or EXT1
  • WOR wakes the SX1262 internally
  • But the ESP32‑S3 remains asleep

To enable LoRa WOR wake, DIO1 must be rerouted to a true RTC‑wake‑capable GPIO (GPIO15).

This reroute is what makes WOR wake functional.

6. Deep‑Sleep + WOR Architecture

Sleep State

  • ESP32‑S3 deep sleep
  • SX1262 radio.sleep() (~2–3 µA)
  • Board draws ~25 µA total

Wake Path

  1. Blower is OFF; sent to Receiver Hub
  2. Receiver Hub sends LoRa WOR packet
  3. SX1262 detects WOR preamble
  4. SX1262 asserts DIO1
  5. DIO1 triggers ESP32‑S3 EXT0 wake
  6. Node wakes, reads BME280
  7. Node sends ESP‑NOW packet
  8. Node returns to deep sleep

This eliminates periodic wakeups entirely.

7. Duty‑Cycle Optimization (Short‑Range LoRa)

Because the LoRa link is short (~20 ft):

  • TX power minimized
  • WOR preamble shortened
  • RX windows narrowed
  • SX1262 sleeps between WOR windows
  • ESP32‑S3 sleeps until DIO1 wake

This is professional‑grade low‑power tuning.

**8. Nordic PPK2 Power Profiling **

Outside Node – Nordic Power Profiler Kit 2 Measurements

This page documents the four PPK2 captures taken from the EoRa‑S3‑900TB outside node.
Each image shows a different operating mode of the ESP32‑S3 + SX1262 system.


1. ESP32S3 + SX1262 DeepSleep Baseline (14.59 µA)

The node is fully asleep:

  • ESP32‑S3 in deep sleep
  • SX1262 in sleep
  • All peripherals off

2. SX1262 Auto Duty Cycle RX Window (~14 mA Peak)

Captured during radio.startReceiveDutyCycleAuto():

  • SX1262 wakes
  • RX window opens
  • Radio returns to sleep

Auto RX Window


3. Full Receive Duty Cycle Sequence

Sleep → Auto RX Window → Sleep

A complete scheduled receive cycle:

  • ESP32‑S3 wakes
  • SX1262 performs RX window
  • Node returns to baseline

Duty Cycle Sequence


4. EoRa-S3-900TB Full Wake + Radio Activity Cycle (ESP32S3 + SX1262)

This is the node’s full active period:

  • ESP32‑S3 wake
  • SX1262 activity
  • Peripherals/LDOs active
  • Return to deep sleep

Peak ≈ 98 mA
Average ≈ 25–26 mA

Full Wake Cycle


Notes

  • All captures taken at 100 ksps
  • PPK2 connected directly to the EoRa‑S3‑900TB DUT rail
  • These measurements demonstrate real, reproducible behavior for the open‑source community

The Nordic PPK2 was used in Ampere Mode:

  • PPK2 VOUT → JST Positive battery connector (RED)

  • PPK2 GND → JST Ground Batteryground connector (BLACK)

  • PPK2 VIN → Battery Positive (RED)

  • PPK2 GND → EoRa-S3-900TB Ground (BLACK)

  • Do not use 3.3V as external power input --prohibited!

Screenshots and annotations will be added after measurements.

9. Serial Output — Outside Node & Receiver Hub

Outside Node (LoRa WOR → BME280 → ESP‑NOW → Deep Sleep)

Code
*** REACHED SETUP ***
SX1262 -> STANDBY
SX1262 -> WOR re-armed

BME280 => Temp: 74.62 F Hum: 55.23 % Pres: 979.4258 hPa

ESP-NOW -> Packet sent to Receiver Hub
Delivery Status: OK

PREPARING FOR DEEP SLEEP
SX1262 -> radio.sleep()
ESP32-S3 -> deep sleep (~25 µA)

Receiver Hub (ESP‑NOW → LoRa WOR → Google Sheets Logging)

Code
[LoRa] WOR sent OK

[Radio Link] BME280 Update ->
Temp: 72.43 F Hum: 70.3% Pres: 20.7627 inHg

[HTTP] Status Code: 200
[HTTP] Response: [07/21/2026 13:45:48]

[Radio Link] Blower Update Caught ->
State: OFF
Elapsed: 8.02 min
Daily(blower-side): 113.53 min

These logs validate the entire architecture.

10. Google Sheets Logging — Month‑to‑Month and Year‑to‑Year Archival

Heating System Monitor IV logs every event into a Google Sheet that automatically grows over time:

  • June 2026 tab
  • July 2026 tab
  • Future months added automatically
  • Year‑to‑year continuity preserved
  • No gaps
  • No manual intervention

Live Google Sheet

Real‑time view of blower cycles, sensor readings, and runtime statistics

Calibration Note

Current screenshot shows uncalibrated temperatures. Final calibrated screenshot will be added later.

11. Power Management — Why “Offline” Appeared in Early Logs

Early versions used a USB power bank. Because the node sleeps at ~25 µA, the power bank auto‑shut off due to low load, causing “Offline” entries.

Power Bank Tip (Used During ESP‑NOW Development)

Plug a mini USB LED light into the power bank. The LED provides a small steady load, preventing shutdown.

Current Status

The system now runs on a Li‑ion battery through the EoRa Pi’s LDO. No more “Offline” entries.

12. Battery Choice — MakerFocus 3,000 mAh LiPo

The Outside Node uses a MakerFocus 3,000 mAh LiPo.

Because the node Baseline is 14.59 µAA:

Battery self‑discharge exceeds project current draw.

Li‑ion self‑discharge (2–5% per month) dominates the runtime budget.

Despite this, the MakerFocus pack is ideal for:

  • WOR wake spikes
  • ESP‑NOW bursts
  • Stable voltage
  • Long‑term deployment

13. Battery Life Projection (Pending PPK2 Measurements)

Battery‑life projection will be added after Nordic PPK2 observations.

PPK2 will provide:

  • True deep‑sleep current
  • WOR spike profile
  • ESP‑NOW burst current
  • Average daily consumption
  • Return‑to‑sleep curve

This allows realistic runtime calculation.

14. Conclusion

Heating System Monitor IV demonstrates:

  • Event‑driven LoRa WOR wake
  • ESP‑NOW signaling
  • Ultra‑low‑power deep sleep (~25 µA)
  • Correct DIO1 rerouting
  • Month‑to‑month and year‑to‑year cloud logging
  • Nordic PPK2 power profiling
  • Professional‑grade architecture using inexpensive hardware
  • Real serial logs proving end‑to‑end operation
  • Practical power‑management lessons learned

This project shows how careful engineering can turn a $20 board into a highly efficient, long‑life sensor node.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment