RuntimeWarnings с GPIO.настройка и GPIO.очистка не работает с KeyboardInterrupt
у меня проблема с моим кодом, работающим с raspberry pi. Я только начал с python, поэтому мне нужна помощь.
этот код:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
led1=22
led2=17
GPIO.setup(led1, GPIO.OUT)
GPIO.setup(led2, GPIO.OUT)
def blink():
GPIO.output(led1, 1)
time.sleep(1)
GPIO.output(led1, 0)
GPIO.output(led2, 1)
time.sleep(1)
GPIO.output(led2, 0)
while(blink):
blink()
try:
main()
except KeyboardInterrupt:
GPIO.cleanup()
при запуске эта ошибка появляется в консоли:
RuntimeWarning: этот канал уже используется, продолжая в любом случае. Использовать Выводы GPIO.setwarnings (False) для отключения предупреждений. Выводы GPIO.настройки(светодиод LED1, Выводы GPIO.) И:
RuntimeWarning: этот канал уже используется, продолжая в любом случае. Использовать Выводы GPIO.setwarnings (False) для отключения предупреждений. Выводы GPIO.настройка (led2, Выводы GPIO.OUT)
Если я правильно понял команду GPIO.cleanup()
следует сбросить все контакты порта GPIO и выключить светодиод.
но это не происходит на самом деле один из светодиодов гореть.
Как изменить мой код, чтобы решить эту проблему?
3 ответов
вот небольшая помощь, как эффективно разделить ваши функции и сделать их более общими. Хотя это рабочий скрипт Python, который я предоставил, я не тестировал его на своем raspi, но я думаю, что он будет работать -- в любом случае, дайте мне знать, если там были какие-то проблемы!
import RPi.GPIO as GPIO
import time
# Module level constants
LED1 = 22
LED2 = 17
# Sets up pins as outputs
def setup(*leds):
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)
for led in leds:
GPIO.setup(led, GPIO.OUT)
GPIO.output(led, GPIO.LOW)
# Turn on and off the leds
def blink(*leds):
# Blink all leds passed
for led in leds:
GPIO.output(led, GPIO.HIGH)
time.sleep(1)
GPIO.output(led, GPIO.LOW)
if __name__ == '__main__':
# Setup leds
setup(LED1, LED2)
# Run blinking forever
try:
while True:
blink(LED1, LED2)
# Stop on Ctrl+C and clean up
except KeyboardInterrupt:
GPIO.cleanup()
дружеская рекомендация:
существует специальный сайт Raspberry Pi StackExchange тоже: https://raspberrypi.stackexchange.com/
Вы, кажется, не включили main
в вашем вопросе. Однако проблема может возникнуть, если программы выходят по какой-либо причине, отличной от KeyboardInterrupt
. Лучше освободить ресурс в finally
блок
try:
main()
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
вы призываете main()
функция, но она не объявлена (определена), вы используете while(blink)
. Поэтому вам нужно удалить " main () "и поставить" Try " перед вашей основной функцией, которая является while(blink)
петли. Не забудьте соответствующие вкладки.