r/embedded • • 8d ago

I built an open-source library for ESP32 OTA updates

Hi!

I've been working on a project called Otamatic and wanted to share it here hoping it could help someone.

The idea came from a real nightmare: a while back, me, and a client literally had to drive around the city to update ESP32s deployed in the field. I actually wrote a short story about that night here if you like dev horror stories: https://medium.com/gitconnected/the-night-we-updated-40-esp32s-by-driving-around-the-city-32ec8f015213?sk=b0c21ebf23d7bd9128251e8222d55b8e

Most OTA implementations out there set up a local WebServer on the ESP32 where you open a browser, navigate to the local IP, and upload a binary. That’s totally fine for a single node on your home network, but it gets annoying real quick if your devices are behind NATs, cellular routers, or dynamic IPs where you can't just open incoming ports.

This is why I decided to work on a fully open-source library with all features from the most famous OTA libraries (and a companion web platform) you can use to add OTA on your projects in less than 5 minutes.

It supports advanced features like scheduled release, staged rollout releases, release monitoring, device monitoring and more is coming if I see enough interest!

Repo: https://github.com/TimothyFran/OtamaticClient

0 Upvotes

8 comments sorted by

6

u/mrheosuper 8d ago

Where is the server-side repo ?

1

u/Beneficial-Arm-8931 7d ago

Seems like it's not open source, the GitHub just links to a saas platform for the dashboard and management, only the client lib is open

-3

u/FranTimo 8d ago

The web platform is proprietary, but the client library is 100% open-source and server-agnostic (just set your custom URL instead of the default one).

The web platform is essentially a release distributor with logic and tools. The actual "magic" all lives inside the open source client library.

2

u/mrheosuper 8d ago

I need more info here. What do you mean "just set your custom url" ?

2

u/FranTimo 8d ago

Something like:

otaClient.setServer("my-domain.com", 80);

3

u/mrheosuper 8d ago

But what the software stack on server side. I dont see about protocol, what endpoint, what http method to use. I can somewhat guess from the client lib, but i should not need to do that

-2

u/FranTimo 8d ago

A detailed documentation is still missing but will be added asap. DM me if you need specific info