MCU OTA & Fleet Updates
Over-the-air firmware updates and fleet management — ArduinoOTA, ESP OTA, MCUboot, ESP-RainMaker, Memfault, Mender, hawkBit.
How firmware lands on devices after they leave your bench. Two-and-a-half problems: a bootloader that swaps images safely, a transport (Wi-Fi / BLE / cellular / USB), and (optionally) a fleet backend to track who got what. For chip-side basics see ESP-IDF and Embedded RTOSes; for the radios see MCU Wireless Stacks.
On-device OTA primitives
ESP32 / ESP8266
- ★ ESP-IDF OTA (
esp_https_ota/esp_ota_*API) — Espressif's built-in OTA APIs. A/B partition scheme + rollback if boot fails. The default for IDF apps. - ★ ArduinoOTA — push firmware over Wi-Fi from the Arduino IDE /
espota.py; trivially easy for development. Limited fleet story. espota.py— bundled CLI for the same Arduino-style OTA.- HTTP / HTTPS OTA — pull from your own server; ESPHome, Tasmota, ESP-IDF all do this.
- WebSerial / browser OTA — flash from a browser via ESP Web Tools; good for end-user updates.
Generic Cortex-M
- ★ MCUboot — the de-facto open-source bootloader for Cortex-M (and beyond). Supports image signing, encryption, A/B "swap" or "overwrite" or "direct-XIP" modes, downgrade prevention. Apache 2.0. Used by Zephyr, NCS, Pi Pico SDK (optional), TF-M, mbed-os, and many vendor SDKs.
- bootloader/Update Engine in nRF Connect SDK — Zephyr/MCUboot configured by Nordic for nRF chips. Pairs with MCUmgr for transport.
- STM32CubeProgrammer / FUS / SBSFU — ST's bootloader primitives.
- NXP MCUBoot / SBL — NXP wrappers around MCUboot.
Pi Pico / RP2040 / RP2350
- Native UF2 bootloader — the BOOTSEL drag-and-drop UF2 update mechanism is a great first OTA story over USB. For wireless, you build OTA on top.
- MicroPython OTA — MicroPython's built-in OTA support on Pico W.
- MCUboot for RP2040 / RP2350 — supported in 2026; pair with picotool.
Update transports
- Wi-Fi (HTTP / HTTPS / S3-style) — the simplest fleet transport on ESP / Pico W / nRF7002.
- BLE — MCUmgr / SMP — Zephyr's "Simple Management Protocol" runs OTA over BLE; nRF Connect mobile app + iOS / Android SDKs ship reference implementations.
- CoAP + Block-Wise — used in some Thread / Matter scenarios for OTA.
- Matter OTA Provider / Requestor — Matter's standard OTA protocol; defined for Matter devices.
- Cellular (LwM2M / nRF Cloud / AWS Device OTA / Azure DPS) — for nRF91 and similar.
- LoRaWAN FUOTA — fragmentation-based firmware-update-over-LoRaWAN; class-B/C; possible but slow.
- USB (UF2 / DFU) — DFU is the standard USB bootloader protocol; UF2 is Microsoft's drag-and-drop variant used on RP2040, SAMD51 boards.
dfu-util— open-source CLI for DFU; pairs with STM32 ROM bootloaders, nRF DFU, and many others.
Fleet / OTA backend services
Open-source self-hosted
- ★ Eclipse hawkBit — open-source (EPL); the LF-Edge-class fleet update server. Targets / rollouts / cohorts / pause-resume. Battle-tested at industrial scale. Pair with hawkBit DDI client on the device. Self-host with docker-compose. The default open self-hosted choice.
- Mender (open source) — Mender Hub / Mender Server free tiers exist; primarily designed for embedded Linux but supports MCU / Zephyr. Mender Enterprise is paid.
- RAUC — Robust Auto-Update Controller; popular on embedded Linux, less common for MCUs.
- Eclipse Leshan / Wakaama — LwM2M servers; standards-based device management.
- The Things Stack FUOTA (LoRaWAN) — built into TTS for LoRaWAN device updates.
Cloud / hosted (free tier or open + hosted)
- ★ ESP-RainMaker — Espressif-hosted IoT backend with OTA, dashboards, scheduling. Free hosted tier; open-source server for self-host. The path of least resistance for ESP32 OTA at hobby scale.
- ★ Nordic nRF Cloud — Nordic's cloud, free-ish for development; OTA, location services, modem updates. Tightly integrated with nRF Connect SDK.
- ★ Memfault — fleet observability + OTA; auto-decoded coredumps, metrics, releases, cohorts, rollouts. Free hobbyist tier (50 devices / 30 days history); paid for production volume. The "Sentry for embedded." Closed-source product, open SDK.
- ★ Golioth — managed device cloud aimed at Zephyr / nRF / ESP; free tier (50 devices). Modern dev experience; OTA, settings, streaming, RPC.
- AWS IoT Core OTA Jobs / Greengrass OTA — AWS's OTA story; integrates with FreeRTOS LTS.
- Azure IoT Hub Device Update — Microsoft's equivalent.
- Particle (paid + free dev tier) — full vertical IoT stack (their hardware + cloud + OTA); their own MCUs (P2, Photon 2 — STM32 based).
- Blynk — IoT platform; free tier; OTA included.
- Hologram Spacebridge / Soracom — primarily SIM-management cloud, also offer OTA tooling.
Hosted Matter / smart-home OTA
- Matter OTA — defined by spec; if your device is in someone's HomeKit / Alexa / Google ecosystem, those hubs are increasingly the OTA provider via Matter.
Code-signing / security
- ★ Image signing in MCUboot — ECDSA-P256 / Ed25519 / RSA. Standard.
- ★ ESP Secure Boot v2 — RSA-PSS / ECDSA signed images; keys burned into eFuses. Irreversible, careful.
- ★ Flash Encryption — ESP-IDF / Nordic / TF-M all offer it; keys in eFuse / KMS.
- TF-M (Trusted Firmware-M) — Arm's PSA-aligned secure firmware framework for Cortex-M with TrustZone (M33).
- MCUboot encrypted images — keys in HW unique key (HUK) on supported chips.
Fleet observability adjacent
- ESP-Insights — Espressif's hosted-or-self-hosted insights dashboard (reboot reasons, metrics, logs); free Espressif-hosted tier.
- Memfault metrics — periodic device-side metrics (battery, RSSI, custom counters) shipped to fleet dashboard.
- Golioth LightDB Stream — time-series streaming from devices.
Patterns / things to actually do
- ★ A/B partitions + rollback on failed boot. Non-negotiable for production. ESP-IDF and MCUboot do it; if you build your own bootloader, copy this pattern.
- ★ Sign your images. Even a minimal HMAC against a baked-in key beats nothing. ECDSA + secure boot if you can afford the eFuse burn.
- ★ Stage updates by cohort — never push to 100% of fleet at once; even hawkBit's free tier lets you do percentage rollouts.
- Coredump uploads. Whatever cloud you use (Memfault, Golioth, your own MQTT topic), capture and triage crashes.
- Fail-safe metrics. Track update-success rate, boot-loop-rate, time-since-last-checkin per device.
- Don't OTA over BLE if you have Wi-Fi. BLE OTA is slow (~5–20 KB/s); Wi-Fi is 100×.
Pick this if…
- Default ESP OTA, hobby / dev: ArduinoOTA or ESP-IDF OTA + your own HTTP server.
- Default ESP OTA, hosted free tier: ESP-RainMaker.
- Default Zephyr / nRF / Cortex-M OTA: MCUboot + MCUmgr (BLE) or HTTP (Wi-Fi/cellular).
- Default fleet backend, self-hosted: Eclipse hawkBit.
- Default fleet backend, hosted, fleet observability: Memfault or Golioth.
- Smart-home device OTA via the user's hub: Matter OTA.
- You sell hardware and want zero infra effort: Particle or Blynk's vertical stack.
- You're shipping fewer than 50 devices: any free tier above is fine; pick what fits your chip.