Talk Script: Python, asyncio, libgpiod, and Pointless Blinking¶
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 ...
⟶ PIDsComplain about threads
Change to
asyncio
strace -f ...
again ⟶ no PIDs
And blink
?¶
Explain
on()
,sleep()
,any()
,forever()
Pull in snippet
blueprints/snippet-nice-pattern
Ah,
wait_button()
Revert to original blinking
Enclose in
any()
, limiting it to 3 secons
gpiod
, And Interrupts¶
blink.base.sleep
: timer eventOther 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 overevents()
⟶ works
Second button, 19? Hm, tasks.
Wrap
events()
iteration inprint_events()
Make
print_events()
async
In
main()
, create two tasks aroundprint_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
, replacesleep(3)
withwait_button()
textual
¶
My own stuff
$ ./run-menu.py
Show https://pypi.org/project/textual-imageview/
$ vimg ~/IMG<TAB>
python-sdbus
¶
Start the server:
$ ./dbus-blink-server.py
On another terminal, use busctl
$ busctl --user list
$ busctl --user introspect <TAB>
$ busctl --user call ...