Точнее говоря, есть два способа.
Способ-1. Код в стиле Arduino.
import RPi.GPIO as GPIO
import time
btn_pin = 24 # Button to GPIO24
# Setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(btn_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
try:
# Loop
while True:
button_state = GPIO.input(btn_pin)
if button_state == False:
print 'Button Pressed...'
time.sleep(0.2)
except:
GPIO.cleanup()
Как можно видеть, здесь состояние кнопок читается в бесконечном цикле while True, и если значение кнопки равно логическому нулю, мы делаем какое-то действие.
Чем плох этот код? Он нормально работает на Arduino, т.к. там используется простой процессор, умеющий выполнять только одну задачу. Но на Raspberry Pi используется многоядерный процессор и полноценная многозадачная операционная система Linux, и постоянно работающий бесконечный цикл будет лишь зря забирать ресурсы процессора.
Гораздо правильнее “подписаться” на системные уведомления об изменении состояния кнопки, тогда код автоматически вызовется когда нужно.
Способ-2. Код с использованием событий (events).
import RPi.GPIO as GPIO
import time
btn_pin = 24 # Button to GPIO24