Embedded software en hardwarekoppelingen
Het apparaat werkt, de app werkt, en de koppeling ertussen heeft niemand op zijn bord. Daar loopt het meestal vast. Ik werk aan allebei die kanten: printers, scanners en sensoren aansturen vanuit productiesoftware, en de firmware op het apparaat schrijven als dat het ontbrekende stuk is.
Gevestigd in Groningen, werkzaam door heel Nederland en op afstand voor klanten wereldwijd.
Software die met fysieke apparaten praat, en firmware voor de apparaten zelf. Apparatuur aansturen via serieel, USB, Bluetooth LE en MQTT, plus firmware voor ESP32- en Arduino-boards.
Geschikt als de hardware bij de één ligt, de software bij de ander, en er niemand tussen zit.
Geschikt voor
- Producten waarbij een app of backend echte apparaten moet aansturen via serieel, USB, Bluetooth LE, MQTT of gewoon TCP.
- Een koppeling die al draait maar niet betrouwbaar is: verbindingen die wegvallen, dubbele opdrachten, printopdrachten die soms niet aankomen.
- IoT-projecten waarbij firmware, backend en dashboard op elkaar moeten aansluiten en niemand alle drie beheert.
- Bestaande hardware met een protocol dat slecht gedocumenteerd is, of helemaal niet.
Mijn aanpak
- Eerst het protocol. Voordat er een scherm bestaat, laat ik een kaal script met het apparaat praten en leg ik vast wat het apparaat doet, inclusief de ongedocumenteerde delen. Alles daarboven is goedkoop te veranderen. Deze laag niet.
- Uitval als uitgangspunt. Kabels raken los, batterijen lopen leeg, wifi valt weg midden in een schrijfactie. Wachtrijen, retries en idempotente commando's zitten vanaf het begin in het ontwerp, niet pas na de eerste melding uit het veld.
- Eén systeem, geen drie. Apparaat, backend en dashboard worden samen gebouwd en samen uitgebracht. Een wijziging in het protocol sloopt dan niet stilletjes het scherm dat het uitleest.
- Aftekenen op het echte apparaat. Elke mijlpaal wordt afgetekend op jouw hardware, niet op een simulator: een demo of een log waarin het apparaat doet wat is afgesproken. Bij firmware hoort daar ook bij hoe je het apparaat later zelf bijwerkt, via OTA of een flashscript dat je zonder mij kunt draaien.
Werk dat ik kan laten zien
- Randapparatuur in een retailplatform. Voor een winkelautomatiseringsplatform stuurde ik bonprinters, labelprinters en barcodescanners aan vanuit de webapplicatie, via ESC/POS over serieel en USB, met een lokale wachtrij die doorliep als een apparaat of het netwerk wegviel.
- ESP32-firmware met e-paperdisplay en een UART-sensor. Eigen project. Ik heb het protocol van een luchtkwaliteitssensor uitgezocht op basis van dunne documentatie en het gebouwd als ESP32-firmware met een e-paperdisplay. De displaydriver staat als apart opensourceproject op GitHub en is door anderen opgepikt. Lees hoe ik het bouwde (Engelstalig).
- Bluetooth-protocol van koptelefoons uitgezocht. Ook uit eigen werk. Om ruisonderdrukking te bedienen op koptelefoons van andere merken dan Apple, heb ik het Bluetooth-verkeer opgenomen en de commandoset gereconstrueerd. Lees het verhaal (Engelstalig).
Tech die ik gebruik
Serieel en USB (CDC, ESC/POS), Bluetooth LE, MQTT, TCP, ESP32, Arduino, C en C++, Go, Python, TypeScript, Postgres, offline-first sync.
Veelgestelde vragen
Schrijf je de firmware, of alleen de software die met het apparaat praat?
Allebei, al verschilt de staat van dienst per onderdeel. Apparaten aansturen via serieel en USB heb ik in productie opgeleverd. Bluetooth LE en firmware voor ESP32 en Arduino komen tot nu toe uit eigen projecten; hoe dat eruitziet, kun je hierboven nalezen. Net als bij elk ander traject is de eerste stap één kleine mijlpaal met een vaste prijs, dus je ziet het draaien op jouw hardware voordat je verder gaat.
We hebben de hardware al. Kun je daarop aansluiten?
Meestal wel. Met een datasheet of protocoldocument is het rechttoe rechtaan. Zonder wordt het uitzoekwerk: verkeer op de lijn opnemen, de commandoset reconstrueren en die tegen het apparaat verifiëren. Dat kost tijd, dus ik zet het als aparte stap in de offerte in plaats van het te verstoppen in een vaste prijs.
Gaat dit over één prototype of over apparaten in het veld?
Allebei komen voor, maar het zijn verschillende projecten. Eén apparaat op de werkbank is vooral protocol en firmware. Tweehonderd apparaten bij klanten betekenen ook uitrol, updates op afstand en zicht op wat er misgaat.
Wat gebeurt er als het netwerk of het apparaat wegvalt?
Commando's gaan lokaal in een wachtrij, en zodra de verbinding terug is synchroniseren apparaat en centraal systeem. Aan de firmwarekant horen daar watchdogs bij, en een apparaat dat na een stroomstoring in een bekende toestand opstart.
Ontwerp je ook de elektronica of de printplaat?
Nee. Schema's, printplaatontwerp en behuizingen zijn niet mijn vak, en dat zeg ik liever dan dat ik het op jouw kosten leer. Voor CE-markering en EMC-tests geldt hetzelfde: dat is werk voor een testlab en voor de partij die het apparaat op de markt brengt. Wat ik wel doe: werken met standaardboards en vooraf gecertificeerde radiomodules, binnen de grenzen van zo'n module blijven, en de documentatie leveren die het testlab vraagt. Verder werk ik naast jouw elektronica-engineer, aan beide kanten van de connector.
Vertel wat het apparaat moet doen
Laat me weten om welk apparaat of welke module het gaat, wat je aan documentatie hebt, ook als dat niets is, en wat het moet aansturen. Ik laat je weten of het kan en wat de eerste stap zou zijn, en dat kost je niets.
Neem contact opAndere diensten
- Maatwerk applicaties Volledige ontwerp- en ontwikkeltrajecten voor maatwerk applicaties, op het web, native iOS en backend, inclusief MVP-builds voor early-stage producten.
- Web-, API- en backend-ontwikkeling Productie-websites, webapplicaties en APIs in React, Preact, Svelte en vanilla web. Backends in Go en Python met REST of event-driven APIs.
- AI-prototype laten doorontwikkelen Een prototype uit Lovable, Bolt, Replit, v0 of Cursor uitbouwen tot software waar echte gebruikers op kunnen en echte klantgegevens in.
- AI- en LLM-integraties LLM-functionaliteit voor bestaande apps en nieuwe producten: agent-workflows, RAG-pipelines en integraties met OpenAI, Anthropic en vergelijkbare providers.
- Legacy-code modernisering Refactoring en modernisering van oudere codebases. Framework-upgrades, zorgvuldige test-gedreven aanpassingen en migraties van end-of-life-platforms.
- Native iOS-apps Native iPhone- en iPad-apps in Swift en SwiftUI, inclusief widgets, Live Activities en App Store-oplevering.
- Browserextensies en integraties Chrome-extensies, Thunderbird-add-ons en integraties tussen browsers en externe diensten.
- Performance-kritieke engineering Algoritmes, audio- en videobewerking, codec-werk, P2P-netwerken en andere engineering-diepe projecten waar prestatie en correctheid tellen.