手持ちセンサー全部盛りの欲張りセットで測定値を Azure IoT に送信しようと思う。
そこで
CO2 センサー(SCD30)を接続した M5Stack で測定値を記録して毎週の変化をグラフで見てみる。
のときに書いたソフトウェアを BME280 / SGP30 / SCD30 / ENV.III unit / SCD41 に対応するようにほぼ全部書き換えた。
用意するもの
M5Stack Core2 for AWS を用意できればそれを使えばいいと思うよ。
あのとき売り切れだったから M5Stack Core2 と M5GO Bottom2 を組み合わせただけなので。
接続
上の M5Stack UNIT を見ると"I2C INTERFACE"となっていてコネクタが赤色なので PORT.A に全部つなぐ。
こういうふうに M5Stack の I2C ポートである Port.A にハブ経由で全部つなぐだけ
さすがに全部盛りだからか電源から 800mA も(状況によってはおそらく 1A くらいは)ひっぱるのでそのつもりで。
GitHub リポジトリ
ENV.III unit/ SCD41 を追加した。
https://github.com/ak1211/m5stack-azure-iot
VSCode + PlatformIO
できるだけ新しい C++を使いたいから皆すでに VSCode と PlatformIO の準備はできているでしょう。
しらんけど。
Azure IoT Hub
M5Stack Core2 IoT 開発キットを Azure IoT Hub に接続して BME280 で測定した環境のグラフをみる。
のときに準備した Azure Iot Hub と
M5Stack Core2 で測定したデータを Azure Cosmos DB に蓄積してみた。
のときに準備した Azure Cosmos DB を今回も使っていきます。
デバイスの追加
Azure IoT Hub の「デバイスの追加」から「デバイスの作成」に移動してデバイス ID を入力して保存することで
「プライマリ接続文字列」または「セカンダリ接続文字列」が必要になる。
functions
module.exports = function (context, myEventHubMessage) {
// context.log('Function triggered to process a message: ', myEventHubMessage);
// We need sensorId parameters.
if (myEventHubMessage.sensorId) {
myEventHubMessage["proceededAt"] = new Date().toISOString();
context.log(myEventHubMessage);
// Set the output binding data from the query object.
context.bindings.outputDocument = myEventHubMessage;
// Success.
context.res = {
status: 200,
};
} else {
context.res = {
status: 400,
body: "The query options 'sensorId' are required.",
};
}
context.done();
};
include/credentials.h を用意する
このファイルの以下の部分を編集して credential.h にリネームして保存する。
- 17 行目の.wifi_ssid = “WiFi アクセスポイントの SSID”;
- 18 行目の.wifi_password= “WiFi アクセスポイントのパスワード”;
- 19 行目の.iothub_fqdn= “接続文字列の「HostName=」から「;」まで(;を含まない)の文字列”;
- 20 行目の.device_id= “追加したデバイスの名前”;
- 21 行目の.device_key= “接続文字列の「SharedAccessKey=」から残り全部の文字列”; ここで設定するのは「プライマリ接続文字列」でも「セカンダリ接続文字列」のどっちでもいい。
platformIO でビルドして M5Stack に書き込む
WiFi がつながっていれば、次回からは(platformio.ini を編集する必要があるが) Over The Air アップデートできる(だいたい OTA の方が早い。WiFi の速度だし)。
グラフ化
test/に plot_db.py をおいているので
/mnt/d/m5stack-azure-iot/test$ ./plot_db.py CosmosDBのURI CosmosDBのキー
でグラフ化できる。
CosmosDB の URI と CosmosDB のキーはこの画面にある。
1週間分のグラフ
ソフトのバグを修正したので, データが欠落しないようになった。
M5ENV.Ⅲ Unit の SHT30 と BME280 はほぼ同じ温度と湿度と気圧。
SCD41 はそれより温度が高めになる
SCD30 はさらに温度が高めになる
SCD41 と SCD30 の CO2 はほぼ一致する。
SGP30 の equivalent CO2 は何を測定しているんだ?
実行
こんな感じになる。 タッチスクリーンを使うとスマホみたいな UI になるね。
コメント