Отключение с помощью клеммы на переднем фронте входа GPIO - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь отключить Raspberry Pi на переднем фронте GPIO # 4. В конечном итоге я хочу автоматически запустить этот скрипт при запуске.

Мой код Python находится в файле test1.py @ / home / pi

#!/usr/bin/python
print("Starting")
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(4, GPIO.RISING)
def my_callback(x):
    print("Event Triggered")
    command = "/usr/bin/sudo /sbin/shutdown -r now"
    import subprocess
    process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
    output = process.communicate()[0]
    print(output)
    x=1

GPIO.add_event_callback(4,my_callback)
print("End")

Мой код терминала

sudo python test1.py

Мой вывод

Starting
End

Когда я ввожу указанный выше код Python в оболочку Python, я получаю вышеприведенный вывод, и после запуска GPIO4 он выключается.

Когда я вызываю его из Терминала, я получаю вышеупомянутые выходы, но после запуска GPIO4 ничего не происходит.

Чего мне не хватает, чтобы это работало с экрана терминала?

1 Ответ

0 голосов
/ 05 ноября 2018

Кажется, ваш скрипт завершает работу без ожидания события. Возможно, вы захотите использовать функцию, которая блокирует скрипт, пока не произойдет событие.

if GPIO.wait_for_edge(4,GPIO.RISING):
    my_callback()

в конце программы будет блокировать поток, пока не будет обнаружено ребро. Похоже, вам не нужно x в функции, поэтому я ее просто опустил. Также нет необходимости в GPIO.add_event_detect(4, GPIO.RISING) и GPIO.add_event_callback(4,my_callback) с этим изменением

...