← Terug naar het logboek
Verhaal

Opnieuw beginnen met een blanco blad

De Raspberry Pi verlaten voor een ESP32, de volledige codebase in C++ herschrijven, de behuizing eenvoudiger herdenken. Het prototype krijgt nieuwe fundamenten.

In het vorige artikel stelde ik u de Raspberry Pi-versie van het project voor: een volwaardig, werkend en open source systeem. En ik eindigde met de woorden dat het tijd was om die bladzijde om te draaien. Hier begint dus het vervolg.

Waarom de Raspberry Pi verlaten

In het dagelijks gebruik heeft de Raspberry Pi zijn grenzen. Hij is duur, hij verbruikt veel, hij start traag op, en hij laat een volwaardig besturingssysteem draaien voor wat in wezen een door NFC aangestuurde audiospeler blijft. Het is te veel, voor wat het doet.

Na enig opzoekwerk en kostbaar advies, heb ik mij er definitief van overtuigd om de Raspberry Pi-versie op pauze te zetten en mij toe te leggen op de ontwikkeling van de ESP32-versie. Eenvoudiger, veel goedkoper, met een zeer laag verbruik, en vooral met volledige controle over wat erop draait. Geen OS, geen updates die drivers stuk maken, geen overbodige abstractielagen. Enkel de applicatie, rechtstreeks op de microcontroller.

Het was geen makkelijke keuze. Ik werkte al een hele tijd aan de Python-versie en zat bugs te fixen, alleen begon dat deel maar te blijven duren, terwijl ik tegelijk besefte dat de ESP32 interessanter was voor het vervolg. Ik wou de juiste middenweg vinden tussen afmaken wat ik begonnen was en een lopend project loslaten.

De keuze drong zich vanzelf op.

De volledige codebase herschrijven

Het probleem is dat u Python niet zomaar overzet op een ESP32. 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 af te drukken

Het was een gigantische uitdaging. C++ lijkt in niets op wat ik tot dan toe deed: manueel geheugenbeheer, compilatie, beperkingen op het vlak van resources, geen garbage collector. Een andere manier van denken.

Net als bij de oorspronkelijke proof of concept, hebben de generatieve AI's mij enorm geholpen. Om te starten, om patterns te begrijpen, om te zien wat ik fout deed. Maar deze keer was de conceptuele sprong groter: het ging erom écht te leren, niet enkel mijn reflexen als iOS-ontwikkelaar over te zetten.

Maar na enkele maanden volharden, heb ik iets werkends. Het systeem doet zijn werk, leest de kaartjes, speelt de muziek, beheert de playlists. Het geraamte staat overeind, en het houdt stand op een microcontroller van enkele euro's.

De juiste kaart vinden

Ik ben gestart op een Arduino Nano ESP32-S3. Een klein, net kaartje, ideaal om te beginnen. Maar al de rest ontbrak: NFC-lezer, audio-uitgang, SD-lezer, voedingsbeheer. Voor elk onderdeel een externe module, draden. Handig om mee te starten, maar zo niet bruikbaar voor mijn kinderen.

Breadboard met ESP32 met NFC-lezer, audio-DAC, SD-lezer en voedingsbeheer bedraad in aparte modules
Breadboard met ESP32 met NFC-lezer, audio-DAC, SD-lezer en voedingsbeheer bedraad in aparte modules

Bij wat opzoekwerk botste ik op een kaart die de basiscomponenten bundelt om met het project te starten: de NFC Reader van HermitX, in de versie N8R8. ESP32-S3, geïntegreerde NFC-lezer, audio-uitgang, SD-lezer, maar geen batterijbeheer. Een kaart die net voor dit soort toepassingen is bedacht, waardoor ik niet bij elke iteratie alles opnieuw hoef te bedraden.

De NFC Reader-kaart van HermitX naast de batterij, de luidspreker, de potentiometers en de knopjes van het prototype
De NFC Reader-kaart van HermitX naast de batterij, de luidspreker, de potentiometers en de knopjes van het prototype

Het is op deze kaart dat het huidige prototype draait.

De behuizing, eenvoudiger

Terwijl ik de firmware herschreef, heb ik ook de modellering van de behuizing opnieuw opgenomen. De v3 had een kubusvormige structuur, opgevat als het skelet van een kubus die in 3D werd geprint, met laser uitgesneden MDF-platen voor de zijvlakken. Mooi op de rendering, maar zwaar om te printen, en elke mislukking kostte uren printtijd.

Ik heb dus alles vereenvoudigd. Geen complexe structuur meer, geen panelen meer om op een tiende millimeter uit te lijnen. Een eenvoudige doos, compacter, gemakkelijker te printen, die de kaart, de luidspreker en de batterij huisvest, en that's it.

Minder stukken, minder kalibratie, minder gelegenheid om de mist in te gaan.

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

Wat nog moet worden opgelost

De grote, niet-opgeloste werf, dat is nog steeds het batterijbeheer. Ik zit nog op dezelfde LiPo Rider als op de v3, en die heeft hetzelfde gebrek: wanneer u de USB uittrekt, veroorzaakt de overschakeling op batterij een micro-onderbreking waardoor de kaart herstart.

Het goede nieuws is dat de ESP32 in tien seconden opstart. Tegenover één à twee minuten op de Raspberry Pi. Niet perfect, maar er is geen vergelijk mogelijk. In de praktijk verandert dat alles: u trekt de stekker uit, hij herstart, en het is bijna onmerkbaar.

Wat ik eruit meeneem

Opnieuw beginnen met een blanco blad geeft op het moment zelf schrik. U laat code achter die werkte, een behuizing die elke dag draaide bij u thuis, maanden van knutselwerk. Maar het was de juiste beslissing.

Het project ligt nu meer in lijn met wat het zou moeten zijn: een eenvoudig, zuinig voorwerp dat één ding doet en dat goed doet. En de strenge beperking van de microcontroller dwingt mij paradoxaal genoeg om netter code te schrijven dan op de Raspberry Pi. En het allergrootste pluspunt: u kunt er eindelijk mee op stap, omdat het veel lichter is en op batterij meer dan vijf uur meegaat.

Een kind legt een kaartje op de doos, de muziek begint vanzelf te spelen

Het vervolg bestaat erin de firmware te stabiliseren, de voedingskwestie op te lossen en serieus na te denken over wat dit prototype zal omtoveren tot iets dat ook anderen kunnen bouwen. Daar kom ik in het volgende artikel op terug.

Newsletter

Blijf op de hoogte

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