概要
M5Stack ATOMはLITE、MATRIX、ECHOの3機種ありますがなんとか判定ができないかと検証してみました。
ATOMシリーズ一覧
LITE | MATRIX | ECHO | |
RGBマトリックスLED | 1個 | 25個 | 1個 |
IMU(MPU6886) | 無し | 有り | 無し |
マイク、スピーカー | 無し | 無し | 有り |
上記が差になります。RGBマトリックスLEDの数が違うのですが、接続方法は同じなので判定することはできません。MATRIXはI2C接続のIMU(MPU6886)があるので、I2Cを検索することで判定することができそうです。ECHOはマイクとスピーカーが搭載しているので、この辺でなんとか判定できればと思っています。
GPIOの状態を確認
#include "ESP32LiteDebugGPIO.h" void setup() { Serial.begin(115200); delay(1000); dispGpio(); } void loop() { }
ESP32LitePackライブラリのDebugGPIOを利用して、起動した直後のGPIOを比較してみたいと思います。
GPIO LEVEL MODE ADC PULLUP PULLDOWN OPEN_DRAIN I/O NOTE ----------------------------------------------------------------------------- 0 HIGH INPUT PULLUP I/O 1 LOW OUTPUT I/O [O]U0TXD_OUT_IDX 2 LOW INPUT PULLDOWN I/O 3 HIGH INPUT I/O [I]U0RXD_IN_IDX 4 LOW INPUT PULLDOWN I/O 5 HIGH INPUT PULLUP I/O 6 LOW OUTPUT PULLUP I/O [O]SPICLK_OUT_IDX 7 HIGH INPUT PULLUP I/O 8 LOW OUTPUT PULLUP I/O [O]SPID_OUT_IDX 9 HIGH INPUT PULLUP I/O 10 HIGH INPUT PULLUP I/O 11 HIGH INPUT PULLUP I/O 12 LOW INPUT PULLDOWN I/O 13 LOW INPUT PULLDOWN I/O 14 HIGH INPUT PULLUP I/O 15 HIGH INPUT PULLUP I/O 16 HIGH OUTPUT PULLUP I/O [O]SPICS0_OUT_IDX 17 HIGH OUTPUT PULLUP I/O [O]SPIQ_OUT_IDX 18 LOW INPUT I/O 19 LOW INPUT I/O 20 LOW INPUT I/O 21 LOW INPUT I/O 22 LOW INPUT I/O 23 LOW INPUT I/O 25 LOW INPUT I/O 26 LOW INPUT I/O 27 LOW INPUT I/O 32 LOW INPUT I/O 33 LOW INPUT I/O 34 LOW INPUT I 35 LOW INPUT I 36 LOW INPUT I 37 LOW INPUT I 38 LOW INPUT I 39 LOW INPUT I
こちらはLITEの出力結果になります。なにもピンを初期化していない状態なので、左から2番目のLEVEL以外は、すべて同じ値になっています。LEVELは接続している回路に応じて変化するので、この値の差異を調べて見ました。
GPIO | LITE | MATRIX | ECHO | 接続先 |
19 | LOW | LOW | HIGH | I2S BCLK |
21 | LOW | HIGH | LOW | I2C SCL |
22 | LOW | LOW | HIGH | I2S DataOut |
差分ですが、上記の3箇所ありました。GPIO21はI2Cが接続されており、MATRIXのみHIGHになっていました。これは内部回路でプルアップされているのかもしれません。
GPIO19と22はI2S系の接続になります。こちらはECHOのみHIGHになっていました。LITEは全部LOWですね。
Serial.println(analogRead(33)); pinMode(33,INPUT);
この他に、ECHOのI2Sが接続されているGPIO33がADCが使える端子だったので、値を確認してみました。
GPIO | LITE | MATRIX | ECHO | 接続先 |
33 | != 0 | != 0 | == 0 | I2S LRCK |
結果、ECHOのみ0でそれ以外は200前後でした。これはECHOがLOWレベルですが、他の2機種はフローティングで未接続だと思われます。
まとめ
GPIOが未接続のATOMシリーズに関しては、機種判定が可能かもしれません。ただし、LITEのGPIO21と25にIMU(MPU6886)を外付けした場合などはおそらく判定ができません。
状況によっては判定でGPIOの状態を利用できるとは思いますが、この結果を本当に信頼してもいいのかは、ちょっと微妙ですね。
ちなみにM5StickCはGPIO21と22がHIGHになっていました。内蔵I2Cがあるボードは回路でプルアップされている可能性があります。ATOMは21と22の両方がHIGHになっていることがないみたいなので、そのへんでも行けるかな?
LCDを搭載しているボードに関してはLovyanGFXの自動判定でもいいのですが、サウンドが使えるATOM ECHOや、M5Stack Fireを判定するのにはGPIOを確認するなどの小細工が必要そうです。。。
コメント