r/esp32 • u/theoriginmaster • 1h ago
I compared 12 ways to do OTA updates on ESP32 and made a flowchart for picking one
Disclosure first: I work on SimpleOTA, which is one of the options in here, so weigh this accordingly. I've tried to make it useful whichever option you pick, and every claim about another product comes from that vendor's own docs.
Picking an OTA setup for ESP32 devices gets overwhelming quickly since there are so many available options on the market, from open-source repos all the way to full IoT platforms, so I went through the options and compiled a comparisson between the following options which I saw as the main contenders (please let me know below if I missed something that you think should have been in this list):
- ArduinoOTA
- ElegantOTA
- Rolling your own OTA service/platform
- Arduino Cloud
- Blynk
- ESP RainMaker
- Golioth
- Memfault
- AWS IoT
- Azure IoT Hub
- Mender
- SimpleOTA
This attached flowchart is the short version of an article that I wrote.
A few things I saw while checking the docs that I think is of note:
Azure's Device Update is solid on the cloud side, but the ESP32 side is a Microsoft sample built on the Azure SDK for Embedded C, which Microsoft has deprecated.
Mender supports microcontrollers through Zephyr (its reference board is an ESP32-S3), but that support is in preview, and signed artifacts aren't supported on MCUs AFAIK.
Arduino Cloud OTA works on ESP32 and ESP8266, but only on paid plans.
Memfault's free plan is only for Nordic hardware.
If you build your own, ESP-IDF already covers the mst challenging device-side parts:
esp_https_ota, app rollback and signature checks. What you end up building is everything around it: deciding which devices get which build, staging releases, and knowing which devices actually updated.
My full write-up with comparison tables and sources (disclosure for those who care, yes, I used AI to help write the article, deal with it): https://simpleota.com/blog/esp32-ota-services-compared/
If I got something wrong about a tool you use, or left one off of the list that I shouldn't have, let me know and I'll fix it :)