Experimental, low-power MeshCore repeaters for solar and battery deployments.
This firmware is built from IoTThinks' PowerSaving-v17 MeshCore fork, with the power-saving work fully attributed in docs/EASYSKYMESH_ATTRIBUTION.md. It tracks MeshCore 1.17.1 and adds NeonPocketMC hardware profiles, default-on setup, a simpler ulp command, TFT support for RCC6/RC52, packaging, and a guided USB configurator.
Experimental. RX duty cycling saves power by intentionally spending part of each interval asleep. A ULP repeater can miss packets that a continuously listening repeater would receive. Test coverage and current draw at the actual deployment site before relying on it.
| Release build | Hardware | Display |
|---|---|---|
| Heltec V3 | WiFi LoRa 32 V3 / SX1262 | Built-in OLED |
| Heltec V4 | WiFi LoRa 32 V4 / SX1262 | Built-in OLED |
| RAK4631 | WisBlock Core RAK4631 / SX1262 | Optional SSD1306 |
| RAK3401 1W | RAK3401 + RAK13302/SKY66122 | Optional SSD1306 |
| Xiao ESP32-S3 | Seeed Xiao ESP32-S3 + supported SX1262 wiring | Headless |
| Xiao nRF52840 | Seeed Xiao nRF52840 + supported SX1262 wiring | Headless / null display |
| RCC6 Headless | Heltec RadioCore RCC6-L62 | TFT held off |
| RCC6 TFT | RCC6-L62 + NV3001B 220×128 | Indexed framebuffer; auto-off |
| RC52 Headless | Heltec RadioCore RC52-L62 | TFT held off |
| RC52 TFT | RC52-L62 + NV3001B 220×128 | Indexed framebuffer; auto-off |
Hardware warning: these boards do not all accept an unregulated solar panel. Use a protected battery and an external MPPT/solar charge controller matched to the panel and cell. Never connect a raw panel directly to VBAT or USB.
For a new installation, power saving is ON by default:
- MCU light sleep is enabled after the existing two-minute startup window on ESP32 and whenever idle on nRF52.
- SX1262 radio RX duty cycling starts in the balanced profile: level 5, preamble 16.
- GPS duty scheduling is automatic when a supported GPS is explicitly enabled; this firmware does not turn GPS on by default.
- TFT/OLED builds turn the display off after inactivity; LoRa continues operating.
- If radio duty-cycle arming fails, the IoTThinks implementation falls back to continuous receive and limits retries rather than leaving the radio deaf.
Saved preferences always win after an upgrade. A previously configured device is not silently forced back to balanced mode.
- Flash the build matching the exact board.
- Keep USB and the antenna connected.
- Download the release's
NeonPocketMC-ULP-Configurator.zip. - Windows: double-click
configure-ulp-windows.bat. - Linux: run
sh configure-ulp-linux.sh. - Pick the serial device, region, name, transmit power, map-location policy, admin password, and ULP profile.
The wizard verifies that it is talking to NeonPocket ULP firmware before changing anything.
ULP builds configure over USB and do not create a Wi-Fi access point or WebUI. Keep USB connected until the wizard reports success. If location sharing is enabled, the wizard explicitly sets gps advert prefs; choosing no sets gps advert none. A TFT may show BAT: -- on USB when RCC6 cannot produce a physically valid single-cell reading rather than displaying a false voltage.
Open the USB serial port at 115200 baud and end each command with Enter/CR:
ulp
ulp on
ulp conservative
ulp max
ulp off
ulporulp status: show MCU and radio state.ulp on/ulp balanced: recommended balanced profile.ulp conservative: more receive time, smaller savings.ulp max: highest duty cycling; may not hear older pre-1.16 transmitters.ulp off: continuous radio RX and no MCU sleep.
Advanced EasySkyMesh-compatible controls remain available through get radio.rxps, set radio.rxps ..., and powersaving ....
- Normal update: flash the
*-app.binat address0x10000. - Recovery only: flash
*-full-recovery.binat0x0. - The full image includes the bootloader, partition table, and app. It does not deliberately erase the separate MeshCore filesystem, but normal app-only flashing is the identity-preserving path.
- Never flash an image for another board.
- Enter the board's UF2 bootloader and copy the exact
.uf2for that board. - This is an application image; do not erase or replace the SoftDevice/bootloader.
.hexis provided for advanced recovery tools.
See docs/INSTALL.md for board-specific notes and docs/POWER_SAVING.md for the tradeoffs.
- NeonPocket ULP base: IoTThinks/MeshCore
PowerSaving-v17commita3b9ad91a5bf04e7e00713595469dc868de53628. - MeshCore upstream base: 1.17.1 commit
d92964352441e53b93e8667b802e04f6e072b39e. - EasySkyMesh reference release:
PowerSaving17.1. - All ten release environments are built by GitHub Actions and shipped with SHA-256 manifests.
This community project is not an official Heltec, RAKwireless, Seeed Studio, MeshCore, or EasySkyMesh release.
MIT, retaining all upstream notices. See license.txt and docs/EASYSKYMESH_ATTRIBUTION.md.
