M5Stackでできること 〜M5Stackに押しボタンスイッチをつなぐ

スポンサーリンク
センサとの接続

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の使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。