M5Stackと押しボタンスイッチを使い、スイッチのON/OFFの状況を収集するIoTシステムをつくる必要が生じました。
設置場所に人が来た時にスイッチを押し、離れる時にもスイッチを押すことで、人の在場時間を調べるというシンプルなシステムです。
スイッチはM5Stackに付いているものではなく、もっと頑丈なものを使いたいとのことで、外付けの押しボタンスイッチをM5Stackにつなぐことにしました。
押しボタンスイッチには、押している間だけON(もしくはOFF)になる「モーメンタリスイッチ」と、一度押すとONになり、もう一度押すとOFFになる「オルタネートスイッチ」があるようです。今回はプログラムがより簡単になる「オルタネートスイッチ」を使います。
また、スイッチがONであるかどうかがわかりやすいように、LEDもつなぐことにします。
回路図は以下のとおりです。

今回使ったLEDの定格は2V/20mAなので、5V電源を供給し、220Ωの抵抗を直列につなぐこととします。これでスイッチがOFFのときにはLEDが消灯し「36」の電圧は「0V」、スイッチがONのときにはLEDが点灯し「36」の電圧は「3V」程度になります。
スイッチとLEDは、このようなケースに収納しました。ケースの裏にはマグネットを貼っています。

中はこのとおりです。スイッチとLEDをつなぎ、配線を引き出しているだけです。

抵抗はM5Stackのプロトモジュールに設置しています。プロトモジュールの左側には別の用途で既にコネクタを取り付けているため、下側にイヤホンジャックを取り付け、そこに先ほどつくったスイッチをつないでいます。

プロトモジュールのケースの一部を無理やり切り取って、イヤホンジャックを取り出しています。

動作確認用のスケッチは以下のとおりです。
#include <M5Stack.h>
void setup() {
M5.begin();
pinMode(36, INPUT);
}
int prev = 0;
void loop() {
int btn = digitalRead(36);
if(btn != prev) {
if(btn == 1) M5.Lcd.fillScreen(GREEN);
else M5.Lcd.fillScreen(BLACK);
}
prev = btn;
}
押しボタンスイッチを押すとLEDが点灯するのと同時にM5StackのLCDディスプレイも緑色に点灯します。
もう一度押すとLEDが消灯し、LCDディスプレイも暗くなります。
このスイッチの状態をWebサーバに送信して保存することで、他のセンサデータと同様にデータ収集できます。
なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。