// guide · meshcore

OTA updates for repeaters

Guide · updated June 2026

Push new MeshCore firmware to a node without a cable — over Bluetooth on nRF52 boards, or WiFi on ESP32. Perfect for a repeater you don’t want to take down. One hard rule first: on nRF52, the OTAFIX bootloader has to be on there before you try.

Read this first: OTAFIX is not optional

On a stock nRF52 bootloader, an over-the-air update is a coin flip — and a failed one can leave the board with no valid firmware and no easy way back. On a repeater bolted to a roof, that means a ladder and a laptop. Not great.

The OTAFIX bootloader fixes both problems: it makes OTA actually reliable, and if an update does fail, the board falls back into Bluetooth DFU mode and waits — so you just retry over the air instead of climbing up to recover it.

Do not OTA an nRF52 node — especially a remote one — until it’s running OTAFIX. It’s a one-time, 2-minute flash that turns OTA from “risky” into “routine.” → Flash the OTAFIX bootloader first, then come back here. (ESP32 boards like the Heltec V3 don’t use this bootloader — they update over WiFi; see below.)

Tempted to apply OTAFIX itself over the air? You can push the OTAFIX bootloader with the nRF Device Flasher (over Bluetooth) instead of USB — but it’s high-risk. If that flash fails, the board is stranded and you’ll have to recover it from a PC over USB anyway. If it succeeds, you’re clear to OTA normally from then on. The safe play is to put OTAFIX on over USB while the board is in your hand.

nRF52 viaBluetooth (DFU)
ESP32 viaWiFi hotspot
Needs (nRF52)OTAFIX bootloader
Triggerstart ota
Firmware.zip from the flasher
Time~5–7 min

Before you start

  • nRF52 only: the node is already on the OTAFIX bootloader.
  • You know the node’s admin password.
  • Your companion is paired to the MeshCore app, with the node added as a contact.
  • nRF52 only: the nRF Device Firmware Update app (by Nordic) is installed on your phone (nRF Connect’s DFU works too).
// nRF52 · bluetooth

nRF52 boards — OTA over Bluetooth

RAK4631, Heltec T114, Seeed XIAO, and the rest. Two apps do the work: the MeshCore app kicks the node into update mode, then a DFU app sends the firmware.

  1. Install the DFU app

    On your phone, install Nordic’s nRF Device Firmware Update (a.k.a. nRF DFU) — the app that actually pushes the firmware.

    nRF Device Firmware Update app on the Google Play Store
    Nordic’s nRF Device Firmware Update, on Google Play.
  2. Download the firmware .zip

    On GitHub, open meshcore-dev/MeshCore → Releases, find the latest build for your role (e.g. Repeater Firmware v1.16.0), expand Assets, and grab the .zip for your board — e.g. RAK_4631_repeater-v1.16.0-….zip on a RAK4631. (The same builds are on flasher.meshcore.io too.)

    GitHub releases page showing the RAK4631 repeater firmware .zip asset
    GitHub → Releases → Assets — the board-specific .zip.
  3. Put the node in OTA mode

    Log into a running node from the app (Manage → admin password), open the Command Line, and send start ota — it reboots into DFU mode. (A board already in DFU — e.g. fresh from an OTAFIX flash — shows up without this.) It advertises with your board’s name: on a RAK4631 it’s 4631_DFU (other boards show RAK4631_OTA, Xiao_NRF52_OTA, etc.).

    MeshCore app Command Line with start ota entered
    App → Manage → Command Line → start ota.
  4. Set the DFU app options

    Open nRF Device Firmware UpdateSettings and match these exactly:

    • Packet Receipt Notification (PRN)ON
    • Number of packets8
    • Request high MTU (Android)OFF
    • Disable resumeON
    • Prepare object delay0 ms
    • Force scanningON
    • External MCU DFUOFF
    nRF Device Firmware Update Settings, part 1
    nRF DFU app → Settings.
    nRF Device Firmware Update Settings, part 2
    …scrolled down.
  5. Send the update

    In the DFU app, tap File → Downloads, pick the .zip you downloaded, select your device (e.g. 4631_DFU), and press Start. It runs over Bluetooth LE — give it a few minutes and keep the phone close and awake.

    nRF DFU app transferring firmware to the device
    The transfer in progress.
  6. Finish: log back in & sync the clock

    The node reboots into the new firmware. Log back in and sync the clock (the app has a sync option, or run clock sync) — that’s it. No cable, no ladder.

On iPhone, turn off Auto-Lock first. Open Settings → Display & Brightness → Auto-Lock → Never and keep the nRF app in the foreground the whole time. iOS suspends Bluetooth when the screen sleeps — if it locks mid-transfer, the OTA drops and you start over. (Set Auto-Lock back when you’re done.) Android doesn’t have this issue and transfers noticeably faster — if you’ve got one, use it for OTA.

iPhone Settings, Display and Brightness, Auto-Lock set to Never
iPhone → Settings → Display & Brightness → Auto-Lock → Never.
# MeshCore app → Manage → Command Line
> start ota
OK - mac: E1:5A:…:9C   # now in OTA mode → switch to the DFU app
// esp32 · wifi

ESP32 boards — OTA over WiFi

Heltec V3 and other ESP32 nodes update over a temporary WiFi hotspot — no DFU app, no OTAFIX bootloader.

  1. Download the firmware .zip

    From flasher.meshcore.io, grab the OTA build for your board.

  2. Start OTA

    Log into the node (admin) → Command Linestart ota. The app’s Repeater Admin page then shows a URL to upload through.

  3. Upload in a browser

    Connect to the node’s WiFi, open that URL in a browser, select your firmware, and press Start.

  4. Finish

    Once it reboots, log back in and sync the clock.

// when it stalls

If an update gets stuck

  • Stuck on “Initializing DFU…”? Disconnect and tap Start again — the second attempt almost always goes through.
  • This is where OTAFIX earns its keep. A failed transfer drops the board back into OTA mode (advertising as *_OTA), waiting for a retry — so you fix it over the air. Without OTAFIX, that same failure can strand the node.
  • Last resort (or no OTAFIX): recover over USB — double-press reset for the UF2 drive and re-flash. See the OTAFIX guide; if a reset wiped the node, restore from your backup kit.

Updating a repeater you can’t reach?

Walk through it with the operators in #meshcore — we’ve OTA’d the board you’re holding.