GASでTwitter API応用編①~フォローバックする~
n-mukineer
エヌローグ
こんにちは、えぬ(@nmukineer)です!
前回はM5StackをWiFiに接続できるようにしました。今回はAmbientというデータ可視化サービスを使ってCO2濃度をグラフ化してみたいと思います!
Ambientの始め方は以下の記事を参考にして下さい。
今回はAmbient.hというライブラリを使用します。
インストール方法についてはAmbientのチュートリアルページに載っていますので参照してください。
Ambientは無料で使用できる分、アップロードできるデータレート(一定時間あたりにアップロードできるデータ数)には制限があります。
Ambientのページには以下のように書いてあります。
1チャネルあたり1日3,000件までデーターを登録できます。平均すると28.8秒に1回のペースです。
つまり、30秒に1回程度のデータ数であれば問題ないということになります。
今回は1分に1回としていますので、問題なしです。
今回作成したソースコードはこちらです。
#include <M5Stack.h>
#include <MHZ19_uart.h>
#include <HTTPClient.h>
#include "Ambient.h"
#define ARDUINO_ARCH_ESP32
#define PERIOD 60
#define THPPM 1000
WiFiClient client;
const char* ssid = "WiFiのSSIDを入れてください";
const char* password = "WiFiのパスワードを入れてください";
Ambient ambient;
unsigned int channelId = チャネルIDを入れてください; // AmbientのチャネルID
const char* writeKey = "ライトキーを入れてください"; // ライトキー
const int rx_pin = 16; //Serial rx pin no
const int tx_pin = 17; //Serial tx pin no
MHZ19_uart mhz19;
/*----------------------------------------------------------
MH-Z19 CO2 sensor setup
----------------------------------------------------------*/
void setup() {
M5.begin();
delay(100);
Serial.println("Hello");
mhz19.begin(rx_pin, tx_pin);
mhz19.setAutoCalibration(false);
int i = 500;
WiFi.begin(ssid, password); // Wi-Fi APに接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(20,120);
M5.Lcd.printf("Connecting...");
i--;
if(i<0){
delay(250);
M5.Power.reset();
}
}
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(20,120);
M5.Lcd.printf("Connected!\n");
M5.Lcd.clear();
M5.Lcd.setBrightness(50);
ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
}
/*----------------------------------------------------------
MH-Z19 CO2 sensor loop
----------------------------------------------------------*/
void loop() {
unsigned long startt = millis(); // loopの開始時刻を記録
int co2ppm = mhz19.getPPM();
int temp = mhz19.getTemperature();
ambient.set(1, co2ppm);
ambient.set(2, temp);
ambient.send();
Serial.print("co2: "); Serial.println(co2ppm);
Serial.print("temp: "); Serial.println(temp);
M5.Lcd.clear();
M5.Lcd.setTextSize(10);
M5.Lcd.setCursor(20,120);
M5.Lcd.printf("%dppm\n", (int)co2ppm);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(20,0);
M5.Lcd.printf("RSSI:%d dBm", WiFi.RSSI());
delay(PERIOD*1000);
if(int(co2ppm) >= THPPM){
send("CO2:"+String(co2ppm)+"ppm.");
send("Please_do_ventilation_right_now!!");
}
delay(PERIOD*1000);
wifi_lan_check();
}
/*
* LINE Notifyにメッセージを送る
*
*/
void send(String value1) {
HTTPClient http;
http.begin("https://notify-api.line.me/api/notify?message=" + value1);
http.addHeader("Authorization", "Bearer トークンを入れてください"); //リクエストヘッダに先ほ>ど控えたトークンをセット
int httpResponseCode = http.POST("POSTING from M5stack");
}
/*
* void wifi_lan_check()
* WiFi Lan の監視をします。
* WiFi.status() で判断するよりも、ping で応答をチェックした方が、早いかも。
*/
void wifi_lan_check(){
int i;
if(WiFi.status() != WL_CONNECTED){
M5.Lcd.clear();
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(20,120);
M5.Lcd.printf("Connecting...");
WiFi.disconnect();
delay(50);
WiFi.begin(ssid, password);
i=50;
while (WiFi.status() != WL_CONNECTED) {
delay(250);
i--;
if(i<0){
delay(250);
M5.Power.reset();
}
}
}
}
M5Stackにプログラムを書き込んで動作確認してみます。
Ambientのボードのページにアクセスします。ボードの設定を行い、アップロードされたデータを見てみます。
こちらのように、CO2濃度(と温度)が折れ線グラフで可視化できてます!
M5StackとAmbientを連携して、測定したCO2データを可視化することができました。
次回は、GASにAPIを立ててM5StackからPOSTする、に挑戦したいと思います!