概要
タクトスイッチ (タクタイルスイッチ) の信号を RaspberryPi で受信してみました
タクトスイッチはいわゆる普通のスイッチで押した状態 (1) or 押していない状態 (0) を制御することができます
環境
- Raspberry Pi Type B Single Board Computer 512MB
- Raspbian 8.0 (Jessie)
- Kernel Version 4.1.7+
- Python 2.7.9
- タクトスイッチ
配線
実際に配線した写真は以下の通り
fritzing で書いた配線図は以下の通り
今回はプルダウンスイッチをソフトウェア側ではなくハード側で制御するので GPIO で信号を受け取る前に 10kオームの抵抗を配置しています
これがプルダウン抵抗です
タクトスイッチのサンプルは他にもいろいろと情報が転がっているので、調べればプルダウン抵抗なし版の回路も簡単に見つかると思います
ソースコードデプロイ
- mkdir -p ~/work/tact_switch
- vim ~/work/tact_switch/receive_signal.py
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
pin = 17
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.IN)
def main():
try:
GPIO.wait_for_edge(pin, GPIO.FALLING)
print(GPIO.input(pin))
print("pushed")
except KeyboardInterrupt:
print "KeyboardInterrupt"
except:
print "Quit"
finally:
print "clean up"
GPIO.cleanup()
if __name__=="__main__":
setup()
main()
GPIO は 17 番を使っています
ポイントは wait_for_edge
というメソッドでこれを使うことで指定された GPIO が FALLING (押された) 状態になったら次の処理に進むことができます
スクリプトを実行するとスイッチからは 0 が送信されているため入力待ち状態になるはずです
その状態でスイッチを押すと「pushd」と表示されスクリプトが終了します
自分がハマったのは信号が 0 と 1 を繰り返してしまい、待ち状態に入らない現象が発生しました
原因は超単純で別のスクリプトが同じ GPIO を制御しており、そのスクリプトを停止したら正常に動きました
回路がおかしい場合や、抵抗の値が小さい場合にも正常に動かないようです
0 件のコメント:
コメントを投稿