GLT 2023 Submission: Pointless Blinking With Python, asyncio
, and libgpiod
(and a Raspberry Pi of Course)¶
Biography¶
Born in Graz, and bound to die in Graz
Been around as an employee in and around Graz for many years
Self employed as trainer and consultant for even more years
Abstract¶
One of my more pointless projects is to blink a configurable set of programmable patterns on a number of LEDs. This might sound like “hey, you are reinventing the wheel”. I admit I do - I am a notorious reinventer, and it is fun.
Description¶
Lets reinvent LED blinking in a live-hacking session, and look into a number of topics as we go:
Python is a programming language that most of you know. It is simple and expressive, thus fun.
Python’s
asyncio
is a parallel programming technique, similar to multithreading in its usage, but fundamentally different in every other respect. At its core, it maps multiple parallel control flows onto one single-threaded event loop. Given that timers are events, this gives us the possiblity to run multiple LED blinking programs in one single thread - saving all the context switching and scheduling overhead that multithreaded programs usually exhibit. Blinking with less glitches caused by context switch hiccups!Ah, blinking patterns. Know what Python decorators are? Closures? We’ll twist our brains and create a
@program
decorator, implemented as a triple-closure, and use that to write a number of amazingly simple blinking programs. Almost like functional programming.Last not least,
libgpiod
. The way to go for GPIO on Linux.