GPIO-pinnen en Python – event-lus met asynchrone functies

Marco den Teuling
0

Bij de Raspberry Pi GPIO-pinnen en Python kun je een event-lus gebruiken om de toestand van pinnen te controleren. Als je daar asynchrone functies bij gebruikt werkt het nog beter.

Het eerdere voorbeeld in het artikel over de toestand van de GPIO-pinnen uitlezen sjoemelt een beetje, omdat het een oneindige while-lus bevat met een sleep()-commando. Je kunt dat verbeteren door asynchrone functies te gebruiken bij event-lussen.


event-lussen gpio-pinnen python


Event-lussen met GPIO-pinnen in Python

De oneindige while-lus met sleep()-commando zoals we die in het eerdere voorbeeld gebruikten is niet optimaal. De belasting die dat oplevert is te verwaarlozen, maar een nette oplossing is om de while-lus te vervangen door de volgende constructie met asynchrone functies:

try:

loop = asyncio.get_event_loop()

loop.run_forever()

except:

loop.close()

Aan het begin van het programma, dat je in zijn geheel kunt downloaden bij de link onderaan de pagina, wordt hiervoor de bibliotheek voor asynchrone input/output geladen met import asyncio.

Die bibliotheek is erg handig voor event-lussen in je eigen Python-programma’s.


Ontvang gratis workshops over Raspberry Pi en Python, schrijf je in voor de nieuwsbrief:


De bibliotheek voor asynchronone functies gebruiken

De bibliotheek voor asynchrone functies is de sleutel tot event-driven programmeren. Daarbij kunnen functies asynchroon parallel worden uitgevoerd op bijvoorbeeld processors met meerdere kernen, zoals in de Raspberry Pi 4.

Gewoonlijk bevatten dergelijke programma’s slechts een paar regels voor initialisatie en een groot aantal functies die dienen als event-handlers.

Tijdens het initialiseren wordt de event-loop aangemaakt, bijvoorbeeld met de functie get_event_loop() en vervolgens worden, zo nodig, event-handlers geregistreerd.

Daarna zorgt de functie run_forever() ervoor dat het programma blijft lopen, ook als er op dat moment geen commando’s zijn om uit te voeren.

Als er later taken bijkomen, worden die aan de lopende event-loop toegevoegd en verwerkt zodra ze aan de beurt komen.

Voorbeeldproject downloaden

In c’t 4/2022 vind je het complete Python-voorbeeldproject beschreven, waarbij we een voetschakelaar aansluiten op de GPIO-pinnen van de Raspberry Pi om het programma OBS-studio aan te sturen.

GPIO-pinnen voor voetschakelaar gebruiken

De complete Python-code, waarin een event-lus met asychrone functies wordt gebruikt, kun je downloaden en als voorbeeld gebruiken voor je eigen code.

Meer doen met de Raspberry Pi GPIO-pinnen

De Raspberry Pi dankt zijn succes in de hobbywereld aan zijn GPIO-aansluitingen. Met de juiste Python-bibliotheek en onze instructies lukken zelfs complexe taken.

In de inleiding Raspberry Pi GPIO pinnen: een overzicht van de aansluitingen wordt de lay-out van de GPIO-pinnen beschreven.

In deze serie komen de volgende onderwerpen aan bod:

Meer projecten voor de Raspberry Pi vind je bij Raspberry Pi projects

(Deze informatie is afkomstig uit het artikel in c’t 4/2022, pagina 134, van Mirko Dölle en Marco den Teuling)

Meer tips voor de Raspberry Pi vind je in c't magazine mei/2022

Deel dit artikel

Lees ook

Windows Subsystem for Linux installeren met commandline

Tijdens de ontwikkeling varieerden de tips om Windows Subsystem for Linux (2) te installeren. Nu is de commandline de handigste manier. We beschrijven...

Windows Subsystem for Linux – een kijkje in de virtuele machine

De Linux-omgevingen in Windows Subsystem for Linux (WSL), zijn anders dan met een gewone distributie zoals die op pc of een virtuele machine. Met enke...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er