M5Stack ATOMシリーズの判定方法

概要

M5Stack ATOMはLITE、MATRIX、ECHOの3機種ありますがなんとか判定ができないかと検証してみました。

ATOMシリーズ一覧

LITEMATRIXECHO
RGBマトリックスLED1個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は接続している回路に応じて変化するので、この値の差異を調べて見ました。

GPIOLITEMATRIXECHO接続先
19LOWLOWHIGHI2S BCLK
21LOWHIGHLOWI2C SCL
22LOWLOWHIGHI2S DataOut

差分ですが、上記の3箇所ありました。GPIO21はI2Cが接続されており、MATRIXのみHIGHになっていました。これは内部回路でプルアップされているのかもしれません。

GPIO19と22はI2S系の接続になります。こちらはECHOのみHIGHになっていました。LITEは全部LOWですね。

  Serial.println(analogRead(33));
  pinMode(33,INPUT);

この他に、ECHOのI2Sが接続されているGPIO33がADCが使える端子だったので、値を確認してみました。

GPIOLITEMATRIXECHO接続先
33!= 0!= 0== 0I2S 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を確認するなどの小細工が必要そうです。。。

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。