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端子が使えそうです。