ID.nl logo
Python programmeren op microcontrollers
Huis

Python programmeren op microcontrollers

Python is een populaire programmeertaal, maar die wordt meestal alleen op computers gebruikt. Ook op het kleine computerbordje Raspberry Pi is de taal populair. Wil je microcontrollers programmeren, die nog minder krachtig zijn, dan is Python niet geschikt. Maar er is een versie van Python voor microcontrollers: MicroPython. Onder meer de Raspberry Pi Pico en de BBC micro:bit 2 worden ondersteund.

Python is een programmeertaal die bekendstaat om zijn leesbaarheid. Deze taal is relatief gemakkelijk te leren en je kunt met vrij weinig regels code al mooie resultaten verkrijgen. En tegelijk is het een krachtige taal, die veel in de industrie wordt gebruikt. Zo zijn de grootste projecten voor machinaal leren in Python geschreven.

01 Python voor microcontrollers

Terwijl Python heel efficiënt is voor de programmeur, is de taal niet efficiënt voor de processor. Op je computer en zelfs op een Raspberry Pi is dat doorgaans geen probleem, want die hebben voldoende rekenkracht en geheugen. Maar microcontrollers (zie het kader ‘Wat is een microcontroller?’) hebben geen gigahertzen en gigabytes tot hun beschikking. Daarom worden ze doorgaans geprogrammeerd in een taal zoals C.

MicroPython biedt hiervoor een oplossing: het is een efficiënte implementatie van de taal, geoptimaliseerd voor microcontrollers. Deze taal biedt bovendien een subset van de standaardbibliotheek van Python, zodat je de meestgebruikte Python-modules ook op microcontrollers kunt inzetten. Als je geen geavanceerde zaken of externe modules gebruikt, kun je gewoon Python-code die op je computer of Raspberry Pi draait, overzetten naar een ondersteunde microcontroller.

©PXimport

Wat is een microcontroller?

Een microcontroller is een chip die eigenlijk een hele computer in één pakket bevat. Daarin zitten een processor, geheugen (RAM en ROM) en allerlei poorten naar de buitenwereld. Microcontrollers zijn ontworpen om specifieke toepassingen uit te voeren, zoals in een magnetron, pinautomaat, wasmachine of een pacemaker. Een laag stroomverbruik en een lage kostprijs zijn voor die toepassingen belangrijk, en dat betekent dus ook lagere prestaties en minder geheugen. In de praktijk gebruik je niet de microcontroller zelf, maar een ontwikkelbordje, zoals de Raspberry Pi Pico met de RP2040-microcontroller of de BBC micro:bit 2 met de Nordic nRF52833-microcontroller. Overigens bevatten beide bordjes nog een tweede microcontroller, namelijk voor de usb-communicatie.

02 Ondersteunde microcontrollers

De ontwikkelaar van MicroPython heeft een ontwikkelbordje gemaakt dat officieel wordt ondersteund, het pyboard. Maar ondertussen is er ook ondersteuning toegevoegd voor talloze andere microcontrollerplatformen. We gebruiken twee populaire bordjes in deze masterclass: de Raspberry Pi Pico en de BBC micro:bit 2.

De Raspberry Pi Pico (of kortweg Pico) is een kaal printplaatje van de Raspberry Pi Foundation. Het hart bestaat uit de RP2040, een microcontroller die de stichting achter de Raspberry Pi zelf heeft ontwikkeld. Je zou het bordje als een krachtiger alternatief voor de Arduino-bordjes kunnen beschouwen. Soldeer je er een pinheader op, dan kun je allerlei elektronische componenten aansturen.

De BBC micro:bit 2 is een heel ander bordje: het heeft een ledmatrix ingebouwd, knoppen, een aanraaksensor, accelerometer, magnetometer, microfoon en een luidspreker. Daardoor is dit het ideale microcontrollerbordje om mee te experimenteren als je je nog niet comfortabel voelt om elektronische componenten te hanteren en te solderen. Als je nog de eerste versie van dit bordje hebt, kun je die ook nog met MicroPython gebruiken.

03 Zet MicroPython op de Pico

We gaan eerst aan de slag met de Raspberry Pi Pico. Eerst dien je MicroPython in het flashgeheugen te zetten. Download daarvoor het UF2-bestand van MicroPython voor dit bordje. Op het moment van schrijven was de recentste versie rp2-pico-20210202-v1.14.uf2, maar er staan ook enkele nieuwere ‘unstable’ versies. Laat je niet afschrikken door de term unstable: zelfs de website van de Raspberry Pi Foundation verwijst naar de unstable versies. Download gewoon de recentste.

Sluit daarna een usb-kabel aan op de micro-usb-poort van de Pico, houd de witte knop BOOTSEL op het bordje ingedrukt en steek dan de andere kant van de kabel in een usb-poort van je computer. Laat daarna de knop los. De interne opslag wordt nu aangekoppeld als opslagapparaat. Dat werkt zowel in Windows als Linux en macOS. Kopieer nu gewoon het UF2-bestand naar de schijf van je Pico. Daarna wordt de schijf ontkoppeld en reboot de microcontroller. Er draait nu MicroPython op.

©PXimport

04 Installeer Thonny

De gemakkelijkste manier om Python-opdrachten op de Pico uit te voeren, is met een ontwikkelomgeving die MicroPython ondersteunt. Thonny is er daar één van en ook nog eens gebruiksvriendelijk voor beginners. Download wel de nieuwste versie. Heb je al een oudere versie, upgrade die dan. Gebruik je Linux, installeer dan niet de oudere versie uit de repository van je distributie, maar installeer de nieuwste met pip:

pip3 install thonny

Open in Thonny het menu Tools / Options en ga naar het tabblad Interpreter. Kies daar in de uitklaplijst MicroPython (Raspberry Pi Pico). Onder Port kies je in de uitklaplijst het herkende bordje. Onder Linux is dat bijvoorbeeld Board in FS mode - Board CDC (/dev/ttyACM0). Bevestig onderaan met OK.

©PXimport

05 De interface van Thonny

Je ziet nu rechts onderaan in Thonny MicroPython (Raspberry Pi Pico) staan. Dat is het teken dat Thonny met je Pico is verbonden. Linksboven zie je een leeg tekstveld waar je een programma kunt intypen. Rechtsboven zie je in het tabblad Variables de modules machine en rp2 vermeld. Dat zijn de MicroPython-modules die toegang geven tot specifieke functionaliteit van de Pico.

Linksonder vind je het tabblad shell. Hier kun je Python-opdrachten invullen, die onmiddellijk uitgevoerd worden op de Pico. Dit venster is je rechtstreekse verbinding met de MicroPython-software die op de Pico draait. Je ziet dat aan de regel MicroPython v1.14 on 2021-03-10; Raspberry Pi Pico with RP2040. De regels ervoor gaf de shell je toegang tot Python op je computer.

©PXimport

06 Schakel de led in

De regel >>> is de opdrachtprompt, die aanduidt dat je hierachter je Python-opdrachten kunt invoeren. Voer nu na die >>>-prompt achtereenvolgens de volgende opdrachten in:

from machine import Pin

led = Pin(25, Pin.OUT)

led.value(1)

Met de eerste opdracht importeer je de klasse Pin uit de module machine, waarna die ook in het tabblad Variables wordt toegevoegd. Daarna definieer je een variabele led die verwijst naar pin 25 die je als uitvoer configureert. GPIO25, zoals pin 25 ook wordt genoemd, is intern verbonden met de led die je naast de micro-usb-poort op het bordje ziet. Ook deze variabele wordt in het tabblad Variables toegevoegd.

De derde opdracht schrijft tot slot de waarde 1 naar pin 25, met als resultaat dat de led aan gaat. Als je de led nu weer wilt uitschakelen, typ je in de shell:

led.value(0)

©PXimport

07 Programma schrijven

Als de led aan is en je de Pico afkoppelt en weer aansluit, blijft de toestand niet behouden: de led is weer uit. Dat is zo omdat je handmatig opdrachten invoerde en er geen programma op de Pico draaide. Maar je kunt ook een programma in het flashgeheugen van de Pico schrijven, dat altijd draait zodra je het bordje opstart.

Typ daarvoor de volgende code in het tekstveld links bovenaan in:

from machine import Pin, Timer

led = Pin(25, Pin.OUT)

tim = Timer()

def tick(timer):

global led

led.toggle()

tim.init(freq=5, mode=Timer.PERIODIC, callback=tick)

Dit stukje code definieert een led, maar ook een timer. De functie tick die daarna komt, schakelt de led telkens over van aan naar uit en andersom. Omdat de toestand van de led bij opeenvolgende aanroepen behouden moet blijven, wordt de variabele led daar als global gedefinieerd. In de laatste regel start de code een timer die 5 keer per seconde de functie tick aanroept.

08 Programma op de Pico

Klik daarna op het icoontje van de groene cirkel met de witte driehoek (Run current script) en selecteer Raspberry Pi Pico als de plaats om het script in op te slaan. Kies als bestandsnaam main.py. De led op de Pico begint nu vijf keer per seconde te knipperen, en als je de usb-kabel uittrekt en weer aansluit, begint de led onmiddellijk weer te knipperen. Het programma staat nu in het flashgeheugen en wordt automatisch uitgevoerd.

Dit is een basisprogramma in MicroPython voor de Raspberry Pi Pico, maar uiteraard is er nog veel meer mogelijk als je elektronische componenten gaat aansluiten. Je kunt externe leds aansturen, knoppen inlezen, maar ook een schermpje en sensoren aansluiten. Je zult dan twee pinheaders aan de zijkanten van de Pico moeten solderen om het bordje in een breadboard te kunnen steken. Maar de BBC micro:bit 2 heeft standaard al heel wat componenten ingebouwd, dus laten we daar eens naar kijken.

©PXimport

09 Zet MicroPython op de BBC micro:bit 2

Voordat je MicroPython op de BBC micro:bit 2 zet, download je het best de nieuwste firmware. Houd de resetknop naast de micro-usb-poort op de micro:bit 2 ingedrukt, sluit de usb-kabel op je computer aan en laat de knop dan los. Je computer ziet nu een schijf met de naam MAINTENANCE. Kopieer het hex-bestand met de firmware naar die schijf.

De eenvoudigste manier om MicroPython op de BBC micro:bit 2 te zetten, is om de site te bezoeken en de voorbeeldcode die er zichtbaar is naar het bordje te schrijven. Dat werkt overigens alleen in Chrome of een Chrome-gebaseerde browser, omdat die WebUSB gebruikt. Klik bovenaan links op Connect terwijl je micro:bit 2 is aangesloten. Kies dan het apparaat dat verschijnt. Als alles goed is, ben je nu verbonden en verandert de knop in Disconnect.

Klik daarna links bovenaan op Flash. Dit duurt de eerste keer lang omdat MicroPython zelf wordt weggeschreven. Daarna draait het voorbeeldprogramma, dat continu de tekst ‘Hello, World!’ laat scrollen en daarna een hartje laat zien.

©PXimport

10 Afbeeldingen

In de eerste regel van de voorbeeldcode importeer je alles uit de module microbit. Een van de belangrijkste onderdelen is het object display, waarmee je tekst kunt laten scrollen of afbeeldingen kunt tonen op de 5x5-ledmatrix. De micro:bit-module heeft al heel wat voorgedefinieerde afbeeldingen, zoals Image.HEART, Image.SMILE en Image.PACMAN.

Je kunt de ledmatrix ook meerdere afbeeldingen achter elkaar laten tonen, als een soort animatie. Dan geef je in MicroPython gewoon een lijst van de afbeeldingen door en de tijd tussen de afbeeldingen. De module heeft ook al enkele lijsten voorgedefinieerd, bijvoorbeeld van alle klokken:

from microbit import *

display.show(Image.ALL_CLOCKS, loop=True, delay=100)

Als je nu weer op Flash drukt bovenaan links in de webeditor voor de micro:bit 2, laat dit een wijzer van een klok ronddraaien.

11 Knoppen

De micro:bit 2 heeft ook twee knoppen: links de knop A en rechts de knop B. Je laat de micro:bit reageren op het indrukken van een knop door continu te controleren of beide knoppen zijn ingedrukt en dan iets anders op de ledmatrix te tonen. Dat gaat als volgt:

from microbit import *

while True:

if button_a.is_pressed():

display.show(Image.ARROW_W)

elif button_b.is_pressed():

display.show(Image.ARROW_E)

else:

display.clear()

Met while True: voer je een oneindige lus uit. Als knop A ingedrukt is, komt er een pijl naar links in beeld. Als knop B ingedrukt is, een pijl naar rechts. En als er niets ingedrukt is, dan blijft de ledmatrix leeg.

©PXimport

12 Dobbelsteen

Net zoals je in een while-lus kunt controleren of de knoppen zijn ingedrukt, kun je ook de ingebouwde sensoren van de micro:bit 2 uitlezen. Een interessante is de accelerometer. De micro:bit-module heeft zelfs enkele gebruiksvriendelijke methodes gedefinieerd die de ruwe waardes al interpreteren.

Zo kun je eenvoudig controleren of je met de micro:bit 2 schudt, en dan een muziekje afspelen en een willekeurig getal van 1 tot 6 tonen. Een elektronische dobbelsteen dus:

from microbit import *

import music

import random

while True:

if accelerometer.was_gesture('shake'):

display.clear()

music.play(music.POWER_UP)

display.show(random.randint(1, 6))

Een mooiere versie hiervan zet elk getal om in een afbeelding:

from microbit import *

import music

import random

numbers = [Image("00000:00000:00900:00000:00000"),

Image("00000:00000:90009:00000:00000"),

Image("00009:00000:00900:00000:90000"),

Image("90009:00000:00000:00000:90009"),

Image("90009:00000:00900:00000:90009"),

Image("90009:00000:90009:00000:90009")]

while True:

if accelerometer.was_gesture('shake'):

display.clear()

music.play(music.POWER_UP)

number = random.randint(1, 6)

display.show(numbers[number-1])

De lijst numbers bevat afbeeldingen van de cijfers 1 tot en met 6, waarbij je elke afbeelding led per led opbouwt. Een 0 schakelt de led uit en een 9 zet de led op maximale helderheid. Tussen elke regel van vijf pixels zet je een dubbele punt.

©PXimport

13 PIR-sensor aansluiten

Aan de onderkant van de micro:bit 2 zit een goudgekleurde strook met delen 0, 1, 2, 3V en GND, waarop je met krokodillenklemmen externe componenten kunt aansluiten. Je hebt hier dus geen breadboard en jumperwires voor nodig. Hier sluit je bijvoorbeeld een PIR-sensor op aan, die beweging detecteert.

Een PIR-sensor heeft normaal drie pinnen. Bij de AM312, een kleine sensor die je voor enkele euro’s koopt, heten die pinnen VIN, OUT en GND. VIN sluit je met een krokodillenklem op 3V van de micro:bit aan, OUT op 0 en GND op GND. Zorg dat de krokodillenklemmen elkaar en/of de andere pinnen niet raken.

©PXimport

14 Bewegingsdetectie

Als je dit aangesloten hebt, kun je van je micro:bit 2 een bewegingsmelder maken. De code daarvoor is eenvoudig:

from microbit import *

while True:

if pin0.read_digital():

display.show(Image.SQUARE)

else:

display.clear()

Je leest in dit script continu de digitale waarde van pin 0 in. De PIR zet een spanning van 3,3 V op de pin als hij beweging detecteert en dan leest de micro:bit 2 een 1 in. De code toont dan een vierkant op het scherm (de ledmatrix). Wanneer er geen beweging is, zet de PIR een spanning van 0 V op de pin, en leest de micro:bit 2 een 0 in. In dat geval wordt het scherm leeggemaakt.

©PXimport

CircuitPython

Er bestaat nog een andere versie van Python voor microcontrollers: CircuitPython. Dit is een afsplitsing van MicroPython die wordt ontwikkeld door Adafruit, bekend van allerlei elektronicaproducten. CircuitPython ondersteunt de microcontrollerbordjes van Adafruit gebaseerd op een Atmel SAMD21, Atmel SAMD51 of Nordic nRF52840. In de praktijk lijkt CircuitPython veel op MicroPython en je kunt veel kennis die je hebt opgebouwd met de ene versie ook gebruiken voor de andere. Als je hardware van Adafruit gebruikt, heeft CircuitPython als voordeel dat het modules bevat om alle Adafruit-hardware te gebruiken.

©PXimport

▼ Volgende artikel
Rijden met de nieuwe Renault 5: Overtreft alle verwachtingen
Mobiliteit

Rijden met de nieuwe Renault 5: Overtreft alle verwachtingen

Het is verreweg de belangrijkste auto die het merk sinds lange tijd introduceert. Met de nieuwe Renault 5 geeft het merk een flinke slinger aan zijn Renaulution. Een strategie waarmee het merk de snel veranderende automarkt met al zijn facetten omarmt. Technologie, connectiviteit en schone energie: Renault heeft een duidelijk een stip op de horizon geplaatst. De eerste kilometers achter het stuur van de nieuwe Renault 5, die vanaf 27.990 euro bestelbaar is, tonen aan dat de eerste Renaulution-vrucht een absolute gouden zet blijkt te zijn.

Download nu GRATIS het EV Duurtest-rapport 2024!

In het EV Duurtest-rapport zijn nieuwe elektrische auto's door verschillende consumenten getest. Alle resultaten vind je terug in dit digitale rapport. Door het invullen van je naam en e-mailadres meld je je aan voor ontvangst van het Kieskeurig EV Duurtest-rapport. Tevens ben je ingeschreven voor de Kieskeurig.nl EV-nieuwsbrief.

Duimpjes gegarandeerd

Begin dit jaar mocht ik er in een studio nabij Parijs al aan snuffelen. De wedergeboorte van een icoon, de nieuwe Renault 5. Goed een half jaar later staat er een knalgele (Jaune Pop) Iconic Cinq uitvoering op mij te wachten. Het merk wil met de nieuwe 5 zowel de oude generatie, zij die zich het origineel nog goed kunnen herinneren, als de jonge garde aanspreken. Een uitdaging, maar mede dankzij designtermen als 'retro futuristisch' heb ik zelden gedurende een intro zoveel enthousiaste reacties mogen ontvangen. Van jong tot oud, van surfer tot mondaine dame. De duimpjes waren haast ontelbaar!

Bekijk onderaan dit artikel een video van de nieuwe Renault 5!

©Irwin Versteegh

Standaard 18 inch

De nieuwe 5 rolt standaard op 18inch-wielen en dat geeft 'm samen met de goede proporties een sterk voorkomen. Stap ik achter het stuur, dan valt direct de lage en sportieve instap op. Ik zak weg in prima gevormd meubilair en dankzij een axiaal verstelbaar stuurwiel is een goede zitpositie snel gevonden. 

🚘Ook interessant: EV-profiel Renault Scenic E-Tech: Is de 'Auto van het Jaar 2024' écht zo goed?

©Irwin Versteegh

Andere zit dan verwacht

Toch moet ik voor de juiste ondersteuning van mijn bovenbenen net iets verder naar achteren gaan zitten. Een kantelbare zitting zou hier uitkomst bieden. Iets wat met name voor passagiers op de achterbank bovendien wat ademruimte zou verschaffen. Achter mijzelf plaatsnemen, zat er namelijk niet in. 

©Irwin Versteegh

Ontdek jouw ideale elektrische auto

Vergelijk en vind de beste deals op Kieskeurig.nl!

Ruim genoeg voor bagage

De kofferruimte blijkt ook in de praktijk prima bruikbaar. 320 liter is conform het segment en bleek ruim voldoende voor twee handbagage-reiskoffers en twee rugtassen. Staan de voorstoelen vrij ver naar achteren, dan zul je de hoofdsteunen van de achterbankleuning moeten verwijderen als je deze neer wilt klappen. 

©Irwin Versteegh

Vanaf 27.990 euro

De nieuwe Renault 5 komt er met twee accu's en voorlopig twee elektromotoren. Later volgt een derde met zo’n 90 pk. De Urban Range met 40kWh en 327 km range is leverbaar vanaf 27.990 euro. Je krijgt dan een 120 pk sterke elektromotor. De Techno-uitvoering is 2 mille duurder en de compleetste Iconic Cinq kost 31.490 euro. Voor net geen 30 mille stap je in de Comfort Range Techno. Die heeft een 52kWh batterij, een 150 pk sterke motor en een bereik van 410 kilometer volgens de WLTP-testmethode. Standaard zijn een 3-Fase 11kW boordlader, een warmtepomp en een snellaadtijd van 30 minuten. 

©Irwin Versteegh

Overtreft verwachtingen

Gedurende de dynamisch introductie heb ik zo'n 200 kilometer in het Vijfje afgelegd. Uiterst plezierige kilometers welteverstaan, want qua rijkwaliteit en plezier overtreft 'ie mijn verwachtingen. De 5 is zo wendbaar als een dartele poedel! De zeer directe (soms iets te directe) stuurinstallatie zorgt met het lage zwaartepunt van het gloednieuwe – toegewijd EV – AmpR Small platform voor een middenmotor-achtige ervaring. De 5 bijt zich in elke bocht vast, voelt fantastisch wendbaar en mede dankzij – uniek in deze klasse – een mooie Multilink-ophanging voor de achteras ligt de grens ver voorbij die van plezier.

©Irwin Versteegh

MINI-rijders kunnen naar Renault

En dit alles in combinatie met een verrassend verfijnde rijervaring. Binnen de bebouwde kom is-ie verre van 'te stug' en ondanks dat 'ie op een verkeersdrempel soms iets vergevingsgezinder zou mogen zijn, stoort dit niet. De nieuwe 5 blijkt op dit vlak zo goed, dat 'ie zelfs MINI-rijders zou weten te overtuigen. Zeker ook gezien het feit dat hij zich op de snelweg bovendien ontpopt als een fijne cruiser met een C-segment-waardige geluidsisolatie. 

Meer weten over de nieuwe Renault 5? Bekijk dan de video van InstaAutoVlog. 

Watch on YouTube

 

▼ Volgende artikel
Scherm delen via WhatsApp: zo werkt het
Huis

Scherm delen via WhatsApp: zo werkt het

Net zoals je op de pc je scherm kunt delen met een tool als TeamViewer, kun je ook je scherm delen via WhatsApp. Dit lukt zowel in een een-op-eengesprek als in een groepsgesprek. Handig als je iets op je smartphone wilt laten zien of uitleggen.

In drie eenvoudige stappen laten we zien hoe je in WhatsApp je scherm kunt delen, zodat je iets aan een ander kunt laten zien:

  • Videogesprek starten
  • Scherm delen
  • Delen stoppen

Lees ook: Privacy op WhatsApp beschermen: zo doe je dat

1 Videogesprek

Deze functie werkt zowel op de Android-, iOS- als Windows-app, maar alleen als je een videogesprek bent gestart. De optie werkt dus niet tijdens WhatsApp-spraakgesprekken. Heb je een Android-telefoon dan kun je overigens probleemloos je scherm delen met iemand met een iPhone en andersom. Houd er wel rekening mee dat alles wat op je scherm te zien is, zichtbaar wordt voor je gesprekspartner. Kijk dus uit als er bijvoorbeeld bankgegevens, foto’s of andere gevoelige informatie op het scherm staan. Net als de berichten en oproepen, versleutelt WhatsApp de inhoud van schermdeling voor extra beveiliging.

2 Laat de ander meekijken

Nieuw is dat je nu ook de audio van je smartphone op die manier kunt delen. Start een videogesprek op de gebruikelijke manier en je ziet onderaan bij de bedieningsknoppen een pictogram met drie horizontale stippen: tik hierop en klik op Deel scherm (iOS) of Scherm delen (Android). Vervolgens verschijnt er een korte uitleg van deze functie. Ga door en tik op Start uitzending (iOS) of Nu starten (Android). Hierdoor wordt de schermdeling gestart; vanaf nu kan de ander alles volgen wat er bij jou op je scherm gebeurt. Zo kun je bijvoorbeeld teruggaan naar het homescreen en ook andere apps openen terwijl de ander meekijkt. Wanneer je dit scherm verlaat, keer je terug naar het videogesprek in WhatsApp.

Handig om te weten! Ken je deze 8 handigheidjes in WhatsApp al?

3 Schermdeling stoppen

Ook iedereen die deelneemt aan een groepsvideogesprek kan een schermdeling-sessie starten. Er kan echter maar één persoon tegelijk zijn scherm delen. Om op een Android-telefoon te stoppen met delen, keer je terug naar het WhatsApp-videogesprek en tik je op Stoppen met delen. Op de iPhone tik je op het groene pictogram in de linkerbovenhoek van de statusbalk van de iPhone. Daarna tik je op de rode knop in het centrum van het scherm.

Watch on YouTube