Использование отладки ошибок сегментации wiringPi2-python (не root) для GPIO

Я использую wiringPi2-python для переключения малинового вывода GPIO с низкого уровня на высокий и обратно. Все работает, НО сразу после того, как он переключает значение пина Segmentation fault выбрасывается и программа останавливается.
Мне нужно использовать этот подход, потому что это, кажется, единственный способ получить доступ к выводам GPIO без sudo

перед запуском программы мне нужно настроить вывод на вывод и экспортировать их так:

$ echo 17 > /sys/class/gpio/export
$ echo out > /sys/class/gpio/gpio17/direction

а затем немного оболочки Python:

$ python
Python 2.7.3 (default, Jan 13 2013, 11:20:46) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import wiringpi2 as pi
>>> pi.wiringPiSetupSys()
0
>>> pi.digitalWrite(17, 1)
Segmentation fault
$

Я попробовал этот подход, но он был не лучше. Программа еще остановлена.

try:
        pi.digitalWrite(17, 0)
except:
        print('got an error')
print('just printing something to see if gets to end')

Поэтому мой вопрос заключается в том, как правильно отловить ошибку, чтобы я мог просто проигнорировать ее, потому что код на самом деле работает.
PS: Это, вероятно, стоит сообщения об ошибке, но я хочу сначала обдумать это.

1 ответ

Решение

Так что я понял это. мне нужно сделать еще один процесс для digitalwrite, В этом случае вновь созданный процесс останавливается, но остальная часть программы может продолжать работать.

import wiringpi2 as pi
from multiprocessing import Process

def process(choice):
        if choice == "1":
                pi.digitalWrite(17, 1)
        else:
                pi.digitalWrite(17, 0)

if __name__ == '__main__':
        pi.wiringPiSetupSys()
        choice = raw_input(">")
        p = Process(target=process, args=(choice,))
        p.start()
        p.join()

print('just printing something to see if gets to end')
Другие вопросы по тегам