前回の記事では、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とライトキーを記載します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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ぐらいまで下がっています。これはエアコンをつけて窓を締め切った部屋から、ベランダに出たためです。