Community fork of Mark Qvist's RNode firmware adding support for additional DIY hardware (MeshAdventurer-S3, MeshPoE-S3, Aethernode, and others), wired Ethernet support, OTA updates, an on-screen settings menu and much more.
  • C 57.8%
  • Python 19%
  • C++ 17.8%
  • Makefile 4.3%
  • CSS 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nickie Deuxyeux 2ad89f4040
All checks were successful
Build Firmware / compile (push) Successful in 55m12s
Turn NeoPixel off when display blanks, don't freeze the idle pulse
led_indicate_standby()'s white breathing pulse stopped being called
once the display blanked (guarded by LED_DISPLAY_BLANKED), which froze
the NeoPixel at whatever brightness it last had instead of turning it
off - draining the battery on nodes like the T114 where
LED_DISPLAY_BLANKED tracks display_blanked.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 23:03:54 +03:00
.claude/skills Add WebSocket KISS remote, runtime LoRa sync word control, fix promiscuous-mode packet loss 2026-07-22 19:29:30 +03:00
.forgejo/workflows Set run-name so runs display as "Build Firmware" consistently 2026-07-29 18:38:34 +03:00
.github/ISSUE_TEMPLATE Updated issue template 2025-01-05 16:06:37 +01:00
Builds/Handheld RNode Added build guide 2023-01-16 12:37:12 +01:00
Console Prepare release 2026-04-24 10:42:13 +02:00
Documentation Updated readme 2023-09-18 10:26:08 +02:00
Fonts Add settings menu with encoder input and sound toggle 2026-07-13 02:04:49 +03:00
Python Module Cleanup 2023-01-16 12:48:22 +01:00
Release Change interference threshold for Promicro 2026-05-01 15:11:51 +03:00
.gitignore Add GNSS support, I2C environment sensors, and GPS-based RTC sync 2026-07-27 11:50:45 +03:00
arduino-cli.yaml Move promicro mirror off git.rns.moscow, onto flasher.rns.moscow 2026-07-29 17:38:39 +03:00
BLESerial.cpp Add NimBLE/Bluedroid conditional compilation to BLE serial 2026-05-20 18:48:06 +03:00
BLESerial.h Add NimBLE/Bluedroid conditional compilation to BLE serial 2026-05-20 18:48:06 +03:00
Bluetooth.h Add RNode Settings menu to DIY-V1/MeshAdventurer, fix BT passkey flash 2026-08-04 15:23:43 +03:00
Boards.h Add encoder, buzzer, and GNSS support to MeshAdventurer 2026-08-05 00:34:41 +03:00
Config.h Enable WebSocket listener by default, fix resulting boot crash 2026-08-03 17:00:19 +03:00
Console.h Cleanup 2024-10-11 16:39:38 +02:00
Device.h Cleanup 2025-01-15 14:03:35 +01:00
Display.h Add hold-tier/encoder beeps, show build number on all displays, fix ProMicro sleep-wake 2026-08-03 19:37:39 +03:00
Encoder.h Add hold-tier/encoder beeps, show build number on all displays, fix ProMicro sleep-wake 2026-08-03 19:37:39 +03:00
esp32_btbufs.py Cleanup 2025-04-12 20:59:00 +02:00
ESPNOW.h Always report vport 0 over CMD_INTERFACES regardless of ESP-NOW state 2026-08-03 17:00:47 +03:00
Ethernet.h Fix WiFi/Ethernet DNS bug blocking NTP, add Timezone display offset, and a debug UART 2026-07-16 21:01:47 +03:00
Framing.h Add GNSS support, I2C environment sensors, and GPS-based RTC sync 2026-07-27 11:50:45 +03:00
GNSS.h Add T114 GPS status icon, GNSS module auto-detection, and menu layout polish 2026-07-27 14:31:42 +03:00
Graphics.h Add T114 color display redesign, Settings Menu port, and landscape mode 2026-07-24 00:57:00 +03:00
Input.h Added basic input driver 2024-05-02 01:13:26 +02:00
LICENSE Updated license to GPLv3 2022-11-10 12:34:33 +01:00
Makefile Bundle version.txt into rak4631/heltec_t114/heltec_t096/techo release zips too 2026-08-03 22:28:30 +03:00
MD5.cpp MD5 library 2018-06-20 08:45:36 +02:00
MD5.h MD5 library 2018-06-20 08:45:36 +02:00
Menu.h Add hold-tier/encoder beeps, show build number on all displays, fix ProMicro sleep-wake 2026-08-03 19:37:39 +03:00
MIRROR.md Updated readme 2025-12-28 01:07:31 +01:00
Modem.h Add SX1280 driver and split driver in three parts 2024-02-09 20:56:26 +00:00
OTA.h Fix OTA recovery-button ping-pong and stale firmware-hash on switch 2026-08-03 17:00:35 +03:00
partition_hashes Set firmware hashes on nRF 2025-01-13 11:37:29 +01:00
Power.h Add T114 color display redesign, Settings Menu port, and landscape mode 2026-07-24 00:57:00 +03:00
README.md Make the Encoder toggle actually gate encoder input 2026-07-14 04:06:58 +03:00
release_hashes.py Cleanup 2024-10-11 16:39:38 +02:00
Remote.h Add WebSocket KISS remote, runtime LoRa sync word control, fix promiscuous-mode packet loss 2026-07-22 19:29:30 +03:00
RNode_Firmware.ino Turn NeoPixel off when display blanks, don't freeze the idle pulse 2026-08-06 23:03:54 +03:00
ROM.h Add ESP-NOW v2/LR mode with reticulum-espnow interop, fix related bugs 2026-07-31 19:41:22 +03:00
RTC.h Add GNSS support, I2C environment sensors, and GPS-based RTC sync 2026-07-27 11:50:45 +03:00
Sensors.h Add GNSS support, I2C environment sensors, and GPS-based RTC sync 2026-07-27 11:50:45 +03:00
SplashT114.h Add T114 color display redesign, Settings Menu port, and landscape mode 2026-07-24 00:57:00 +03:00
ST7789.h Add getRotation() to ST7789Spi 2026-07-14 03:59:28 +03:00
sx126x.cpp Fix MeshPoE-S3 low TX power: RXen was blacking out the E22P's shared PA/LNA enable 2026-08-03 16:58:31 +03:00
sx126x.h Added Heltec V4.3 support/FEM autodetection 2026-04-26 10:29:28 +03:00
sx127x.cpp Add WebSocket KISS remote, runtime LoRa sync word control, fix promiscuous-mode packet loss 2026-07-22 19:29:30 +03:00
sx127x.h Add WebSocket KISS remote, runtime LoRa sync word control, fix promiscuous-mode packet loss 2026-07-22 19:29:30 +03:00
sx128x.cpp Add WebSocket KISS remote, runtime LoRa sync word control, fix promiscuous-mode packet loss 2026-07-22 19:29:30 +03:00
sx128x.h Add WebSocket KISS remote, runtime LoRa sync word control, fix promiscuous-mode packet loss 2026-07-22 19:29:30 +03:00
Utilities.h Fix MeshPoE-S3 low TX power: RXen was blacking out the E22P's shared PA/LNA enable 2026-08-03 16:58:31 +03:00
WebSocketRemote.h Enable WebSocket listener by default, fix resulting boot crash 2026-08-03 17:00:19 +03:00

RNode Firmware

This is a fork of RNode_Firmware by Mark Qvist

As Mark no longer accepts PRs and RNode_Firmware_CE is inactive, it was decided to make a private fork to fix issues and add additional hardware.
The fork contains several DIY devices by me and other developers and has a few small tweaks to the firmware like interference thresholds.


Added devices

RNode Settings Menu system

Boards with a display and a main button get an on-device settings menu, opened with a long-press (3s) of the main button:

  • Display Timeout - how long before the screen blanks
  • Brightness - OLED contrast/backlight level
  • Orientation - screen rotation
  • Sound - mutes the buzzer entirely (defaults off on boards where the buzzer is a DIY add-on most builds skip, e.g. ProMicro/FakeTec; on otherwise defaults on)
  • Encoder - on boards with encoder support built in (MeshAdventurer-S3, ProMicro/FakeTec), tells the menu whether a physical rotary encoder is actually populated, defaulting off since it's either a PCB-provisioned-but-optional part (MeshAdventurer-S3) or a DIY add-on (ProMicro/FakeTec) rather than something guaranteed present. Changes the on-screen footer hint (turn/press vs tap/hold) and actually gates the encoder's turn/press input - off ignores it entirely, so a board with no encoder wired up can't misread floating-pin noise as phantom input
  • WiFi - mode/SSID/PSK (ESP32 boards with WiFi only)
  • Hardware - read-only info: CPU temp (ESP32-S3 and nRF52 boards), input voltage, battery voltage, WiFi IP/netmask/MAC, Bluetooth MAC, depending on what the board actually has. Some boards also add a battery-scale recalibration field here, for boards without a real VSENSE divider (e.g. ProMicro/FakeTec)
  • Hardware > GPIO - on DIY boards where the builder solders peripherals to whichever spare pad they used (currently ProMicro/FakeTec), lets you reassign a peripheral - the buzzer, and the encoder's Up/Down/Press pins - to a different physical pin from a short list of genuinely free GPIOs. Refuses to assign the same pin to two peripherals at once. Takes effect on the next boot

Boards with encoder support (MeshAdventurer-S3, ProMicro/FakeTec) turn/click through the same menu as an alternate to the main button, once Encoder is turned on. The main button always works regardless: a short tap moves forward one step, a quick double-tap moves back, and a long press selects/confirms - the on-screen footer shows whichever scheme is currently active (button-only, or button+encoder once Encoder is on).

Changes are staged in RAM as you navigate and only written to EEPROM (with the matching device reboot where needed) when you commit and exit the menu, so browsing settings never triggers spurious reboots or writes. Navigation and button presses get short tick/click buzzer feedback (unless Sound is off).

Improvements

  • RNode Settings Menu system - see above
  • Heltec T114 LCD backlight powers off when screen blanks
  • LNA-equipped boards have interference detection threshold increased from 11 to 14dB
  • W5500 wired ethernet support with DHCP hostname
  • MeshPoE-S3 status display shows an ETH box reflecting the W5500 physical link state, plus a rotating Ethernet IP page
  • MeshAdventurer-S3 status display shows resistor-divider supply voltage, alternating with CPU temperature
  • Heltec T096 display redesigned for the full 80x160 panel with colour indicators and gamma-corrected backlight PWM dimming
  • Buzzer melodies for boot, Bluetooth pairing/connect, and RNS link-state changes, with a mute toggle
  • Updated to Arduino ESP32 core 3.3.8 (ESP-IDF v5.5.4) with NimBLE support
  • Added model for high-power 33dBm E22 modules
  • TXEN pin handling for SX126x modems
  • Fallback TX power raised from 17dBm to 20dBm