Skip to content

Releases: openhop-dev/openhop_modem

v1.0.1 - Factory Images, Release Packages, and Radio Reliability Improvements

Choose a tag to compare

@yellowcooln yellowcooln released this 23 Jul 00:23
b29d159

This release improves radio diagnostics and reliability, corrects board-specific display and bootloader configurations, and expands firmware distribution with complete factory images and per-variant GitHub Release packages.

Highlights

  • Updated all 16 firmware variants to v1.0.1.
  • Added complete firmware.factory.bin images for all 13 ESP32-family targets.
  • Added UF2 firmware files for all three nRF52 targets.
  • Added automatic GitHub Release packaging with one ZIP per firmware variant.
  • Corrected the Station G2/G3 OLED controller and driver.
  • Corrected the XIAO nRF52 Wio SoftDevice and application layout.
  • Improved Heltec SX126x current-limit handling and TX-power diagnostics.
  • No wire-protocol changes were introduced.

Radio and TX-Power Improvements

The SX126x current limit is now set to 140 mA on:

  • Heltec V3
  • Heltec V4
  • Heltec V4.2
  • Heltec V4.3

Additional diagnostic logging now reports:

  • Requested TX power
  • Applied TX power
  • Board power ceiling
  • setOutputPower() result
  • SX126x over-current protection values before and after configuration

Received SET_CONFIG commands also log the requested:

  • Frequency
  • Bandwidth
  • Spreading factor
  • Coding rate
  • TX power
  • Sync word
  • Preamble length

Station G2/G3 Display Fix

The Station G2/G3 onboard display was incorrectly configured as an SH1107.

This release:

  • Corrects the controller to SH1106
  • Switches the implementation to Adafruit_SH1106G
  • Restores accurate display documentation

XIAO nRF52 Wio Bootloader Compatibility

The XIAO nRF52 Wio firmware now uses the correct S140 7.3.0 bootloader layout.

Changes include:

  • SoftDevice updated from S140 6.1.1 to S140 7.3.0
  • SoftDevice FWID updated from 0x00B6 to 0x0123
  • Added a dedicated S140 v7 linker script
  • Application origin moved to 0x27000
  • Maximum application size updated for the new layout
  • Regenerated HEX, DFU ZIP, and UF2 artifacts

Important: XIAO nRF52 Wio users must install a compatible Adafruit nRF52 bootloader using S140 7.3.0 before flashing this firmware.

Complete ESP32 Factory Images

Every ESP32-family firmware directory now includes:

  • firmware.factory.bin
  • firmware.bin
  • bootloader.bin
  • partitions.bin
  • SHA256SUMS.txt
  • manifest.json where supported

Which File Should I Use?

Use firmware.factory.bin at address 0x0 for:

  • First-time installation
  • Recovery
  • Replacing a damaged or incompatible bootloader/partition layout

Use firmware.bin at address 0x10000 for:

  • Compatible app-only USB updates
  • Web UI OTA updates
  • curl OTA updates

The factory image contains the bootloader, partition table, OTA initialization data, and application at the correct offsets for each board.

ESP32-P4 targets retain their required layout:

Bootloader:       0x2000
Partition table:  0x8000
OTA initialization: 0xe000
Application:      0x10000

The asset builder now removes stale factory output before incremental builds, preventing an older firmware.factory.bin from being packaged with a newer application.

nRF52 Firmware Formats

All three nRF52 targets now include:

  • firmware.hex
  • firmware.zip for Adafruit serial DFU
  • firmware.uf2
  • SHA256SUMS.txt

Affected targets:

  • Heltec T114
  • XIAO nRF52 Wio
  • RAK4631 WisMesh Ethernet

Build and Asset Tooling

  • Added deterministic per-variant ZIP generation.
  • Added validation of tracked firmware checksums before packaging.
  • Added release-level checksums for all variant ZIPs.
  • Added UF2 generation to the canonical nRF52 asset builder.
  • Consolidated the legacy all-environment release script around the canonical asset builder.
  • Marked BIN and Intel HEX files as binary in Git.
  • Updated installation and flashing documentation.

Updating an Existing ESP32 Device

Download the correct firmware.bin for your board from:

https://github.com/openhop-dev/openhop_modem/tree/main/firmware

You can then install it using the modem Web UI or curl.

Web UI

  1. Log in to the modem Web UI.
  2. Open the OTA update section.
  3. Select the correct firmware.bin.
  4. Start the update and wait for the modem to reboot.

curl

curl --user <username>:<password> \
  -F "firmware=@firmware.bin" \
  http://<modem-ip>/update

Use firmware.factory.bin instead when performing a complete USB installation or recovery.

Verification

  • All 16 PlatformIO environments built successfully.
  • All compiled firmware reports v1.0.1.
  • All 16 firmware checksum sets verified.
  • All 11 applicable web-flasher manifests verified.
  • All 13 ESP32 factory-image layouts verified.
  • ESP32-P4 bootloaders confirmed at 0x2000.
  • All 16 per-variant release ZIPs generated and verified.
  • Release-level ZIP checksum manifest verified.
  • No wire-protocol changes were introduced.

What's Changed

New Contributors

Full Changelog: v1.0.0...v1.0.1

v1.0.0 – New Hardware, Automated Firmware, and openHop Rebrand

Choose a tag to compare

@yellowcooln yellowcooln released this 26 Jun 16:12
02032e0

This is the first major release of openHop Modem, bringing expanded hardware support, automated firmware distribution, improved board-specific features, and the completion of the openHop rebrand.

Building on the v0.8.x modem platform, v1.0.0 doubles the number of supported firmware targets, introduces automated firmware asset generation, expands Ethernet deployments, and adds GPS, battery, RF front-end, and board-specific management features—all while maintaining wire-protocol compatibility with existing Repeater deployments.

Highlights

  • Rebranded from pyMC Modem to openHop Modem.
  • Expanded support from 8 to 16 firmware targets.
  • Added browser-flasher-ready firmware assets and automated firmware publishing.
  • Added Ethernet-capable modem targets.
  • Added board-specific GPS, battery, RF, and Wi-Fi controls.
  • Maintained compatibility with existing v0.8.x serial and TCP modem clients.

New Hardware Support

New supported targets include:

  • Heltec WiFi LoRa 32 V4
  • Heltec WiFi LoRa 32 V4.2
  • Heltec WiFi LoRa 32 V4.3
  • Heltec Wireless Tracker V2
  • MeshSmith Photon-1W XIAO ESP32-C6
  • B&Q Consulting Station G2
  • RAK4631 WisMesh Ethernet
  • MeshSmith EtherMesh-1W

The project now supports 16 firmware environments spanning ESP32, ESP32-P4, and nRF52 platforms.

Firmware Asset Automation

v1.0 introduces a fully automated firmware publishing pipeline.

New features include:

  • Automatic firmware builds from main
  • Browser-flasher-ready firmware packages
  • ESP32 manifests, bootloaders, partitions, and firmware images
  • nRF52 HEX and DFU packages
  • SHA256 checksum generation
  • Manual and selective firmware builds
  • Automatic asset-update pull requests

Ethernet Support

Ethernet deployments have been significantly expanded.

New support includes:

  • RAK4631 WisMesh Ethernet (W5100S)
  • MeshSmith EtherMesh-1W
  • Improved ESP32-P4 Ethernet support
  • Updated documentation for wired modem deployments

Board Improvements

Photon-1W

  • GPS support
  • Battery fuel-gauge telemetry
  • Wi-Fi antenna switching
  • Persistent GPS enable/disable
  • TCP modem diagnostics
  • Improved recovery when radio initialization fails

Heltec V4 Family

  • Dedicated V4, V4.2, and V4.3 support
  • Battery monitoring
  • GPS connector support
  • RF front-end controls
  • External FEM/LNA controls
  • AGC reset configuration
  • Improved transmit behavior

Additional Boards

  • Heltec Wireless Tracker V2 support
  • Station G2 support with SH1107 display
  • Updated RAK4631 Ethernet implementation
  • Improved nRF52 compatibility
  • Updated T114 GPS configuration

Web UI Improvements

  • Generic Wi-Fi setup reset controls
  • Additional board-specific configuration options
  • Improved recovery when radio initialization fails
  • Continued HTTP Basic Authentication support
  • Updated configuration portal experience

Documentation & Branding

  • Completed the openHop rebrand throughout the project.
  • Updated installation and deployment documentation.
  • Added browser flashing guidance.
  • Removed legacy modem side-loading instructions.
  • Clarified built-in Repeater modem support.
  • Updated networking and board documentation.

Fixes

  • Improved TCP CRC handling
  • Fixed RAK4631 Ethernet configuration
  • Fixed Photon radio pin mapping
  • Fixed Photon fuel-gauge I²C handling
  • Fixed Heltec V4 GPS configuration
  • Fixed RSSI sampling
  • Fixed firmware asset workflow permissions
  • Numerous board-specific compatibility improvements

Upgrade Notes

  • Existing v0.8.x Repeater deployments remain compatible.
  • The modem wire protocol is unchanged.
  • ESP32 boards continue to support Web UI and OTA where available.
  • Ethernet-only targets may not provide the Web UI and should be configured as documented.
  • Fresh network firmware continues to default to an empty TCP token until configured.

This release establishes openHop Modem as the primary firmware platform for the openHop ecosystem, with significantly broader hardware support, automated firmware delivery, and a stable foundation for future board additions.

Updating Existing Devices

Existing openHop Modem installations can be upgraded using the built-in OTA update mechanism.

Step 1: Download the Firmware

Download the appropriate firmware.bin for your board from:

https://github.com/openhop-dev/openhop_modem/tree/main/firmware

Step 2: Install the Update

You can install the new firmware using either method below.

Option 1: Web UI (Recommended)

  1. Log in to the modem web interface.
  2. Navigate to OTA Update.
  3. Select the downloaded firmware.bin.
  4. Start the update and wait for the modem to reboot.

Option 2: OTA via curl

Upload the firmware directly to the modem:

curl --user <username>:<password> \
  -F "firmware=@firmware.bin" \
  http://<modem-ip>/update

Replace:

  • <username> with your web UI username
  • <password> with your web UI password
  • <modem-ip> with the modem's IP address

The modem will automatically reboot after the update completes.

Note: OTA updates require a board that supports the HTTP/Web UI firmware updater. Boards without the HTTP interface must be updated using their normal flashing method (USB, DFU, etc.).

What's Changed

New Contributors

Full Changelog: v0.8.0...v1.0.0

v0.8.0 — HTTP management surface + JSON API

Choose a tag to compare

@itk80 itk80 released this 20 May 19:02

What's new in v0.8.0

HTTP management surface + JSON API

PR #1 (yellowcooln) lands a usable web management UI on top of the
existing OTA endpoint, plus a machine-readable JSON API. Wire
protocol unchanged
(still v0.7) — drivers and pymc_core/pymc_Repeater
clients work against v0.8 firmware without changes.

  • HTTP Basic Auth on every web/API/OTA path. Default admin / password, changeable from the UI, persisted in NVS under http_pass.
  • Persistent configurable hostname (blank = MAC-derived fallback).
  • DHCP / static IP UI with live lease values shown next to the form.
  • pyMC token management UI (replaces the older "TCP password" label).
  • Reboot button from the UI.
  • /stats page — uptime, radio config, RX/TX/error counters, RSSI/SNR/noise floor, die temperature, network mode.
  • JSON API endpoints for headless integration.

See README "Default web UI / OTA / API credentials" for the credential
matrix and how to change them.

New board (8th variant)

Seeed XIAO nRF52840 + Wio-SX1262 carrier (SKU 102010710) — nRF52840
paired with Seeed's Wio-SX1262 Meshtastic carrier.

  • USB-CDC transport only (no Wi-Fi/Ethernet/HTTP — same constraints as T114)
  • No onboard display
  • DIO2-as-RF-switch + external LNA gate on D5 (RXEN)
  • TCXO 1.8 V via DIO3, max 22 dBm chip TX (no PA)
  • OTA: Adafruit nRF52 DFU (UF2 disk on double-click reset) or in-app CMD_OTA_* over USB-CDC

fw_suffix: xiao_nrf52_wio (auto-detected by pymc_sector_array's OTA scanner).

Boards (8 binaries below)

Board Binary Notes
Heltec WiFi LoRa 32 V3 pymc_usb-v0.8.0-heltec_v3.bin ESP32-S3 + SX1262
Ikoka Stick pymc_usb-v0.8.0-ikoka_stick.bin ESP32-S3 + SX1262
Seeed XIAO Wio-SX1262 pymc_usb-v0.8.0-xiao_wio_sx1262.bin ESP32-S3
RAK3112 WisMesh pymc_usb-v0.8.0-rak3112_wismesh.bin ESP32-S3 + BLE + Wi-Fi
WaveShare ESP32-P4-Nano pymc_usb-v0.8.0-esp32_p4_nano.bin ESP32-P4 + E22 (SX1262); Ethernet preferred over Wi-Fi
Lilygo T3-S3 pymc_usb-v0.8.0-lilygo_t3s3.bin ESP32-S3 + SX1262 + OLED
Heltec T114 pymc_usb-v0.8.0-heltec_t114.hex + -dfu.zip nRF52840 + SX1262 + TFT 135×240; no Wi-Fi/TCP
Seeed XIAO nRF52840 + Wio-SX1262 (new) pymc_usb-v0.8.0-xiao_nrf52_wio.hex + -dfu.zip nRF52840 + SX1262; no Wi-Fi/TCP, no display

Flashing

ESP32 boards (USB CDC):

esptool.py --port /dev/ttyACM0 write_flash 0x10000 pymc_usb-v0.8.0-<board>.bin
# or, with PlatformIO source checkout:
cd firmware && pio run -e <env> -t upload

nRF52 boards (T114, XIAO nRF52840 + Wio) — Adafruit bootloader:
double-tap reset to enter DFU, then either drag the .uf2 (if you
build one from the hex) or use adafruit-nrfutil:

adafruit-nrfutil dfu serial -pkg pymc_usb-v0.8.0-<board>-dfu.zip -p /dev/ttyACM0 -b 115200

Default credentials (v0.8)

Surface User Default password Where to change
Web UI / OTA / JSON API admin password UI ▸ Admin password (persisted in NVS)
pyMC token (TCP transport) n/a empty UI ▸ pyMC token, or CMD_SET_WIFI

Change both before exposing the modem outside a trusted LAN.

Upgrading from v0.7

  • OTA recommended for ESP32 boards: web UI ▸ Update firmware. First
    set an admin password — the default admin/password won't gate
    anything if left as-is.
  • No driver changes needed — wire protocol unchanged.
  • First-boot HTTP credentials: admin / password (set
    intentionally to be obvious; rotate before exposing to LAN).

v0.7.0 — sector-array integration set

Choose a tag to compare

@itk80 itk80 released this 12 May 19:54

What's new in v0.7.0

Wire-protocol additions (sector-array integration set)

Backwards-compatible — pre-v0.7 hosts work against v0.7 firmware and vice
versa; the new commands are simply skipped if unknown.

  • CMD_RADIO_STANDBY (0x40) / CMD_RADIO_RESUME (0x42) — host-driven radio gating
  • CMD_SET_DISPLAY_NAME (0x48) — sector name banner on the T114 TFT
  • CMD_SET_AUTO_CAD (0x4A) — auto-CAD before every TX, persisted in NVS on T114
  • CMD_ENTER_BOOTLOADER (0x74) — drop nRF52 into Adafruit DFU mode
  • CMD_LOG_MSG (0x80) — async log line (modem → host)
  • In-app OTA over the transport: CMD_OTA_BEGIN / CHUNK / VERIFY / APPLY / ABORT (0x90 / 0x92 / 0x94 / 0x96 / 0x98) — required path for T114 since it has no Wi-Fi

fw_suffix rename (aligns with pymc_sector_array OTA scanner)

CMD_GET_VERSION / VERSION_RESP now report:

  • Heltec T114: v0.7.0-heltec_t114 (renamed from t114)
  • ESP32-P4-Nano: v0.7.0-esp32_p4 (renamed from esp32p4)

This lets pymc_sector_array auto-detect the board from an uploaded .bin
during OTA — previously these two boards fell through the matcher.

Boards (7 binaries below)

Board Binary Notes
Heltec WiFi LoRa 32 V3 pymc_usb-v0.7.0-heltec_v3.bin ESP32-S3 + SX1262
Ikoka Stick pymc_usb-v0.7.0-ikoka_stick.bin ESP32-S3 + SX1262
Seeed XIAO Wio-SX1262 pymc_usb-v0.7.0-xiao_wio_sx1262.bin ESP32-S3
RAK3112 WisMesh pymc_usb-v0.7.0-rak3112_wismesh.bin ESP32-S3 + BLE + Wi-Fi
WaveShare ESP32-P4-Nano pymc_usb-v0.7.0-esp32_p4_nano.bin ESP32-P4 + E22 (SX1262); Ethernet preferred over Wi-Fi
Lilygo T3-S3 pymc_usb-v0.7.0-lilygo_t3s3.bin ESP32-S3 + SX1262 + OLED
Heltec T114 pymc_usb-v0.7.0-heltec_t114.hex + -dfu.zip nRF52840 + SX1262 + TFT 135×240; no Wi-Fi/TCP — USB-CDC + UART only

Flashing

ESP32 boards (USB CDC):

esptool.py --port /dev/ttyACM0 write_flash 0x10000 pymc_usb-v0.7.0-<board>.bin
# or, with PlatformIO source checkout:
cd firmware && pio run -e <env> -t upload

Heltec T114 (nRF52840 with Adafruit bootloader): double-tap reset to
enter DFU, then either drag the .uf2 (if you build one from the hex)
or use adafruit-nrfutil:

adafruit-nrfutil dfu serial -pkg pymc_usb-v0.7.0-heltec_t114-dfu.zip -p /dev/ttyACM0 -b 115200

Memory footprint

Board Flash used Flash partition RAM used
heltec_v3 1.06 MB 3.19 MB (33%) 53 KB
ikoka_stick 1.06 MB 3.19 MB (33%) 54 KB
xiao_wio_sx1262 1.06 MB 3.19 MB (33%) 54 KB
rak3112_wismesh 1.07 MB 3.19 MB (34%) 53 KB
esp32_p4_nano 1.02 MB 6.25 MB (16%) 40 KB
lilygo_t3s3 1.08 MB 1.25 MB (86%) 53 KB
heltec_t114 147 KB 796 KB (19%) 16 KB

Lilygo T3-S3 is the tightest (86% flash used); consider partition table
adjustments before adding ~150 KB more features on that target.