Page 80
import gpiod
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="myprog.py", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
event = line.event_wait(sec=1)
if event:
print("Event on line 4")
else:
print("Time out")
Remember to change the chip number from “0” to “4” if running on a Pi 5.
Page 81
import gpiod
from time import sleep, time_ns
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="resistor.py", type=gpiod.LINE_REQ_DIR_IN)
sleep(0.010)
line.release()
line.request(consumer="resistor.py", type=gpiod.LINE_REQ_DIR_OUT, default_vals=[0])
sleep(0.010)
line.release()
line.request(consumer="resistor.py", type=gpiod.LINE_REQ_EV_RISING_EDGE)
t = time_ns()
event = line.event_read()
print((event.sec*1000000000+event.nsec-t)/1000)
Remember to change the chip number from “0” to “4” if running on a Pi 5.
Page 82
import gpiod
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="myprog.py", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
while(True):
while True:
event1 = line.event_read()
if event1.type == event1.RISING_EDGE:
break
while True:
event2 = line.event_read()
if event2.type == gpiod.LineEvent.FALLING_EDGE:
break
print((event2.sec-event2.sec)*1000000000 +
(event2.nsec-event1.nsec))
Remember to change the chip number from “0” to “4” if running on a Pi 5.
Page 783a
import gpiod
from time import sleep
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="myprog.py", type=gpiod.LINE_REQ_DIR_IN)
print("Press the button", flush=True)
sleep(20)
if line.get_value() == 1:
print("button pressed")
else:
print("button not pressed")
Don’t forget to change "0" to "4" if running on a Pi 5.
Page 83b
import gpiod
from time import sleep
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="myprog.py", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
print("Press the button", flush=True)
sleep(20)
event = line.event_wait(sec=0)
if event:
print("button pressed")
else:
print("button not pressed")
Don’t forget to change "0" to "4" if running on a Pi 5.
Page 84
import gpiod
def event_poll(line):
event = line.event_wait(sec=0)
if event:
event = line.event_read()
return event
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="myprog.py", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
while True:
event = event_poll(line)
if event:
print(event.sec, flush=True)
Don’t forget to change "0" to "4" if running on a Pi 5.
Page 87
import fcntl
import struct
import io
import os
from time import sleep, time_ns
import select
GPIO_GET_CHIPINFO_IOCTL = 0x8044B401
GPIO_GET_LINEHANDLE_IOCTL = 0xC16CB403
GPIOHANDLE_SET_LINE_VALUES_IOCTL = 0xC040B409
GPIOHANDLE_GET_LINE_VALUES_IOCTL = 0xC040B408
GPIO_GET_LINEEVENT_IOCTL = 0xC030B404
GPIOHANDLE_REQUEST_OUTPUT = 0x02
GPIOHANDLE_REQUEST_INPUT = 0x01
GPIOHANDLE_REQUEST_ACTIVE_LOW = 0x04
GPIOHANDLE_REQUEST_OPEN_DRAIN = 0x08
GPIOHANDLE_REQUEST_OPEN_SOURCE = 0x10
GPIOEVENT_REQUEST_RISING_EDGE = 0x01
GPIOEVENT_REQUEST_FALLING_EDGE = 0x02
GPIOEVENT_REQUEST_BOTH_EDGES = 0x03
gpiochip_info = struct.Struct("32s 32s L")
gpiohandle_request = struct.Struct("64L L 64B 32s L L")
gpiohandle_data = struct.Struct("64B")
gpioevent_request = struct.Struct("L L L 32s L")
gpioevent_data = struct.Struct("Q L")
buffer = gpioevent_request.pack(4, GPIOHANDLE_REQUEST_INPUT, GPIOEVENT_REQUEST_BOTH_EDGES, b"Event test", 0)
f = io.open("/dev/gpiochip0", "rb", buffering=0)
result = fcntl.ioctl(f, GPIO_GET_LINEEVENT_IOCTL, buffer)
f.close()
fL = struct.unpack_from("L", result, 44)[0]
e = select.epoll()
e.register(fL)
while True:
events = e.poll(1)
if len(events) > 0:
buffer = os.read(fL, 100)
timestamp, id = gpioevent_data.unpack(buffer[0:12])
print(timestamp, id, flush=True)
Don’t forget to change "0" to "4" if running on a Pi 5.
Page 88
import gpiod
import struct
import io
import os
import select
gpioevent_data = struct.Struct("Q L")
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="myprog.py", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
fL = line.event_get_fd()
e = select.epoll()
e.register(fL)
while True:
events = e.poll(1)
if len(events) > 0:
buffer = os.read(fL, 100)
timestamp, id = gpioevent_data.unpack(buffer[0:12])
print(timestamp, id, flush=True)
Don’t forget to change "0" to "4" if running on a Pi 5.
Page 90
import gpiod
from time import sleep
import threading
def waitForInterrupt(line):
while(True):
event = line.event_read()
print(event.sec*1000000000+event.nsec, flush=True)
chip = gpiod.Chip("0")
line = chip.get_line(4)
line.request(consumer="myprog.py", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
IntThread = threading.Thread(target=waitForInterrupt, args=(line,))
IntThread.start()
while True:
sleep(2)
print("running", flush=True)
Don’t forget to change "0" to "4" if running on a Pi 5.