##モチベーション
ラズパイからなんらしかのセンサーの値を元にAWSに通知を上げ、なんらかしら(なんらかしらばっかり 笑)の動作をしたい。まず簡単なところでボタンのプッシュを検出する。GPIOの値をポーリングはできるので、割り込みで実現してみた。
##環境
- RaspberryPi3B+
- Raspbian 9.8
- RPi.GPIO
##参考
https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/
##配線
3.3V
R│10K
GND ── Button ──┴─── BCM21(GPIO.29)
##pythonプログラム
gio_int.py
# coding: utf-8
import RPi.GPIO as GPIO
import time
BUTTON_PIN = 21
def main():
GPIO.setwarnings(False)
# Set the layout for the pin declaration
GPIO.setmode(GPIO.BCM)
# BCMの21番ピンを入力に設定
GPIO.setup(BUTTON_PIN,GPIO.IN)
# callback登録(GIO.FALLING:立下りエッジ検出、bouncetime:300ms)
GPIO.add_event_detect(BUTTON_PIN, GPIO.FALLING, callback=callback, bouncetime=300)
try:
while(True):
time.sleep(1)
# Keyboard入力があれば終わり
except KeyboardInterrupt:
print("break")
GPIO.cleanup()
def callback(channel):
print("button pushed %s"%channel)
if __name__ == "__main__":
main()
##実行
ポチポチとボタンを2回押すと検出できました。
Ctrl-Cで終わりです。
pi@raspberrypi:~ $ python gio_int.py
button pushed 21
button pushed 21
^Cbreak
pi@raspberrypi:~ $
ちなみに、bouncetime=1にして動かしてみると、チャタリングのためにボタン1回を2回と検出することがありました。