M5Stackでできること 〜使用可能なデジタル入力端子

スポンサーリンク
お役立ち情報

M5Stackで、多数のデジタル入力端子を使いたい機会がありました。


M5Stackの上下左右の辺には、外部の素子を接続するためのピンやソケットがあり、そのうちのいくつかはデジタル入力端子として使用できます。
これらのうち何本が、実際にデジタル入力として使えるのか、調査してみました。

電源、グランドなどを除いた各端子について、ドキュメントや回路図から、他の機能でも使用されているものを確認しました。

端子名他の機能と共用コメント
21 ( SDA )GROVEポートと共用
22 ( SCL )GROVEポートと共用
23 ( MO )LCD
19 ( MI )SD
18 ( SCK )LCD
3 ( R0 )UART
1 ( T0 )UART
16 ( R2 )
17 ( T2 )
2 ( G2 )
5 ( G5 )
25 ( DA )スピーカー
26 ( DA )
35 ( AD )入力専用(INPUT_PULLUP使用不可)
36 ( AD )入力専用(INPUT_PULLUP使用不可)

これらを除いた9端子がデジタル入力として使用できそうです。
ただし、35, 36は入力専用端子で、これらについては「INPUT_PULLUP」が使えないようです。
今回は、pinModeで「INPUT_PULLUP」にしたいので、これら2ピンも使えません。

最終的には、残った7端子がデジタル入力として使用できることになります(21, 22はGROVEポートと共用なので、もしも別の用途でGROVEポートも使うなら、使用できるのは残り5端子となります)。

これら7端子が本当にデジタル入力として使用できるのか、確認してみました。

タクトスイッチを7個準備し、以下のように各端子のピンにつなぎました。

以下のようなスケッチを準備しました。タクトスイッチを押したときだけ、対応する端子が「0」と表示され、その他は「1」と表示されます。

#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Lcd.setTextSize(3);
  pinMode(21, INPUT_PULLUP);
  pinMode(22, INPUT_PULLUP);
  pinMode(16, INPUT_PULLUP);
  pinMode(17, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(26, INPUT_PULLUP);
}

void loop() {
  M5.Lcd.clear(BLACK);
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.print("GPIO-21");
  M5.Lcd.setCursor(0, 30);
  M5.Lcd.print("GPIO-22");
  M5.Lcd.setCursor(0, 60);
  M5.Lcd.print("GPIO-16");
  M5.Lcd.setCursor(0, 90);
  M5.Lcd.print("GPIO-17");
  M5.Lcd.setCursor(0, 120);
  M5.Lcd.print("GPIO-2");
  M5.Lcd.setCursor(0, 150);
  M5.Lcd.print("GPIO-5");
  M5.Lcd.setCursor(0, 180);
  M5.Lcd.print("GPIO-26");

  M5.Lcd.setCursor(160, 0);
  M5.Lcd.print(digitalRead(21));
  M5.Lcd.setCursor(160, 30);
  M5.Lcd.print(digitalRead(22));
  M5.Lcd.setCursor(160, 60);
  M5.Lcd.print(digitalRead(16));
  M5.Lcd.setCursor(160, 90);
  M5.Lcd.print(digitalRead(17));
  M5.Lcd.setCursor(160, 120);
  M5.Lcd.print(digitalRead(2));
  M5.Lcd.setCursor(160, 150);
  M5.Lcd.print(digitalRead(5));
  M5.Lcd.setCursor(160, 180);
  M5.Lcd.print(digitalRead(26));

  delay(100);
}

これで動作確認してみました。
いずれのスイッチを押した時も、押している間だけ、対応する端子が正しく「0」になりました。

これら7端子は、デジタル入力として、問題なく使えることが確認できました。
また、スイッチにプルアップ抵抗をつければ、35, 36もデジタル入力として使えるので、その場合は最大で9端子が使えそうです。