21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberryでボタン押下をGPIOの割り込みで検出

Last updated at Posted at 2019-03-18

##モチベーション
ラズパイからなんらしかのセンサーの値を元に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回と検出することがありました。

21
16
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?