M5Stack Core 2で始めるAzure IoT Hub入門（その２）

[前回→https://qiita.com/hatsune_/items/ef1b97376c7b66ddac2c](https://qiita.com/hatsune_/items/ef1b97376c7b66ddac2c)

# はじめに
２回目の今回は、M5Stackへの外部接続について、少しまとめておきたいと思います。

# M5Stack Coreの外部インターフェース
M5Stackの本体であるCoreモジュールには、外部機器との接続用インターフェースとして次の３つが用意されています。

- USB
- PORT.A.I2C
- M-Bus

ピン配置などは、M5Stack Core 2の場合は本体裏面にプリントされています。
![M5Stack Core ](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210605/20210605124344.png)

## USB
USB-Cが給電+シリアル接続用に用意されています。シリアル接続はCP2104を使って実現しており、ESP32でいえばTXD3とRXD3になります。
USB接続した端末で開発環境が稼働していれば、このルートを使ってシリアル入出力を実現しています。
また、AXP192という電源管理のチップセットがあり、内部電源か外部電源かやバッテリー電圧なども取得できます。FactoryTestスケッチなどはこのあたりを使っていると思います（FactoryTestスケッチについては後日取り上げる予定です）。

## PORT.A.I2C
PORT.A.I2Cは、Inter-Integrated Circuitの略であり、アイ・スクエア・シーまたはアイ・ツー・シーと呼ばれるシリアルバス規格です。
I2C対応機器にはどのようなものがあって、どうやって繋ぐかなどは2015年の記事となりますが、buildinsiderで記事を書かせていただいていますので、そちらをご覧いただくとよいと思います。
[https://www.buildinsider.net/small/netduino/04]
Netduinoも電源5Vラインですのでピン配置に気を付ければ接続先の回路などはそのまま流用できます。

### IC2のピン配置を確認する
記事中では、I2Cは「SCL」「SDA」「VDD」「GND」のピンがあるとしています。
M5Stack Core 2をみると、PORT.A.I2Cのピン配置は、液晶面を上にした状態で左から「G33」「G32」「5V」「GND」となっています。
このM-Basピン配列ではG33=PA_SCL、G32=PA_SDAとありますので、PORT.A.I2Cのピン配置は「SCL」「SDA]「5V」「GND」となります。
実際に端子を指すところにもSCLにはクロック信号っぽいマーク、SDAにはON/OFFの２値っぽいマークがついてます。
さらにダメ押しの確認としてPORT.A.I2Cに接続できる「温度湿度環境センサ付きユニット」の接続ピン配置を確認してみましょう。
![ENV.2 SENSOR](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210605/20210605124751.png)
こちらはしっかりと「SCL」「SDA」「5V」「GND」って表記になっています。どうやらPORT.A.I2Cのピン配置は「SCL」「SDA]「5V」「GND」で間違いなさそうです。

### PORT.A.I2CとGROVE互換インターフェース
M5StackのPORT.A.I2CはGROVE互換インターフェースとも呼ばれています。
GROVEは、Arduinoと容易に接続するためのインターフェースで、Seeed社から様々なGROVEシリーズのモジュール（拡張機器）が提供されています。
仕様が公開されていますので、Seeed社以外からも様々なモジュールが販売されています。
[https://www.switch-science.com/catalog/list/?keyword=GROVE:embed:cite]
GROVEと互換があるということはM5Coreでも、GROVEモジュールをつなげて使えるということになります。

## M-Bus
M-Busは、ESP32 (Coreの中心となるSoC) の次のピンを取り出しているインターフェースです。
- G0：I2S LRCK PDM CLK
- G1：TXD0
- G2：I2S DOUT
- G3：RXD0
- G13：RXD2
- G14：TXD2
- G18：SCK
- G19：GPIO
- G21：intSDA
- G22：intSCL
- G23：MOSI
- G25：DAC
- G26：DAC
- G27：GPIO
- G32：PA_SDA (PORT.A.I2Cと同じ)
- G33：PA_SCL (PORT.A.I2Cと同じ)
- G34：PDM DAT
- G35：ADC
- G36：ADC
- G38：MISO
- GND
- 3.3V
- 5V
- RST
- BAT

M-Busを使うことでESP32の（すべてではないですが）ピンに接続できますので、PORT.A.I2C端子よりもつながるものがかなり多くなります。また、ピン配置もM5Stackの「モジュール」と呼ばれるものであれば筐体の大きさも含めて、M5Coreとぴったり重ね合わせできるので、取り扱いも楽になります。
「モジュール」には、例えば、GPSモジュールなどはI2CではなくGPIOで接続するためM-Bus接続のモジュールとして提供されています。
[https://www.switch-science.com/catalog/3861/]

### M-BusにPORT.A.I2Cと同じものがあるということは
GROVE互換インターフェースをもったものであれば、Busモジュールの中に入れてしまってM5Coreの下に重ね合わせてしまうなんていうこともできます。
[https://www.switch-science.com/catalog/6062/]

### M-BusにGPIOがあるということは
M-BusにGPIOがあるということは、GPIOがつながる色々な機器ともつながるということですね。
みんな大好きMESHにもGPIOがありますから、MESHでの操作をGPIOでBusモジュール+M5Coreで収集して、Wi-Fiに飛ばしてAzureでなんということも可能です。
MESHとGPIOについての詳細は、BuildInsiderに記事を掲載いただいてますので、見ていただけると嬉しいです。
[https://www.buildinsider.net/small/netduino/13]

# おまけ：温度湿度環境センサについて
[https://www.switch-science.com/catalog/6344/]
このセンサですが、温湿度センサーとしてSHT-30、気圧センサーとしてBMP280が内蔵されています。
BMP280単体のGROVEモジュールもあるので気圧センサーだけだったらそれを使う手もあります。
[https://www.switch-science.com/catalog/3373/]
GROVEモジュールであれば、GROVE互換インターフェースであるPORT.A.I2Cともつながります。
でも、M5Stack用のユニットなら外装あるので、ユニットの方が扱いが楽かもしれないですね。

それでは、また、次回まで！
次回はいよいよM5Stackのプログラミング（スケッチ）に取り掛かります。
[https://qiita.com/hatsune_/items/20e983d25835dd145a1b]