【はじめに】
趣味として電子工作とプログラミングを始めて間もなく、電子回路部品が筐体におさめれらており必要な機能がコンパクトに纏まっていて面白そうだなと思いM5STACKを購入したのですが、当時は私の経験不足・知識不足によるとともに、今のようにWEBや書籍でM5STACKの情報が簡単に入手できる環境ではありませんでした。そこで、今からM5STACKで電子工作・プログラミングを始める方の参考になればと思い、当時をよくわからなかった点を思い出してみました。基本的にはM5STACK BASICについてのハードウェア寄りの情報になります。
公式サイトに詳しい情報があります。M5STACK DOCUMENT
【回路図】
現行の流通品とは内部のICは変更になっておりバージョンは古いと思いますが参考になります。
M5-Schematic/M5-Core-Schematic(20171206).pdf at master · m5stack/M5-Schematic (github.com)
【側面の端子】

右左の直線上の一対で結線されています。同様に上下の一対で結線されています。左右、上下でピンヘッダ(オス)かソケット(メス)の違いと考えれば良いです。例えば、左側[3]と右側[R0]は内部で接続されていて同じ信号端子と言えます。ボトムのインターフェース端子の機能は次の通りです。
[5V]:リチウムイオン電池充電制御IC「IP5306」からの5V出力です。
[3V3]:3chパワーマネジメントIC「EA3036」からの 3.3V(VDD_3V3)出力です。
[BAT]:リチウムイオン電池充電制御IC「IP5306」とBOTTOM側バッテリーに接続されている端子です。内蔵バッテリーの電圧が出力されます。なお、バッテリーの並列接続はやってはいけません。電池モジュールとバッテリー付きボトムはスタックして使用しないように。
[RST]:Reset 端子 Low電圧でリセットです。
続いてM5STACKが使用しているICチップはESP32ですので、M5STACKのインターフェース端子とESP32のIC端子割り当てを記載します。また主な使い方の機能を併記します。なお、I/O電圧は3.3Vです。
[M5左側] — [M5右側]:[ESP32端子名] [ESP32チップ端子番号]:端子の使い方例
[3] — [R0] :[U0RXD/GPIO3] [40]:UART RXD
[1] — [T0] :[U0TXD/GPIO1] [41]:UART TXD
[16] — [R2] :[GPIO16] [25]:UART2 RXD (PSRAM無効なら使用可)
[17] — [T2] :[GPIO17] [27]:UART2 TXD(PSRAM無効なら使用可)
[2] — [G2] :[GPIO2] [22]:GPIOとして使えますが、別機能も割り当てられており出来れば使わないほうが良さそうです。
[5] — [ G5] :[GPIO5] [34]:GPIO
[25] — [DA] :[GPIO25] [14]:GPIOとして使えますが、内部でスピーカ用アンプの入力端子に接続されているため出来れば使わないほうが良さそうです。
[26] — [DA] :[GPIO26] [15]:GPIO /アナログ 出力
[35] — [AD] :[VDET_2/GPIO35] [11]:アナログINPUT 入力専用
[36] — [AD] :[SENSOR_VP/GPIO36] [5] :アナログINPUT 入力専用
[21] — [SDA] :[GPIO21] [42]:I2C DATA Grove端子と共用
[22] — [SCL] :[GPIO22] [39]:I2C CLOCK Grove端子と共用
[23] — [MO] :[GPIO23] [36]:GPIO 内部でSD(TFcard SPI_SDDI) とLCD(MOSI)と共用されています。
[19] — [MI] :[GPIO19] [38]:GPIO 内部でSD(TFcard SPI_SDDO) と共用されています。
[18] — [SCK] :[GPIO18] [35]:GPIO 内部でSD(TFcard SPI_CLK) およびLCD(SCK)と共用されています。
【メモ】
・GPIO25は内部のメインICであるESP32チップ(IC)の14番端子とSpeaker駆動用のアンプICの入力に繋がっています。従いGPIO25に何か信号を入力すると音がなってしまいますので、基本的には何も接続しない方が良いです。見方を変えるとGPIO25をGNDに落とせばアンプICへの入力電圧が0Vになるため不要なノイズ音は減ることになります。
・UART接続のデバイスを接続しているときはUSB-Serial ICの通信と競合によりプログラムの書き込みができない可能性があります。プログラム書き込み時は[1]TX0と[3]RX0には何も接続しないほうが良いです。
【Grove互換コネクタ】
3つのGrove互換コネクタ、“A”、“B”、“C”を搭載しており、それぞれ、I2C、DAC/ADC、UARTとして機能します。内部の接続としては上下左右の端子と共用ですのでご注意ください。
[PORT] - [ESP32]
A(RED):SCL/SDA/5V/GND - [GPIO22][39]/[GPIO21][42] /5V/GND ※内部の電源コントロールIC(IP5306にも接続されています)
B(BLACK):OUT,DAC/IN,ADC/5V/GND – [GPIO26][15]/[SENSOR_VP,GPIO36][5] /5V/GND
C(BLUE):RXD/TXD/5V/GND - [GPIO16][25]/[GPIO17][27] /5V/GND
PORT AはI2C用です。接続するI2Cデバイス(センサーユニットなど)はデバイス毎にアドレスが設定されています。基本的には、同一アドレスを持つデバイスを同時に使うことはできません。
【Arduino sketch】
M5STACKに限らずですが、使用する環境によってコンパイルできる、できないがあるので注意が必要です。後日プログラムを見直す場合に混乱しないように、記憶に頼らず自分の作成するスケッチにはアルディーノのバーション、ボードマネージャーのバーション、使用する各ライブラリーのバージョンなどをコメントで記載しておいた方が良さそうです。
【ヒューマンインターフェース】
LCD
LCDは2インチ液晶で、解像度は 横320 x 縦240 で、ボタンを手前にして左上が原点(0, 0)です。SPIでILI9341(またはILI9342C)と接続されています。ESP32チップとの接続は次の通りです。
[LCD] – [ESP32]
CS – [MTMS,GPIO14] [17]
SCLK – [GPIO18] [35]
MOSI/MISO – [GPIO23] [36]
DC -[GPIO27] [16]
#RST -[32K_XN,GPIO33] [13]
BL_LED -[32K_XP,GPIO32] [12]
TF-Card(SD-Card)
16GBの容量までサポートしています。SPIでTF-Cardと接続されています。
[TF] – [ESP32]
CS -[GPIO4] [24]
SCLK -[GPIO18] [35]
MISO -[GPIO19] [38]
MOSI -[GPIO23] [36]
Button
液晶画面を上に、ボタンを下向きにして左からBtn_A、Btn_B、Btn_Cとなります。各ボタンはPUSH時にGPIOがGND接続されます。
[Btn] – [ESP32]
Btn_A – [SENSOR_VN,GPIO39] [8]:Input
Btn_B – [SENSOR_CAPN,GPIO38] [7]:Input
Btn_C – [SENSOR_CAPP,GPIO37] [6]:Input
Btn_Rst – [CHIP_PU] [9]:Input ※電源兼リセットボタン
【最後に】
m5stackのマイコンであるESP32の起動消費電流は大きいため、再起動を繰り返したりプログラムの書き込みが出来たり出来なかったり、何かを動かしている場合に途中で止まるなどの動作が不安定となる現象が起きる場合は、まず電源系統をチェックするのが良いです。m5stackの場合はUSBケーブルを取り替えたりしてみて下さい。つい最近も、ESP32モジュールを使用した工作物で電源ラインに使用しているケーブルのコネクタ接続部分が少し緩んでいた事が原因で起動せず。しっかりとハンダ付けで結線すれば問題なくなりました。全く動作しない場合はともかく、厄介なのは起動したりしなかったりの不安定で原因特定が困難なこと。やはり電子工作を含めて電子機器の設計は電源の安定性が最重要ですね。
コメント