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

前回
[https://qiita.com/hatsune_/items/5af2e1cbdbf3e2ff0e4f]

第３回目の今回は、M5Coreでのプログラミングの基礎と、PORT.A.I2Cでの入出力について調べていきたいと思います。
第１回ではArduino IDEでスケッチを作成した後に、Visual Studio Codeでそのスケッチを取り扱えるようにVisual Studio Codeの環境を整えました。
今回は、第１回で環境整備の基本はおわっているので、Visual Studio Codeで新規にスケッチを作成する方法を確認していきます。

# Visual Studio Codeでの新規プログラミング
Visual Studio Codeの[ファイル]-[フォルダを開く]で新しいスケッチを入れるためのフォルダを作成してから開きます。
これは、Arduino IDEが、例えば「hoge.ino」というスケッチを扱うには、必ず「hoge」フォルダの下に「hoge.ino」を期待しているからです。
あとからArduino IDEでスケッチを開きたいということがあったときもスムーズにVisual Studio CodeとArduino IDEの行き来ができるように、Arduino IDEのお作法に沿ってフォルダを作成しておきましょう。
今回は「Env2Unit」というフォルダにしましょう。
フォルダを作成した直後のVisual Studio Codeのエキスプローラー表示をみてみましょう。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210607/20210607205749.png)

## 各種設定
### シリアルポートの設定
その１でArduino拡張 (およびc++拡張) はインストール済ですので、M5CoreをUSBで接続してから、Ctrl+Shift+Pで「Arduino: Select Serial Port」で、シリアルポートを選択します。
こうすることで「Env2Unit」フォルダの中に「.vscode」フォルダが作成されて、「Env2Unit」フォルダを開いた設定として、指定したポート番号が適用されるようになります。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210607/20210607210343.png)

### ボードを選択
Ctrl＋Shift＋Pで「Arduino: Board Config」を選択して、ボードを選択します。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210607/20210607211437.png)

###  スケッチファイルを作成
新規ファイル追加で「Env2Unit.ino」ファイルを作成します。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210607/20210607211106.png)

### Arduino.jsonにスケッチファイル名を指定する
![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210607/20210607212343.png)
"sketch": "Env2Unit.ino"
を追加すると<span style="color: #ff0000">自動的にスケッチの解析</span>が行われて、<span style="color: #ff0000">「c_cpp_properties.json」ファイルが作成</span>されます。

### M5Stack用のインテリセンスが効くように設定
c_cpp_properties.jsonを開いて、includePathにArduino IDEで指定したスケッチブックの保存場所の中のライブラリを指定します。
>
例："C:\Users\hatsune\Documents\Arduino\libraries\\**",

前の行の最後に , を入れるのも忘れないようにしましょう。

### 準備が整ったかを確認
簡単なスケッチを記述して、M5Coreにデプロイして動作することを確認します。
[https://gist.github.com/hatsunea/7ff0b9cdec4870259f9243096c6408ae]

# ENV.II SENSORで気圧を測定

## BMP280用ライブラリを追加
ENV.II SENSORは、SHT30とBMP280が内蔵されています。
BMP280は気圧センサーなので、気圧の表示部分を作成してみます。
Ctrk+Shift+Pで「Arduino Library Manager」を起動して必要なライブラリが提供されているかを確認します。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210607/20210607222821.png)
サクッとインストールします。

## スケッチ解析エラーを解決する
BMP280用ライブラリを使うために
> include &lt;Adafruit_BMP280.h&gt;

をスケッチに追加して解析すると"Adafruit_Sensor.h"がないというエラーが表示されます。
前年ながらArudino Library Managerでは追加できないので公式GitHubから落としてきます。
[https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/ENVII/Arduino/ENVII]
ファイルの保存先は、ライブラリフォルダの中の[Adafruit_BMP280_Library]フォルダです。
>
例："C:\Users\hatsune\Documents\Arduino\libraries\\Adafruit_BMP280_Library",

## ENV.IIで測定した気圧を表示
[https://gist.github.com/hatsunea/60f0f109959c9b3c5ac88e258b03ec49]

1. 動作に必要な４つのライブラリをincludeします。
+ Wire.Begin() でPORT.A.I2C を初期化します。
+ while (!Bmp.begin(0x76)) でアドレス0x76を指定して接続します。
+ loop関数の中では、Bmp.readPressure()によって気圧を取得します。
+ M5.Lcd.setCursor(0, 0); で液晶画面先頭にカーソルを移動します。
+ M5.Lcd.printfで情報を表示します。
+ 0.1秒ごとに更新します。

![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210607/20210607233127.png)

# ENV.II SENSORで気温と湿度を測定

## BMP280用ライブラリを追加
"Adafruit_Sensor.h"と同様に公式GitHubから”SHT3X.h”と”SHT3X.cpp"を"Adafruit_Sensor.h"と同じ場所にダウンロードします。

## ENV.IIで測定した室温と湿度を表示
SHT3Xに関する処理を追加してスケッチを完成させます。
[https://gist.github.com/hatsunea/424a098192a96fd62d181841b109a827]

loop関数の中では、Sht30.get()によって温度 (cTemp) と湿度 (humidity) を取得します。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/h/hatsune_a/20210608/20210608002833.png)

室温が30度近かったんですね。暑いはずです。

# ライブラリは必要？
今回はM5Stack用モジュールとして販売されているものだったので公式サイトからライブラリを入手できました。
もし、自分で作成した回路をつなげるような場合であれば、利用ている回路のデータシートなどからI2Cでのデータフォーマットを把握して、その部分を作成してあげることで、ライブラリを使わなくても同じようなことが可能です。

# 次回
次回はAzure側の準備についてふれてみたいと思います。
[https://qiita.com/hatsune_/items/3ebcba2384f6e302fafd]