Я пытаюсь определить, когда значение булавки gpio на моей машине изменяется, используя обработчик событий сторожевого таймера. Вот основа моего кода:
import watchdog.observers
import watchdog.events
import time
import os.path
#path of the gpio pin for digital input (input w/ config)
src_path = "/sys/class/gpio/gpio1"
#class that handles event change
class Handler(watchdog.events.FileSystemEventHandler):
#initializes handler and formats logging
def __init__(self):
#set the patterns for FileSystemEventHandler
watchdog.events.FileSystemEventHandler.__init__(self)
#when file is created within directory
def on_created(self, event):
print("Watchdog received created event - % s." % event.src_path)
#code
#when file is modified within directory
def on_modified(self, event):
print("Watchdog received modified event - % s." % event.src_path)
#code
#initiates digital input gpio pins
def di_initiate():
if not os.path.islink('/sys/class/gpio/gpio1'):
with open('/sys/class/gpio/export', 'w') as gpio_f: # open the export file before writing the GPIO number
gpio_f.write('1') # select the pin number 1
gpio_f.flush()
with open('/sys/class/gpio/gpio1/direction', 'w') as gpio_f:
gpio_f.write('in') # set the pin as an input
gpio_f.flush()
#closes digital input gpio pins
def di_close():
with open('/sys/class/gpio/unexport', 'w') as gpio_f: # remove the GPIO pin
gpio_f.write('1')
gpio_f.flush()
#main function, where the program starts
if __name__ == "__main__":
event_handler = Handler()
#initialize Observer
observer = watchdog.observers.Observer()
observer.schedule(event_handler, path = src_path, recursive=True)
#start the observer
while True:
try:
print("Starting Observer")
observer.start()
print("Observer started")
di_initiate()
print("Digital Input Initiated")
break
except OSError as e:
print("Source path does not exist!")
print(e)
try:
while True:
#set the thread sleep time
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
di_close()
observer.join()
Вывод этого кода:
Starting Observer
Исходный путь не существует!
[Errno 20] Не каталог: '/ sys / class / gpio / gpio1'
Запуск наблюдателя
Запуск наблюдателя
Инициированный цифровой вход
Однако сообщения on_modified впоследствии не существует. Я использовал другую программу, чтобы подтвердить, что значение контакта gpio действительно изменяется при вводе сигнала, но сторожевой таймер, похоже, не распознает это изменение.