raspbery Pi でボタンからの入力を検知
GPIOポートが out モードのときなら
値が0なら 0V
値が1なら 3.3V
の電圧が出力される
これに対して
inモード、つまり入力のときには
GPIOポートの電圧に応じた値を読み込める
電圧 0V なら 0
3.3V なら 1
となる
GPIOポートはデジタル入力のため
値が 0 と 1 しかない
例えば
3.3V の半分の1.65V の電圧を加えても 0.5 にはならず
0と1のどっちかという不安定な値になってしまう
このため Raspberry Pi のGPIOポートに入力する電圧は値を正しく検知できるように
3.3V
か
0V
にする
今回はボタンをおすと 3.3 V の電圧が加わるようにする
使うパーツは
10KΩの抵抗
タクトスイッチ
ジャンパーケーブル3本
ブレッドボード
そして Raspberry Pi 本体
部品に関しては Amazon で購入
電子部品についてはセットであったのでこれを購入
抵抗に関しては少し分かりにくいため
カラー抵抗値の写真早読み表!
を参考に
一番左が茶色のものが 10KΩということで使用
部品に関してはこれでOK
GPIOのヘッダピンになる Pin1
これは一番左上のピン
これは 3.3 V が出力されているので
ボタンが押されたら、この 3.3V が
GPIO25 の Pin22 に加わるようにする
この位置は右上3番めにある
そしてGNDとの間には
10KΩの抵抗を入れる
これがプルダウン抵抗
これがないと
ボタンをおすと GPIO25に 3.3 V が加わるけど
押していないと何もつながっていない状態になる
しかし
電圧は 0V にならずに不安定な状態になっている
これを防ぐために
高い抵抗値をもつ抵抗をいれることで
GND側に電圧を引っ張る
ちなみに
GND側に抵抗をいれることをプルダウンと呼ぶ
注意点として4本足のボタンを使うので
ボタンを押したときににどのピンとつながるのかを調べておく必要がある
これで準備できたので、まずはコマンドでボタンの状態を取得
LEDを光らせるのと同じ手順になるけど
今回は入力になるので
モードが in になる
まずはGPIO25を inモードで使用開始宣言
echo 25 > /sys/class/gpio/export
で使用するポートを宣言
echo in > /sys/class/gpio/gpio25/direction
でモードを in に指定
次に cat コマンドで値を読み込む
cat /sys/class/gpio/gpio25/value
まずはボタンを押していない状態で実行すると
0
になる
ボタンを押しながら
cat /sys/class/gpio/gpio25/value
を実行すると
1
になる
このように、信号の入出力もファイルを読み書きする感覚でGPIOポートを扱うことができる
そして、GPIOポートの使用が終了したら
unexport で終了宣言をする
echo 25 > /sys/class/gpio/unexport
ちなみに、WiringPi を使えばもっと簡単に操作できる
gpio mode コマンドで in モードに設定して
gpio read コマンドで値を読み出せる
まずはポートの設定
構文は
gpio -g mode 使用するGPIOポート番号 in
今回なら GPIO25 なので
gpio -g mode 25 in
次に gpio read コマンドで値を読み込む
構文は
gpio -g read GPIOポート番号
今回は GPIO25 なので
gpio -g read 25
これでボタンを入れながら実行すると
1
と表示され、入れずに実行すると
0
となる