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

  • https://www.faschingbauer.me

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.