← Terug naar het logboek
Verhaal

Opnieuw beginnen met een blanco pagina

Afscheid nemen van de Raspberry Pi voor een ESP32, de hele codebase herschrijven in C++, de behuizing simpeler maken. Het prototype krijgt nieuwe fundamenten.

In het vorige artikel liet ik de Raspberry Pi-versie van het project zien: een compleet, werkend, open source systeem. En ik eindigde met de boodschap dat het tijd was om de bladzijde om te slaan. Hier begint dus het vervolg.

Waarom afscheid nemen van de Raspberry Pi

In dagelijks gebruik heeft de Raspberry Pi zijn grenzen. Hij is duur, hij verbruikt veel, hij start traag op, en hij draait een compleet besturingssysteem voor wat in essentie een audiospeler met NFC is. Te veel voor wat het doet.

Na wat speurwerk en wat goed advies raakte ik er definitief van overtuigd om de Raspberry Pi-versie op pauze te zetten en me te focussen op de ESP32-versie. Simpeler, een stuk goedkoper, heel laag verbruik, en vooral: volledige controle over wat er draait. Geen OS, geen updates die drivers slopen, geen onnodige abstractielagen. Gewoon de applicatie, rechtstreeks op de microcontroller.

Het was geen makkelijke keuze. Ik werkte al een tijdje aan de Python-versie en was bugs aan het oplossen, alleen begon dat te slepen, terwijl ik tegelijk merkte dat de ESP32 voor het vervolg interessanter was. Ik wilde het juiste midden vinden tussen afmaken wat ik begonnen was en een lopend project laten vallen.

De keuze maakte zichzelf.

De hele codebase herschrijven

Het probleem is dat je Python niet zomaar naar een ESP32 overzet. Alles moest opnieuw in C++. En ik kende die taal niet.

Python
print("Hello, World!")
C++
#include <iostream>

int main() {
  std::cout << "Hello, World!\n";
  return 0;
}
Vergelijking tussen Python en C++ om een Hello World te tonen

Het was een enorme uitdaging. C++ lijkt totaal niet op wat ik tot dan toe deed: handmatig geheugenbeheer, compilatie, beperkte resources, geen garbage collector. Een andere manier van denken.

Net als bij de oorspronkelijke proof of concept hebben generatieve AI-tools me enorm geholpen. Om op gang te komen, patterns te begrijpen, te zien wat ik fout deed. Maar deze keer was de stap groter: ik moest echt leren, niet alleen mijn iOS-reflexen overzetten.

Na een paar maanden doorbijten heb ik iets werkends. Het systeem werkt, leest de kaartjes, speelt muziek, beheert de playlists. Het skelet staat, en het staat op een microcontroller van een paar euro.

De juiste board vinden

Ik begon met een Arduino Nano ESP32-S3. Een klein, schoon bordje, prima om mee te starten. Maar al de rest ontbrak: NFC-lezer, audio-uitgang, SD-lezer, voedingsbeheer. Voor elk onderdeel een externe module, draadjes erbij. Handig om te beginnen, maar zo niet bruikbaar voor mijn kinderen.

ESP32-breadboard met NFC-lezer, audio-DAC, SD-lezer en voedingsbeheer in losse modules bedraad
ESP32-breadboard met NFC-lezer, audio-DAC, SD-lezer en voedingsbeheer in losse modules bedraad

Bij het zoeken stuitte ik op een board dat de basiscomponenten samenbrengt om het project op te starten: de NFC Reader van HermitX, in de N8R8-versie. ESP32-S3, ingebouwde NFC-lezer, audio-uitgang, SD-lezer, maar geen accubeheer. Een board dat voor dit type gebruik is gemaakt, waardoor ik niet bij elke iteratie alles opnieuw hoef te bedraden.

De NFC Reader van HermitX naast de accu, de speaker, de potmeters en de knoppen van het prototype
De NFC Reader van HermitX naast de accu, de speaker, de potmeters en de knoppen van het prototype

Op deze board draait het huidige prototype.

De behuizing, simpeler

Terwijl ik de firmware herschreef, ben ik ook met de behuizing opnieuw begonnen. De v3 had een kubusstructuur, bedacht als het skelet van een 3D-geprinte kubus met lasergesneden MDF-panelen als zijkanten. Mooi in render, maar zwaar om te printen, en elke mislukte print kostte uren.

Dus heb ik alles vereenvoudigd. Geen ingewikkelde structuur meer, geen panelen meer die op een tiende millimeter moesten uitlijnen. Een simpele doos, compacter, makkelijker te printen, met daarin de board, de speaker, de accu, en that's it.

Minder onderdelen, minder kalibratie, minder kans dat het misgaat.

Het prototype in 3D, sleep om het te draaien en te verkennen.

Wat er nog moet gebeuren

De grote openstaande klus is nog steeds het accubeheer. Ik gebruik nog steeds dezelfde LiPo Rider als bij de v3, en hij heeft hetzelfde gebrek: als je de USB eruit haalt, veroorzaakt de overschakeling naar accu een micro-onderbreking waardoor het board herstart.

Het goede nieuws: de ESP32 start op in tien seconden. Tegenover één tot twee minuten op de Raspberry Pi. Niet perfect, maar onvergelijkbaar veel beter. In de praktijk verandert dat alles: je haalt de stekker eruit, hij herstart, en het is bijna niet te merken.

Wat ik eraan overhoud

Opnieuw beginnen met een blanco pagina is op het moment zelf eng. Je laat code achter die werkte, een behuizing die elke dag bij je thuis stond, maanden geknutsel. Maar het was de juiste beslissing.

Het project past nu beter bij wat het zou moeten zijn: een eenvoudig, zuinig object, dat één ding doet en dat goed doet. En de strakke beperking van de microcontroller dwingt me, paradoxaal genoeg, om netter te coderen dan op de Raspberry Pi. En het allermooiste: je kunt er eindelijk mee de deur uit, want hij is een stuk lichter en gaat meer dan vijf uur mee op de accu.

Een kind legt een kaartje op de box, de muziek begint vanzelf

Wat volgt: de firmware stabiliseren, het voedingsverhaal regelen, en serieus nadenken over wat van dit prototype iets maakt dat anderen kunnen bouwen. Daarover meer in het volgende artikel.

Newsletter

Blijf op de hoogte

Laat je e-mail achter om de voortgang van het project te volgen en de lancering niet te missen.