Het is alweer 5 jaar geleden dat ik een de Yazz-Winddisplay heb gemaakt. Die heeft het slechts 1 seizoen uitgehouden. Na de winter heeft deze de geest gegeven. Aan vervanging ben ik niet meer begonnen omdat de prijzen van dit type display door het dak zijn gegaan (alles relatief natuurlijk) maar toch…
Intussen is er technisch gezien een sprong gemaakt. Daar waar 5 jaar geleden een losse display met een losse ESP32 processor aangeschaft moest worden en dan ook nog in een behuizing moest worden geplaatst, koop je dat nu volledig geïntegreerd.

Het project is deze keer een MFD (Multi Function Display) waarmee de meeste parameters kunnen worden weergegeven en die ook tijdens de schermring en de nacht gebruikt kan worden zonder te verblinden. Daarnaast moet het bij volle zon ook nog leesbaar zijn.
Omdat de winter lang lijkt te duren en de technologie een sprong voorwaarts heeft gemaakt op het gebied van goedkope displays en geïntegreerde ESP-processors, en ook op het gebied van frameworks voor grafische weergave op deze geïntegreerde boards, zoals LVGL.
Tegenwoordig zijn ze (de displays) volledig geïntegreerd en in één behuizing verkrijgbaar. Dit maakt ze een interessant apparaat ter vervanging van oude displays en dergelijke. Ze hebben zelfs een naam: goedkope gele displays (CYD).
Dus kocht ik een 7-inch display voor ongeveer € 37. Nextion-displays zijn tegenwoordig extreem duur en bieden naar mijn mening niet veel voordelen ten opzichte van deze CYD-displays.
Hoewel ik al zo’n twee jaar een soortgelijk scherm op mijn bureau had staan, bestelde ik vol hoop deze grotere versie.
Het vorige scherm, ook van Guition, had een resolutie van 480×480 pixels en ik kreeg het niet aan de praat. De meegeleverde voorbeelden werkten niet, vanwege een lange lijst compilerfouten. En ik had geen zin om andermans code te debuggen.
Ik had goede hoop, maar was naïef. Het nieuwe scherm deed het niet beter. De meegeleverde voorbeelden, die vooraf op het scherm zijn geïnstalleerd, vormen een prima demo. Maar het was wederom een teleurstelling om de voorbeelden op deze kit werkend te krijgen.
Maar deze keer was ik vastberaden. Meer dan 40 jaar ervaring in softwareontwikkeling zou genoeg moeten zijn om dit ding werkend te krijgen.
Dit is het verhaal van mijn reis door de ontwikkelaarshel en terug.
Het project
Dit bord is gebaseerd op de nieuwste ESP32-P4 en C6 chipsets en toen ik eind januari 2026 met dit project begon, was er nog geen officiële ondersteuning voor op het Platform.io framework. Je moest in je platformio.ini-bestand naar een distributie verwijzen via een URL. En wederom was de standaardondersteuning voor het ontwikkelingsbord met 1 MB flashgeheugen en 380 KB ROM, terwijl de chipset 16 MB flashgeheugen en 500 KB ROM heeft. Dit was dus mijn eerste uitdaging: hoe kon ik deze beperking omzeilen, aangezien (en ik kom hier later op terug) mijn gecompileerde bestand groter was dan 1 MB, waardoor ik het niet naar de ESP32 kon flashen.
Ik begon met het tekenen van enkele scenario’s en UML-diagrammen voor de werking van deze applicatie:



Vervolgens werd LVGL gebruikt in de voorbeelden en het framework leek veelbelovend (althans, voor mij). Maar alle voorbeelden die je van een Chinese website moest downloaden (wat?) werkten niet (de voorbeelden waren wel in het Engels). Dit is echter een rampscenario vanuit cybersecurity perspectief. Ik had verwacht dat de voorbeelden direct uitvoerbaar zouden zijn en dat het leren van LVGL en dit soort dingen een fluitje van een cent zou zijn. Alweer mis!
Vervolgens bleek dat deze chipset zo nieuw was dat er geen ondersteuning voor was in de ArduinoGFX-bibliotheek. Dus zelfs als de voorbeelden van de juiste kwaliteit waren geweest, zouden ze niet tot uitvoerbare code hebben geleid.
En tot slot had ik mijn vaardigheden overschat (of de complexiteit van het geheel onderschat). Ik vermoed dat dit voor veel (software)ontwikkelteams geldt die hetzelfde pad bewandelen.
Dus dit is wat ik moest doen om het werkend te krijgen:
- Een werkende configuratie voor dit bord vinden, zodat ik de grafische weergave daadwerkelijk werkend kon zien. Ik vond het werk van Andruid59, die een vergelijkbaar bord had getest (onder andere voor zijn hobby). Hij liet me zien hoe ik de grafische weergave moest instellen en wees me op een werkende bibliotheek voor het touchscreen van Bitbank (Larry Bank).
- De LVGL-handleidingen gaan lezen en de voorbeelden bestuderen, zie hier. Ik begrijp dat de ontwikkelaars vanuit hun perspectief geweldig werk hebben geleverd. De bruikbaarheid voor beginners is echter beperkt. Je moet je door talloze codevoorbeelden heen worstelen zonder duidelijke uitleg van de basisprincipes. Als je dieper in de materie duikt, is de documentatie onduidelijk, omdat er alleen naar de interfaces wordt verwezen zonder uitleg. Het komt dus neer op vallen en opstaan.
pixelEDI liet me zien hoe EEZ werkt voor LVGL. Dat heeft me geholpen het LVGL-framework beter te begrijpen. Uiteindelijk gebruik ik dat framework niet, maar het heeft me wel verder geholpen. Ik kreeg het niet werkend op mijn board. (Het lijkt erop dat de load_screen-functie van LVGL ontbrak…)
Een diepgaande uitleg over het configureren van de flash-bank op de ESP32 vond ik hier en de daadwerkelijke instellingen hier, van Espressif zelf.
Ik heb me beter vertrouwd gemaakt met Git (als ik geen papieren kopie van mijn code had gemaakt, had Git al mijn met moeite opgebouwde harde werk in een oogwenk vernietigd (ik weet dat het mijn onwetendheid is; Git is meer geworden dan alleen pull, push en commits…)).
En nu schrijf ik hier over mijn ervaringen met dit project, 4 weken later, terwijl ik er helemaal opnieuw aan ben begonnen.
Wat heb ik tot nu toe bereikt?
Beginnend bij de fase “werkend krijgen” heb ik het volgende:
- een compileerbare en werkende applicatie met alle panelen die realtime data weergeven. De data is afkomstig van een gevirtualiseerde NMEA0183-generator binnen de applicatie, wat aantoont dat de rekenmodule werkt.
- permanente opslag om de totale afgelegde afstand (logboek) en instellingen voor de applicatie op te slaan. Het logboek wordt elke 10 minuten opgeslagen op de NVR. Bij snelheden rond de 7 knopen verlies je maximaal 1 zeemijl als je te vroeg uitschakelt. Naar mijn mening is dat acceptabel. Maar in de praktijk zal ik niet binnen 10 minuten na het aanmeren uitschakelen.
- de helderheid van het display kan worden geregeld met een schuifregelaar tussen 5% en 100%.
- het schakelen tussen panelen is correct geïmplementeerd (geen gedoe meer met schakelen).
- dag-, zonlicht-, dageraad- en nachtmodus zijn geïmplementeerd. Ik gebruik een omgekeerde boomstructuurfunctie om objectkleuren stuk voor stuk in te stellen, omdat de functies lv_obj_replace_style(), lv_obj_report_style_change() en lv_obj_invalidate() niet lijken te werken in mijn applicatie.
- Verwerking van NME0183-data afkomstig van een bekabelde RS-485-verbinding.
- Niveauconversie van 5V naar 3,3V voor het ESP32-bord. Voor testdoeleinden heb ik een spanningsdeler gemaakt met een weerstand van 10 kΩ en een van 5 kΩ om de 6V van de laptop te verlagen naar 3V voor het ESP32-P4-bord. Ik heb ervoor gekozen om deze op een printplaat te plaatsen in plaats van commerciële optocouplers of levelshifters.
- Per 1 maart 2026 heb ik een MVP; deze leest seriële data via een bekabelde verbinding en geeft de data weer. De gebruiker kan de instellingen aanpassen om het werkend te krijgen.