第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 CodeとArduino IDEの行き来ができるように、Arduino IDEのお作法に沿ってフォルダを作成しておきましょう。
今回は「Env2Unit」というフォルダにしましょう。
フォルダを作成した直後のVisual Studio Codeのエキスプローラー表示をみてみましょう。
シリアルポートの設定
その1でArduino拡張 (およびc++拡張) はインストール済ですので、M5CoreをUSBで接続してから、Ctrl+Shift+Pで「Arduino: Select Serial Port」で、シリアルポートを選択します。
こうすることで「Env2Unit」フォルダの中に「.vscode」フォルダが作成されて、「Env2Unit」フォルダを開いた設定として、指定したポート番号が適用されるようになります。
ボードを選択
Ctrl+Shift+Pで「Arduino: Board Config」を選択して、ボードを選択します。
スケッチファイルを作成
新規ファイル追加で「Env2Unit.ino」ファイルを作成します。
Arduino.jsonにスケッチファイル名を指定する
"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」を起動して必要なライブラリが提供されているかを確認します。
サクッとインストールします。
スケッチ解析エラーを解決する
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 SENSORで気温と湿度を測定
BMP280用ライブラリを追加
"Adafruit_Sensor.h"と同様に公式GitHubから”SHT3X.h”と”SHT3X.cpp"を"Adafruit_Sensor.h"と同じ場所にダウンロードします。
ENV.IIで測定した室温と湿度を表示
SHT3Xに関する処理を追加してスケッチを完成させます。
gist.github.com
- loop関数の中では、Sht30.get()によって温度 (cTemp) と湿度 (humidity) を取得します。
室温が30度近かったんですね。暑いはずです。
ライブラリは必要?
今回はM5Stack用モジュールとして販売されているものだったので公式サイトからライブラリを入手できました。
もし、自分で作成した回路をつなげるような場合であれば、利用ている回路のデータシートなどからI2Cでのデータフォーマットを把握して、その部分を作成してあげることで、ライブラリを使わなくても同じようなことが可能です。
次回はAzure側の準備についてふれてみたいと思います。
hatsune.hatenablog.jp