概要
「でっかい物理ボタンを押されたことを検知しよう!」という野望が出てきましたので、先駆者の方の知識をお借りして実装してみました。
チェックしたプラットフォームはArduinoとRaspberryPiとESP32です。
※ESP32を2018/09/24に追加しました。
参考文献
■Arduinoで物理ボタンを作る (目立つボタンで「ッターーン!」しよう)
https://qiita.com/ie4/items/7c6764469f3d41c93a19
■Raspberry PiのGPIOを使って電子工作を楽しむ
https://qiita.com/msrks/items/7de29c4294ce677e05a0
※I have referred to your experiences. Thanks, @ie4 and @msrks.
準備したモノ
- Arduino UNO R3
- Raspberry Pi B3
- ESP32 DevKitC(正しくは互換機:https://www.amazon.co.jp/gp/product/B0718T232Z/)
- 物理ボタン(https://www.p-supply.co.jp/products/index.php?act=detail&pid=249)
- ワニ口クリップ
- ジャンパワイヤ
Arduino編
参考文献のまま、本当にそのままなのですが、以下のように接続して動作確認を実施しています。
- Arduinoは12番(黄)とGND(赤)に接続
- ボタン側は写真のようにつまんでいるだけ
- Arduinoのスケッチはこちらも参考文献の通り
const int buttonPin = 12;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
Serial.println("Enter!!");
delay(200);
}
}
結構半信半疑だったのですが、無事に"Enter!"がシリアルコンソールに出ました。(画質が粗くて恐縮です)
Raspberry Pi編
こちらも参考文献の「ボタン入力を検出」の部分を参考にしています。(ってまんまですが)
こちらはPythonのプログラムで動作を監視します。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
input_state = GPIO.input(18)
if input_state == False:
print('Enter!!')
time.sleep(0.2) # 時間はお好みで
ESP32編
プログラムはArduino編と全く同じです。
ArduinoIDEから扱えるようにESP32-DevKitCをセットアップし、
下記のように配線しました。
ブレッドボード越しに12番(黄)とGND(赤)に接続させています。
こちらも問題なく「Enter!!」がシリアルコンソールに表示されました。
この後は、、、
各自のプラットフォーム側で検知したイベントを元にして業務実装です。
ボタンの入力部分をワニ口で繋いでいるところがイマイチしっくりきていないのですが、
今後理屈を勉強したいと思います。
参照頂きありがとうございました。