Foundry: firmware zonder de plechtigheid

Geplaatst: 2026 | Categorie: Hardwareplatform

Bij het tweede product loopt het mis

Het eerste verbonden toestel dat je uitlevert, gaat prima. Eén board, één binary, één iemand die weet hoe je flasht, één namiddag om een build over USB te kopiëren.

Bij het tweede valt het uiteen.

Nu zijn er twee firmwarebomen, en allebei bevatten ze hun eigen wifi-instelportaal. Allebei hun eigen captive pagina, hun eigen hotspot, hun eigen “typ hier je paswoord”-formulier, en de twee implementaties zijn al uit elkaar gegroeid. De ene gaat elegant om met een fout paswoord. De andere herstart.

Twee half afgewerkte toestellen open op een volgestouwde elektronicawerkbank, handen die langs striptangen en soldeer naar een USB-kabel reiken Twee producten, van alles twee. Bij de tweede kopie begint het uit elkaar te groeien.

Allebei hebben ze hun eigen updatemechanisme, of waarschijnlijker: geen van beide, want dat schrijven is een week werk en je moest leveren. Wat betekent dat de toestellen die al in het veld staan, bevroren zijn op wat er het atelier verliet.

En flashen is nog altijd een laptop met de juiste toolchain, de juiste Python-versie en een kabel. Dus de enige die firmware op een doos kan zetten, is degene die ze geschreven heeft.

Flash het vanuit een browser

Steek een ESP32-S3 in eender welke computer met Chrome of Edge. Open foundry.glue.blue. Kies een product. Klik op Install.

Dat is de hele procedure. Web Serial doet de rest, en wie het uitvoert heeft geen toolchain nodig, geen Python, geen checkout van een repository en geen idee wat een partitietabel is.

Dat werkt door een beslissing die klein klinkt en dat niet is: de binaries bevatten geen geheimen. Een build is generiek per product en board. Er is geen beeld per toestel, geen ingebakken sleutel, geen serienummer dat ergens meegecompileerd wordt.

Een toestel wordt pas iemands toestel achteraf, via een setup-URL. De webapp van het product toont er een. Het toestel slikt hem in, geplakt in zijn eigen captive portaalpagina of gescand als QR-code met een telefooncamera. Het toestel wisselt hem één keer in voor een langlevend token, en vanaf dat moment hoort het bij een account.

Die splitsing maakt flashen vanuit de browser veilig, en ze maakt het ook herhaalbaar.

Iedereen kan flashen. Niemand kan zich naar andermans data flashen.

Eén componentenbibliotheek, veel producten

Onder de flashpagina zit het deel dat echt tijd uitspaart: gedeelde ESP-IDF-componenten die elk product gebruikt in plaats van opnieuw te schrijven.

Provisioning. De hotspot, de captive instelpagina, het wifi-netwerk en het paswoord en de setup-URL verzamelen, verbinden, en inwisselen. Eén implementatie. Alleen de teksten verschillen per product, via configuratie: de titel, de helptekst, de URL-markering.

Koppelen is hier meteen ook verificatie, en dat kleine detail schrapt een hele categorie supportvragen. De setup-URL inwisselen bewijst dat het netwerk werkt, dat de server bereikbaar is en dat het token geldig is, allemaal in dezelfde ene aanvraag die er toch moest zijn. Een toestel dat de installatie afmaakt, is een toestel dat werkt.

Updates over de lucht. Het register bevragen, downloaden, installeren en terugvallen.

Weergave. Schermen voor de producten die er een hebben.

De eigen firmware van een product wordt daarmee een dunne domeinlaag die aangeeft welke componenten ze nodig heeft. Een meter uitlezen, een printer aansturen, een dashboard tonen. De rest is al geschreven en al gedebugd, één keer.

Updates die de vloot niet kunnen slopen

Drie regels sturen het updatepad, en elke regel bestaat omdat het alternatief een rit met de bestelwagen is.

als het faaltals het bootOndertekende buildFirmwareregisterFlashen in de browserOver de luchtToestelProefbootTerugrollen
Een build bereikt een toestel langs twee wegen, en de laatste stap is altijd een toestel dat beslist of het ze houdt.

De bytes van een build liggen vast. Versie 0.1.3 is voor altijd exact dezelfde set bytes. Ze promoveren naar een kanaal bouwt niets opnieuw. Wat je getest hebt, is wat vertrekt.

Elk verschil installeert, niet enkel een hoger nummer. Zet je een oudere versie op het stabiele kanaal, dan komen toestellen die de nieuwere draaien terug naar beneden. Een terugval in het register is een terugval in het veld, en ze werkt bij de volgende check-in in plaats van een nieuwe release te vragen.

Beelden starten op proef. Een nieuw beeld krijgt één opstart om zich te bewijzen. Het moet een geslaagde check-in halen en zichzelf gezond verklaren. Doet het dat niet, dan zet de bootloader eigenhandig terug wat er stond, zonder dat er iemand op kijkt.

Die laatste regel heeft zich al terugbetaald. Eén firmwareversie crashte binnen haar eigen proefperiode en viel terug op elk board dat ze aanraakte. Er was geen kabel nodig. Er was geen bezoek nodig. De vloot ging terug naar de vorige versie en die versie werd ingetrokken.

Als het faalt, zegt het waarom

Een mislukte update meldt wat er gebeurde: in welke fase ze stierf, download, verificatie, installatie, opstart of terugval, de eigen foutnaam van het toestel, de resetreden, het vrije geheugen op het moment van opgeven, en hoeveel bytes van het beeld al binnen waren.

Een toestel dat terugkomt van een panic, een watchdog of een spanningsdip zegt dat bij zijn volgende check-in, met de samenvatting van de core dump als de crash er een achterliet: de taak, de programmateller, de oorzaak van de uitzondering, het adres dat aangeraakt werd en een backtrace. Daarnaast gaat het eigen kruimelspoor van de firmware mee, het laatste wat ze noteerde dat ze aan het doen was, met de uptime en het geheugen van dat moment.

De console groepeert herhaalde weigeringen van dezelfde versie in één regel met een teller, de reden, en of het toestel nog steeds de build aangeboden krijgt die het niet kan installeren. Want de faalmodus die je echt tegenkomt is niet dramatisch.

Het is een toestel dat veertig keer stilletjes dezelfde update weigert terwijl een dashboard het als online toont.

Voor wie dit is

Iedereen die zijn tweede verbonden product uitlevert. Het eerste leerde je wat provisioning en updates kosten. Met Foundry betaal je dat één keer.

Kleine hardwareteams zonder firmwarespecialist. De moeilijke stukken, partities met twee slots, ondertekende beelden, terugval, captive portalen, zitten in de gedeelde componenten in plaats van in jouw agenda.

Een magazijntoonbank onder tl-licht, een collega in werkjas die een klein toestel in een laptop steekt, kartonnen dozen opgestapeld erachter Een kabel en een browsertab, dat is de volledige opleiding.

Iedereen die niet-technici toestellen wil laten flashen. Een Chrome-tab en een USB-kabel. Dat is de opleiding.

Multi-tenant hardware. Producten, boards en builds horen bij een workspace, en de workspace waar een toestel onder valt, wordt bepaald door de build die erop gezet is. Een toestel opnieuw koppelen aan een ander account verhuist het niet. Alleen opnieuw flashen doet dat.

Wat er nu al op draait

Foundry publiceert de firmware voor de Glass HMI-terminal, over twee boardvarianten onder één product en één versie. Het bedient de flashpagina waar die terminals vanaf geïnstalleerd worden. Een energiemonitor die een Belgische P1-meter uitleest, draait erop. Een printagent is de volgende.

Aan de slag

Ga naar foundry.glue.blue, steek een board in, en klik op Install. Kijk daarna eens hoeveel van de firmware van je volgende product je op het punt stond een tweede keer te schrijven.


Foundry is gebouwd door glue.blue - wij plakken oplossingen op problemen. Permanent.

→ Open de flashpagina → Contacteer ons

Geplaatst in: Hardware, Firmware, IoT, Platform