前回の記事では、M5StickC PlusとMH-Z19CでCO2濃度を測定し、画面に表示しました。今回は、CO濃度の推移をチャートで見れるようにするため、測定値をクラウドに蓄積して可視化してみました。

クラウドサービス
データを蓄積するクラウドサービスはAmbientを使いました。無料枠でも、8チャネル×8種類のデータ、データの保存期間1年間と、個人で使うには十分すぎるサービスです。有料版は、データの受信監視や通知が利用できるようです。
クラウドサービスなので、M5StickC Plusからデータを送信するには、インターネットに繋がるWiFiのアクセスポイントが必要です。
セットアップ
Ambient公式ドキュメントの以下の手順で、チャネル生成まで行います。
- ユーザー登録(無料)
- チャネル生成
生成したチャネルの「チャネル設定」で、以下の通りデータ名を変更しておきます。
- データー1:CO2
- データー2:温度
Ambientのライブラリは、Arduino IDEのメニューバーの「ツール → ライブラリを管理…」で、「ambient」と検索すると見つかります。ライブラリ名は「Ambient ESP32 ESP8266 lib」です。バージョンは1.0.1でした。
ソースコードの更新
前回の記事のソースコードに、以下のコメント部分を追記します。「…」の部分は各自の環境に合わせて、WiFiのアクセスポイントの情報と、生成したチャネルのチャネルIDとライトキーを記載します。
| #include <M5StickCPlus.h> | |
| #include <MHZ19_uart.h> | |
| // Ambientライブラリをインクルードする。 | |
| #include "Ambient.h" | |
| const int rx_pin = 36; | |
| const int tx_pin = 26; | |
| // WiFiアクセスポイントのSSIDとパスワードを設定する。 | |
| const char* ssid = "..."; | |
| const char* password = "..."; | |
| // Ambientで作ったチャネルのチャネルIDとライトキーを設定する。 | |
| unsigned int channelId = ...; | |
| const char* writeKey = "..."; | |
| MHZ19_uart mhz19; | |
| // WiFiとAmbientの変数を宣言する。 | |
| WiFiClient client; | |
| Ambient ambient; | |
| void setup() | |
| { | |
| M5.begin(); | |
| pinMode(36, INPUT); | |
| gpio_pulldown_dis(GPIO_NUM_25); | |
| gpio_pullup_dis(GPIO_NUM_25); | |
| Serial.begin(9600); | |
| mhz19.begin(rx_pin, tx_pin); | |
| mhz19.setAutoCalibration(false); | |
| M5.Lcd.setRotation(3); | |
| M5.Lcd.setTextSize(4); | |
| // Wi-Fiアクセスポイントに接続する。 | |
| WiFi.begin(ssid, password); | |
| while (WiFi.status() != WL_CONNECTED) { | |
| delay(100); | |
| } | |
| M5.Lcd.println("WiFi connected."); | |
| // Ambientを初期化する。 | |
| ambient.begin(channelId, writeKey, &client); | |
| M5.Lcd.println("MH-Z19 is warming up now."); | |
| delay(10 * 1000); | |
| } | |
| void loop() | |
| { | |
| int co2ppm = mhz19.getCO2PPM(); | |
| int temp = mhz19.getTemperature(); | |
| M5.Lcd.fillScreen(BLACK); | |
| M5.Lcd.setCursor(0, 0); | |
| M5.Lcd.print("co2: "); | |
| M5.Lcd.println(co2ppm); | |
| M5.Lcd.print("temp: "); | |
| M5.Lcd.println(temp); | |
| // 測定値をAmbientに送信する。 | |
| ambient.set(1, co2ppm); | |
| ambient.set(2, temp); | |
| ambient.send(); | |
| delay(5000); | |
| } |
チャートの確認
Ambientでデータを送信したチャネルを開くと、CO2濃度の推移を可視化できました!
左のCO2のチャートを見ると、15:30:00過ぎに600ppmぐらいまで下がっています。これはエアコンをつけて窓を締め切った部屋から、ベランダに出たためです。































