ID.nl logo
Niet kopen maar kijken: zo simuleer je een microcontrollerbordje
© gargantiopa - stock.adobe.com
Huis

Niet kopen maar kijken: zo simuleer je een microcontrollerbordje

Het aansluiten en programmeren van elektronische componenten op een microcontrollerbordje kan flink wat werk zijn. Met Wokwi simuleer je eenvoudig een ESP32, Raspberry Pi Pico of Arduino met alle bijbehorende elektronica. Zo kun je al beginnen met programmeren en verschillende dingen testen, zonder dat je telkens je breadboardopstelling hoeft aan te passen.

Na het lezen van dit artikel weet je precies hoe je met Wokwi een microcontrollerbordje kunt simuleren.

  • Start je project op
  • Voeg componenten toe
  • Plaats en verbind de componenten
  • Schrijf de benodigde code
  • Simuleren maar!

Ook interessant: Zo breid je met microcontrollers je computer uit met extra functies

Code downloaden In dit artikel worden wat voorbeelden van stukken code gegeven. Omdat overtikken van code erg foutgevoelig is, kun je die code beter downloaden en daarna bekijken of kopiëren. Zie het bestand wokwicode.txt voor de stukken code die in dit artikel genoemd worden.

Met Wokwi maak je een virtuele versie van een microcontrollerproject. Op de Wokwi-site simuleer je gratis een ESP32 (alle types), Raspberry Pi Pico, Arduino (Uno, Mega of Nano) of STM32. Maar ook allerlei elektronische componenten, zoals leds, drukknoppen, potentiometers, luidsprekers, sensors, motors en LC-displays. Bekijk voordat je begint eens de lijst met ondersteunde hardware.

Je kunt je projecten online programmeren in bijvoorbeeld MicroPython of Arduino. Je programma wordt op de gesimuleerde microcontroller uitgevoerd en het resultaat is ook in de gesimuleerde componenten te zien: leds gaan aan en uit, servomotors draaien, displays tonen de geprogrammeerde boodschappen enzovoort. Dat maakt experimenteren met elektronica wel heel eenvoudig. In dit artikel illustreren we dit met twee eenvoudige ESP32-projecten, die zelfs via internet met elkaar of andere IoT-apparaten kunnen communiceren.

1 Project starten

Wokwi is gratis te gebruiken zonder je te registreren. Je kunt bovenaan op de website eerst voor de processorfamilie kiezen of, als je even verder scrolt, eerst voor de programmeertaal. Wij scrollen naar onder en kiezen MicroPython. Daarna zie je onder Starter Templates twee miniprojectjes: Pi Pico Blink en ESP32 Blink. Beide zijn eenvoudige sjablonen om mee te beginnen.

Maar je kunt ook op New project klikken om met een volledig leeg project te beginnen. Daarna krijg je de keuze uit MicroPython op ESP32, Raspberry Pi Pico of Raspberry Pi Pico W. Wij kiezen MicroPython on ESP32.

Je krijgt links de MicroPython-code in het tabblad main.py te zien, met als inhoud een eenvoudige printopdracht. In dit tekstveld voeg je je MicroPython-code toe en erboven staat een knop waarmee je je code opslaat. Rechts zie je een ESP32-ontwikkelbordje. Hier kun je nu allerlei elektronische componenten toevoegen en met je microcontroller verbinden. Met het groene knopje bovenaan start je vervolgens de simulatie.

Begin via een startersjabloon aan je project in Wokwi.

2 Componenten toevoegen

Voeg nu aan het canvas rechts componenten toe met het blauwe plusknopje. Scrol door de lijst om te zien welke componenten je allemaal kunt toevoegen. In het onderdeel Basic zijn dat leds, drukknoppen en weerstanden. Heel ruim toebedeeld is het onderdeel Display, met RGB-leds, een SSD1306 OLED-display, allerlei tft-schermpjes, een led-dotmatrix, NeoPixel-led en -ring, zevensegmentdisplays en zelfs een e-paperscherm.

Bij Input vind je allerlei soorten schakelaars, een joystick, infraroodontvanger, keypad en potentiometers. De sensors zijn wat minder ruim toebedeeld, maar je vindt er wel onder andere de ultrasone sensor HC-SR04, de temperatuursensors DHT22, DS18B20 en een NTC, en een PIR-bewegingssensor. Het onderdeel Output heeft een piëzoelektrische zoemer, enkele motors en relays. En er zijn ook enkele formaten breadboards.

Kies als eerste een half breadboard, dat op het canvas verschijnt. Doe dan hetzelfde voor een led en een weerstand. Als je op de weerstand klikt, kun je de waarde veranderen. Maak er 220 Ohm van. De banden op de weerstand veranderen naar rood, rood en bruin om de nieuwe waarde aan te duiden. Met een klik op de led verander je de kleur, maar laat die maar rood. We hebben de voorschakelweerstand immers gekozen in functie van de spanningsval over de led.

Kies je elektronische componenten uit de lijst.

3 Componenten plaatsen en verbinden

We gaan alle componenten op de juiste plek plaatsen: klik op de ESP32 en druk dan enkele keren de R-toets in tot het ontwikkelbordje correct is georiënteerd. Sleep het boven het breadboard tot de pinheaders op de rijen b en j passen.

Plaats dan de led en de weerstand op het breadboard. Met de P-toets kun je de led eventueel nog spiegelen. Sluit dan het lange pootje (anode) van de led, wat Wokwi met een knik aanduidt, op GPIO23 aan. Als je boven de pootjes van de led blijft hangen met de muiscursor, krijg je een label te zien: A voor anode en C voor kathode.

Op dezelfde manier toont Wokwi bij elke pin van de ESP32 een label, zoals 23 voor GPIO23. De verbinding maken doe je in dit geval, omdat de led op een breadboard staat, door op a2 te klikken en dan op a28. Zo wordt GPIO23 via het breadbord verbonden met de anode van de led.

Sluit daarna het korte pootje (kathode) van de led via de voorschakelweerstand van 220 Ohm op GND van de ESP32 aan. Dat doe je door het ene pootje van de weerstand boven de kathode van de led te plaatsen. Het andere pootje verbind je met GND door erboven een verbinding met de blauwe rij te maken, en boven GND (het vakje a1) ook een verbinding met de blauwe rij te maken. Verander de kleur van die twee verbindingen naar zwart door er na het aanmaken op te klikken en dan op 0 te drukken.

Alle componenten zijn correct geplaatst en verbonden.

4 Code schrijven

Nu de virtuele hardware klaar is, kun je aan de slag met de softwarekant. Schrijf links in het codevenster van het tabblad main.py de volgende code om de led te laten knipperen:

De code kun je downloaden van deze pagina en daarna vanuit een programma als Kladblok overnemen.

We tonen in deze code met print eerst de boodschap Blink LED op de terminal van MicroPython. Dan definiëren we een led op pin 23. De rest van de code bestaat gewoon uit een oneindige lus waarin we de led een seconde aan doen en een seconde uit.

Druk dan op Ctrl+S of de knop Save bovenaan en geef je project een naam. Dat kan in de gratis versie alleen als publiek project (zie kader ‘Gratis en betaalde versie’). Klik op Save. Vanaf nu heeft je project een publieke url.

Gratis en betaalde versie De gratis versie bevat al heel wat functionaliteit. De betaalde versie kost 7 dollar per maand en heet Wokwi Club. Je kunt dan aangepaste Arduino-bibliotheken vanaf je computer uploaden, evenals willekeurige bestanden (zoals afbeeldingen of audiobestanden) om op de microSD-kaart van de virtuele microcontroller te plaatsen. Een andere mogelijkheid is dat je vanaf je computer toegang krijgt tot een webserver die je op je virtuele microcontroller draait. Je hoeft je projecten dan ook niet meer publiek op te slaan; je kunt ze privé houden.

Enkele uitbreidingen van Wokwi, zoals de integratie in Visual Studio Code en de commandline-interface Wokwi CI, zijn momenteel in bèta maar worden daarna deels betaald.

5 Simuleren

Nu je zowel de hardware als de software klaar hebt, is het tijd voor actie. Klik rechts op het groene knopje om de simulatie te starten. Onderaan verschijnt een terminalvenster waarin je de ESP32 ziet opstarten en na enkele seconden krijg je de boodschap Blink LED. Bovenaan rechts begint een timer te lopen. Je ziet ook in een snelheid van hoeveel procent van de realiteit de simulatie wordt uitgevoerd.

Na de boodschap Blink LED in de terminal begint de led zoals verwacht te knipperen met een frequentie van een seconde. Op deze manier kun je controleren of je code werkt zonder dat je zelf ook maar enige elektronische component hebt moeten aanraken.

Met de knopjes linksboven in het simulatievenster kun je de simulatie overigens herstarten, stoppen of pauzeren. Als je ze pauzeert, toont het venster ook de toestand van elke pin. Je ziet hier dat de meeste pinnen als invoer zijn geconfigureerd en Floating (ongedefinieerde waarde). GPIO23 wordt als uitvoer getoond, met de waarde Low als je gepauzeerd hebt, terwijl de led uit is en High als je juist gepauzeerd hebt terwijl de led aan is.

De led knippert in onze simulatie.

Over simuleren gesproken

Met deze racestoel kun je virtueel meedoen in de Formule 1

6 Verbinden met internet

Wokwi simuleert ook een volledig wifi-netwerk, dat zelfs toegang heeft tot internet. Laten we een wifi-verbinding opzetten, deze met een MQTT-broker verbinden en wachten op een bericht om de led in of uit te schakelen:

De code kun je downloaden van deze pagina en daarna vanuit een programma als Kladblok overnemen.

We verbinden dus eerst met het gastnetwerk Wokwi-GUEST zonder wachtwoord. Tijdens het verbinden laten we de led knipperen en wanneer de verbinding tot stand is gekomen, gaat de led aan. Daarna verbinden we met de publieke MQTT-broker broker.hivemq.com en geven als client-ID het unieke ID van de ESP32.

We definiëren een functie mqtt_message die binnenkomende MQTT-berichten afhandelt: gaat het om het cijfer 0, dan doet de functie de led uit en bij een 1 gaat de led aan. Tot slot stellen we in dat de functie voor elk binnenkomend bericht wordt aangeroepen, verbinden we met de MQTT-broker en abonneren we ons op een topic dat gelijk is aan het client-ID. Daarna wachten we in een oneindige lus op binnenkomende berichten.

7 Schuifschakelaar

Maak nu een tweede project aan. Voor de eenvoud gebruiken we weer een ESP32 met MicroPython, maar ook andere combinaties zijn mogelijk, zoals het Arduino-framework in plaats van MicroPython, of een Raspberry Pi Pico W in plaats van een ESP32.

Plaats de ESP32 weer op een breadboard. Voeg deze keer een schuifschakelaar (Slide switch onder Input) en een weerstand van 10 kOhm toe.

De schuifschakelaar heeft drie pinnetjes. De linkse verbind je met GND en de rechtse met 5V. De middelste verbind je enerzijds met GPIO23 van de ESP32 en anderzijds via een pulldownweerstand van 10 kOhm naar GND. Zo is de invoer aan de GPIO-pin altijd gedefinieerd. We gaan deze schuifschakelaar gebruiken om de led op ons andere Wokwi-project in en uit te schakelen.

Met deze schuifschakelaar gaan we berichten naar de MQTT-broker sturen.

8 Berichten sturen

In de code op dit virtuele bordje verbinden we weer met wifi en de MQTT-broker, maar daarna gaan we de toestand van de schakelaar uitlezen. Elke keer dat die toestand verandert, sturen we de nieuwe toestand naar de MQTT-broker:

De code kun je downloaden van deze pagina en daarna vanuit een programma als Kladblok overnemen.

Het begin van de code is zo goed als hetzelfde. Maar in plaats van een led definiëren we een knop. We slaan ook onmiddellijk de huidige waarde van de knop op.

Bij de verbinding met de MQTT-broker moet je er wel op letten dat je het client-ID nu verandert. Blijkbaar gebruikt Wokwi voor elke simulatie die je draait (in ieder geval in onze tests met de ESP32) hetzelfde unieke hardware-ID. We hebben dit opgelost door in deze code gewoon ff aan het hardware-ID toe te voegen. Want als een tweede MQTT-client hetzelfde client-ID gebruikt om met de MQTT-broker te verbinden, wordt de eerste client afgesloten.

Na de verbinding lezen we in een oneindige lus de toestand van de schakelaar uit. Als die verschilt van de vorige, kijken we naar de waarde: is die aan, dan publiceren we 1 op het MQTT-topic van ons andere project, anders publiceren we 0.

9 Communicatie tussen virtuele ESP32’s

Start nu beide simulaties en zet de vensters naast elkaar, zodat je ze tegelijk kunt observeren. Kijk in de terminaluitvoer en wacht tot ze allebei met de MQTT-broker verbonden zijn. Mogelijk verloopt alles nu wat trager dan voorheen, want je browser moet nu met deze twee gelijktijdige simulaties heel wat rekenwerk verrichten.

Als je nu de schuifschakelaar naar links beweegt (gewoon klikken volstaat), zie je niet alleen in de terminal van het bordje OFF verschijnen, maar je ziet ook op het breadboard van het andere project de led uitgaan. En als je de schuifschakelaar naar rechts beweegt, dan gaat de led van het andere project aan. Je hebt beide virtuele microcontrollerbordjes met internet verbonden en ze kunnen via de publieke MQTT-broker met elkaar communiceren. Je zou een van de twee zelfs door een fysieke opstelling kunnen vervangen en dan zou de communicatie ook werken.

Deze twee virtuele ESP32-ontwikkelbordjes communiceren via internet met elkaar via een publieke MQTT-broker.

10 Arduino, CircuitPython en meer

We hebben hier nu MicroPython als voorbeeld gebruikt, maar met Wokwi kun je ook Arduino-projecten simuleren. Je kunt zelfs elke Arduino-bibliotheek installeren die in de Arduino Library Manager beschikbaar is. Om ook andere Arduino-bibliotheken te gebruiken, heb je het betaalde Wokwi Club-account nodig.

Op de Raspberry Pi Pico heb je ook nog enkele andere mogelijkheden. Je kunt er CircuitPython gebruiken, een fork van MicroPython. Dan kun je ook elke bibliotheek van de Adafruit CircuitPython Bundle gebruiken. Met een ander sjabloon programmeer je de Raspberry Pi Pico met de Pico SDK in C. Verder heb je op de ESP32 ook de keuze uit ESP-IDF en de programmeertaal Rust.

Beperkingen Elke simulatie breekt op een bepaald niveau met de realiteit. Dat is niet anders met Wokwi. Zo ligt de focus op digitale elektronica. De analoge aspecten van je schakeling worden dan ook maar beperkt gesimuleerd. Als je een voorschakelweerstand vergeet bij een led, krijg je geen waarschuwing en zal je virtuele led ook niet doorbranden. Dus als je denkt je schakeling veilig te hebben getest in Wokwi en dan op een fysiek breadboard opbouwt, is het goed mogelijk dat het daar mis gaat.

Je kunt ook geen condensatoren en complexere elektronische componenten toevoegen. Bovendien worden niet alle mogelijkheden van de microcontrollers ondersteund. Zo kun je geen bluetooth of deep sleep simuleren voor de ESP32. Betalende gebruikers mogen overigens wel stemmen op functies waaraan Wokwi gaat werken.

Watch on YouTube
▼ Volgende artikel
Waar voor je geld: 5 smartphones met eSim onder de 400 euro
Huis

Waar voor je geld: 5 smartphones met eSim onder de 400 euro

Bij ID.nl zijn we gek op producten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we daarom binnen een bepaald thema naar zulke deals. Op zoek naar een betaalbare smartphone, maar dan wel eentje met een virtuele simkaart? De redactie van ID.nl is voor je op zoek gegaan naar smartphones met een prijskaartje van onder de 400 euro.

Met een eSim ben je niet meer afhankelijk van een fysiek simkaartje en heb je geen gepriegel meer met het plaatsen van je sim in de telefoon. Je kunt daardoor snel van provider wisselen zonder gedoe. Ideaal als je veel op reis bent, omdat je op deze manier eenvoudig internationale abonnementen kunt activeren. Daarnaast kun je op die manier ook gebruik maken van meerdere telefoonnummers op een enkel toestel, bijvoorbeeld eentje voor werk en prive. De mooiste toestellen met eSim en onder de 400 euro vind je hier.

Sony Xperia 10 VI

De Sony Xperia 10 VI is een compacte smartphone met een focus op multimedia. Het 6,1-inch FHD+ OLED-scherm met een 21:9 beeldverhouding is ideaal voor het bekijken van films. Aangedreven door de Snapdragon 6 Gen 1-chipset en uitgerust met 8 GB RAM, biedt het toestel soepele prestaties.

De 48 MP hoofdcamera legt gedetailleerde foto's vast, terwijl de 5000 mAh batterij zorgt voor langdurig gebruik. Met IP68-certificering is het toestel bestand tegen water en stof.

Samsung Galaxy A26 5G

De Galaxy A26 5G combineert een slank ontwerp met krachtige prestaties. Het 6,7-inch FHD+ Super AMOLED-display biedt levendige kleuren en vloeiende beelden dankzij de 120 Hz verversingssnelheid. Onder de motorkap bevindt zich de Exynos 1380-chipset, ondersteund door 4 tot 8 GB RAM, wat zorgt voor soepele multitasking.

De 50 MP hoofdcamera met optische beeldstabilisatie legt scherpe foto's vast, zelfs bij weinig licht. Met een batterijcapaciteit van 5000 mAh en IP67-certificering is dit toestel zowel duurzaam als betrouwbaar. Bovendien belooft Samsung tot zes jaar beveiligingsupdates, wat de levensduur van het apparaat verlengt.

Motorola Edge 60 Fusion 

De Motorola Edge 60 Fusion is een elegant middelklasse-smartphone die indruk maakt met zijn moderne design en degelijke prestaties. Hij beschikt over een indrukwekkend 6,67‑inch pOLED‑scherm met Super‑HD-resolutie (1 220 × 2 712 pixels), 120 Hz ververssnelheid en HDR10+, beschermd door Gorilla Glass 7i — en dat op alle vier de schermranden. De 50 MP hoofdcamera met optische beeldstabilisatie (OIS) en 13 MP ultragroothoeklens leveren scherpe beelden, terwijl de 32 MP frontcamera mooie selfies maakt.

Motorola Moto G35 5G

De Motorola Moto G35 5G biedt solide prestaties voor een betaalbare prijs. Het 6,72-inch LCD-scherm met een verversingssnelheid van 120 Hz zorgt voor vloeiende beelden. De 50 MP Quad Pixel-camera levert scherpe foto's, zelfs bij weinig licht.

Met een batterijcapaciteit van 5000 mAh en ondersteuning voor 5G-connectiviteit blijf je de hele dag verbonden. Hoewel de Unisoc T760-processor niet de snelste is, biedt het toestel voldoende kracht voor dagelijks gebruik.

Samsung Galaxy A35 5G

De Galaxy A35 5G biedt premium functies in een betaalbaar jasje. Het 6,6-inch FHD+ Super AMOLED-display met een verversingssnelheid van 120 Hz zorgt voor heldere en vloeiende beelden. De 50 MP hoofdcamera met optische beeldstabilisatie legt scherpe foto's vast, terwijl de 13 MP selfiecamera zorgt voor duidelijke zelfportretten.

Aangedreven door de Exynos 1380-chipset en beschikbaar met tot 12 GB RAM, biedt het toestel krachtige prestaties. De 5000 mAh batterij ondersteunt 25W snelladen, en Samsung belooft tot vijf jaar beveiligingsupdates.

▼ Volgende artikel
Nieuwe Fairphones standaard geleverd met 'digitaal rijbewijs' voor jongeren
© insta_photos
Huis

Nieuwe Fairphones standaard geleverd met 'digitaal rijbewijs' voor jongeren

Fairphone gaat vanaf deze maand elk nieuw toestel in Europa standaard leveren met ChatLicense, een app die jongeren en ouders helpt verantwoord om te gaan met de eerste smartphone. De samenwerking moet bijdragen aan meer digitale weerbaarheid en sluit aan bij Fairphones missie om technologie niet alleen duurzaam te produceren, maar ook bewust te gebruiken.

ChatLicense is bedoeld voor gezinnen die hun kind een eerste smartphone geven. De app neemt kinderen mee in een leertraject met korte video's, animaties en quizvragen over onderwerpen als sociale media, chat-apps en online veiligheid. Bij elke stap verdienen ze een stukje van hun 'digitale rijbewijs'. Voor ouders is er een begeleidende gids met gespreksstarters en uitleg, zodat het gesprek thuis vanzelf op gang komt. De methode is gebaseerd op onderzoek van de Erasmus Universiteit Rotterdam en legt de nadruk op leren en weerbaarheid, in plaats van alleen beperken en controleren.

Lees hier onze review van de Fairphone 6

Fairphone Moments

Voor Fairphone sluit de samenwerking aan op eerdere stappen richting bewuster gebruik. Bij de introductie van de Fairphone 6 kwam ook Fairphone Moments, een fysieke knop waarmee gebruikers hun toestel direct in een minimalistische modus kunnen zetten. In die stand worden meldingen en apps sterk teruggebracht, zodat schermtijd vanzelf afneemt. Dat blijkt niet alleen handig voor jongeren, maar ook voor volwassenen die wat meer rust zoeken. Met ChatLicense komt daar nu een educatieve laag bovenop, die vooral gezinnen met jonge kinderen helpt bij de eerste kennismaking met een smartphone.

©Fairphone

Zorgen over schermtijd

De timing is niet helemaal toevallig. Steeds meer ouders maken zich zorgen over hoeveel tijd hun kinderen online doorbrengen en of ze wel voldoende zijn voorbereid op risico's als cyberpesten of misleidende informatie. Uit onderzoek blijkt dat kinderen vaak al rond hun tiende of elfde verjaardag een eigen toestel krijgen, terwijl duidelijke afspraken thuis niet altijd aanwezig zijn. Scholen en gemeenten proberen die digitale opvoeding wel te ondersteunen, maar het gesprek blijft in gezinnen vaak lastig. Door ChatLicense standaard mee te leveren bij elk toestel, hoopt Fairphone een praktische drempel weg te nemen en gezinnen direct iets in handen te geven.

Wat is ChatLicense?

ChatLicense werd eind 2023 in Nederland gelanceerd en heeft zich sindsdien uitgebreid naar meerdere Europese landen. De app kreeg goede beoordelingen in de appstores, onder meer door de speelse insteek en het ontbreken van advertenties of dataverzameling voor commerciële doeleinden. Voor veel ouders is dat een geruststelling, omdat juist die afhankelijkheid van techbedrijven vaak een punt van zorg is. De makers benadrukken dat de inhoud in samenwerking met wetenschappers en pedagogen wordt ontwikkeld, zodat kinderen niet alleen technische kennis opdoen, maar ook vaardigheden om bewust en kritisch online te zijn.

©Fairphone

Een bredere standaard

Met de bundeling van ChatLicense en Fairphone krijgen kinderen die hun eerste smartphone ontvangen voortaan dus niet alleen een mooie nieuwe telefoon, maar ook een digitale opleiding. Daarmee gaat Fairphone verder dan alleen het maken van duurzame hardware; het bedrijf wil immers ook bijdragen aan bewuster gebruik van zo'n toestel. Of het daadwerkelijk leidt tot een nieuwe standaard in de industrie, zal de komende jaren moeten blijken. Maar hé, een stukje bewustwording kan natuurlijk sowieso geen kwaad.