Featured image of post M5Stackに手持ちのセンサー全種を接続してAzure IoT Hubに測定値を送信してみた。

M5Stackに手持ちのセンサー全種を接続してAzure IoT Hubに測定値を送信してみた。

BME280 / SGP30 / SCD30 / ENV3 unit / SCD41をM5Stackにつないだ。

最終更新 2023/02/28 00:00 JST

手持ちセンサー全部盛りの欲張りセットで測定値を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を入力して保存することで
このM5Stackを追加する。(実はもうあるけど気にしないで)

認証は「対象キー」で
このデバイスをIoTハブに接続する。
は「有効化」で保存する。

追加したデバイスの認証情報はこの画面にある。 「プライマリ接続文字列」または「セカンダリ接続文字列」が必要になる。

functions

Azure Cosmos DBに蓄積した時のバッチ処理に失敗していたようなので直した。

ここをManyからOneにして

関数をこうした。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
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();
};

この保持日数を過ぎるとIotHubにおくったメッセージが消える可能性があるので

たまにこのURLにアクセスしてfunctionsを実行してメッセージをCosmosDBに送っておく。

include/credentials.hを用意する

inlcude/credentials.h.example

このファイルの以下の部分を編集してcredential.hにリネームして保存する。

  • 17行目の.wifi_ssid = “WiFiアクセスポイントのSSID”;
  • 18行目の.wifi_password= “WiFiアクセスポイントのパスワード”;
  • 19行目の.iothub_fqdn= “接続文字列の「HostName=」から「;」まで(;を含まない)の文字列”;
  • 20行目の.device_id= “追加したデバイスの名前”;
  • 21行目の.device_key= “接続文字列の「SharedAccessKey=」から残り全部の文字列”; ここで設定するのは「プライマリ接続文字列」でも「セカンダリ接続文字列」のどっちでもいい。

platformIOでビルドしてM5Stackに書き込む

ビルドが問題なく終わるとUSBケーブルをつないで Upload か Upload and Monitor すればいいと思うよ。

WiFiがつながっていれば、次回からは(platformio.iniを編集する必要があるが) Over The Air アップデートできる(だいたいOTAの方が早い。WiFiの速度だし)。

グラフ化

test/にplot_db.pyをおいているので

1
/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になるね。

comments powered by Disqus

This website uses cookies to improve your experience.
このサイトは「Googleアナリティクス」を使用しています。
Googleアナリティクスはデータの収集のためにCookieを使用しています。


Built with Hugo
テーマ StackJimmy によって設計されています。