M5Stackで、多数のデジタル入力端子を使いたい機会がありました。
M5Stack Basic V2.7(Yahoo!ショッピング)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端子が使えそうです。