Talk Sketch: Pointless Blinking: Evolution

gpiod Intro

  • gpiod basics, Box

    • Show center on/off

    • Quickly explain request_lines() (request.set_value() vs. request.set_values())

    • Show blink.glt2024.box

    • Use Box.matrix

    • insert snippets/blink, and use it

asyncio Intro

  • threading

    • insert snippets/threads

    • strace -f ... ⟶ PIDs

    • Complain about threads

  • Change to asyncio

  • strace -f ... again ⟶ no PIDs

gpiod, And Interrupts

  • blink.base.sleep: timer event

  • Other events? ⟶ interrupt on GPIO line

  • Show blueprints/gpiod-interrupts.py

  • Discuss edges, timestamps, bouncing

  • FALLING, debounce_period

  • Transform into generator, events()

Nice, Pythonic!

gpiod, Interrupts, and asyncio

  • async def main(); simply iterate over events()

  • ⟶ works

  • Second button, 19? Hm, tasks.

  • Wrap events() iteration in print_events()

  • Make print_events() async

  • In main(), create two tasks around print_events()

  • ⟶ one works, the other not

We block! Aha, async all over

  • Question: how make events() async? asynchronous generator?

  • Future, loops, blah

And blink?

  • Show wait_button

  • back in blink-demo.py, replace sleep(3) with wait_button()

textual

Python 3.12 Installation (for TaskGroup)

$ sudo apt install libssl-dev libreadline-dev libffi-dev libsystemd-dev python3-dev
$ wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz
$ tar xf Python-3.12.2.tar.xz
$ cd Python-3.12.2/
$ ./configure --prefix=$HOME/Python-3.12.2-Install --with-readline
$ make
$ make install