はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

M5Stack Core 2で始めるAzure IoT Hub入門(その3)

前回
hatsune.hatenablog.jp

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

Visual Studio Codeでの新規プログラミング

Visual Studio Codeの[ファイル]-[フォルダを開く]で新しいスケッチを入れるためのフォルダを作成してから開きます。
これは、Arduino IDEが、例えば「hoge.ino」というスケッチを扱うには、必ず「hoge」フォルダの下に「hoge.ino」を期待しているからです。
あとからArduino IDEでスケッチを開きたいということがあったときもスムーズにVisual Studio CodeArduino IDEの行き来ができるように、Arduino IDEのお作法に沿ってフォルダを作成しておきましょう。
今回は「Env2Unit」というフォルダにしましょう。
フォルダを作成した直後のVisual Studio Codeのエキスプローラー表示をみてみましょう。
f:id:hatsune_a:20210607205749p:plain

シリアルポートの設定

その1でArduino拡張 (およびc++拡張) はインストール済ですので、M5CoreをUSBで接続してから、Ctrl+Shift+Pで「Arduino: Select Serial Port」で、シリアルポートを選択します。
こうすることで「Env2Unit」フォルダの中に「.vscode」フォルダが作成されて、「Env2Unit」フォルダを開いた設定として、指定したポート番号が適用されるようになります。
f:id:hatsune_a:20210607210343p:plain

ボードを選択

Ctrl+Shift+Pで「Arduino: Board Config」を選択して、ボードを選択します。
f:id:hatsune_a:20210607211437p:plain

スケッチファイルを作成

新規ファイル追加で「Env2Unit.ino」ファイルを作成します。
f:id:hatsune_a:20210607211106p:plain

Arduino.jsonにスケッチファイル名を指定する

f:id:hatsune_a:20210607212343p:plain
"sketch": "Env2Unit.ino"
を追加すると自動的にスケッチの解析が行われて、「c_cpp_properties.json」ファイルが作成されます。

M5Stack用のインテリセンスが効くように設定

c_cpp_properties.jsonを開いて、includePathにArduino IDEで指定したスケッチブックの保存場所の中のライブラリを指定します。

例:"C:\Users\hatsune\Documents\Arduino\libraries\\**",

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

準備が整ったかを確認

簡単なスケッチを記述して、M5Coreにデプロイして動作することを確認します。
gist.github.com

ENV.II SENSORで気圧を測定

BMP280用ライブラリを追加

ENV.II SENSORは、SHT30とBMP280が内蔵されています。
BMP280は気圧センサーなので、気圧の表示部分を作成してみます。
Ctrk+Shift+Pで「Arduino Library Manager」を起動して必要なライブラリが提供されているかを確認します。
f:id:hatsune_a:20210607222821p:plain
サクッとインストールします。

スケッチ解析エラーを解決する

BMP280用ライブラリを使うために

#include <Adafruit_BMP280.h>

をスケッチに追加して解析すると"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で測定した気圧を表示

gist.github.com

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

f:id:hatsune_a:20210607233127p:plain

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

BMP280用ライブラリを追加

"Adafruit_Sensor.h"と同様に公式GitHubから”SHT3X.h”と”SHT3X.cpp"を"Adafruit_Sensor.h"と同じ場所にダウンロードします。

ENV.IIで測定した室温と湿度を表示

SHT3Xに関する処理を追加してスケッチを完成させます。
gist.github.com

  1. loop関数の中では、Sht30.get()によって温度 (cTemp) と湿度 (humidity) を取得します。

f:id:hatsune_a:20210608002833p:plain

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

ライブラリは必要?

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

次回はAzure側の準備についてふれてみたいと思います。