単純な数値送信とグラフ化ができたので、
今度はセンサーで取得した温度を5分おきに蓄積させてみる。
センサーの使い方は以前の実験でやってるのでソースをコピー
回路はブレッドボード上にプルアップ回路を急造
信号線(黄色)と電源線(赤色)の間に、1.1KΩの抵抗を入れてある。
これが無いと-127という値しか取得できない。
超実態配線図
これはボタンを押す度に送信するプログラムでのシリアルコンソール出力
ディレイで5分ごとにAmbientへ送信する設定とした。
次はディープスリープに挑戦ですね。
なお、タイムサーバへ接続して時刻を補正することもできるが、サーバ側で時刻を記録してくれるのでやっていない。
祝いの宴会しつつ一晩Atomを動かした結果のグラフ
ちゃんとやっててくれたようです!
ダウンロードしたデータ
オリジナルデータはmsまで記録されてますがExcelではそのまま表示はできなかった。
WiFiが込み合う場所では接続のソースに工夫が必要だという記事があった。
DeepSleepに改編する際は、要チェックだ。
■■■ ソース ■■■
コメント解説は前回から変化した部分だけ
#include "M5Atom.h"
#include "Ambient.h"
#include <OneWire.h>// 温度センサーとの通信モジュール
#include <DallasTemperature.h>// 温度センサーのデータを変換するライブラリ
#define ONE_WIRE_BUS 21 // 温度センサー接続Pin 番号
WiFiClient client;
Ambient ambient;
OneWire oneWire(ONE_WIRE_BUS); // 通信モジュールのオブジェクト生成
DallasTemperature sensors(&oneWire); // 温度測定のオブジェクト生成
const char* ssid = "WAR*******";
const char* password = "8F*******";
unsigned int channelId = 38****; // AmbientのチャネルID
const char* writeKey = "d34****"; // 書き込みのキー
void setup() {
M5.begin(true, false, true); // use LED
delay(50);
M5.dis.drawpix(0, 0x00f000); // RED RED
delay(50);
Serial.begin(115200);
Serial.print("start M5Atom-lite\n");
WiFi.begin(ssid, password);
Serial.print("WiFi start ");
while(WiFi.status()!=WL_CONNECTED) {
delay(500);
Serial.print("x");
}
Serial.print("\r\nWiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
M5.dis.drawpix(0, 0xf00000); // green
ambient.begin(channelId, writeKey, &client); // Ambient環境初期化
sensors.begin(); // 温度計開始
}
int cnt = 0; // 今回は送信カウントに使用する。偶奇判断でLED色を変化させるだけに使ってる
void loop() {
cnt++;
Serial.print("IP:");
Serial.print(WiFi.localIP());
Serial.print(" Loop cnt:");
Serial.print(cnt);
if( cnt % 2 == 0 ){ // LED色変え
M5.dis.drawpix(0, 0x707070); // white
} else {
M5.dis.drawpix(0, 0x0000f0); // Blue
}
sensors.requestTemperatures(); // 温度センサー測定開始宣言 1秒以下だがタイムラグが生じる
Serial.print(" sensor(0)\t");
float tmp = sensors.getTempCByIndex(0); // 温度を変数「tmp」に格納
Serial.println(tmp);
ambient.set(1, tmp); // 温度値をdata1にセットt
ambient.send(); // 送信!
delay(300 * 1000); // 300 = 300秒 = 5分
M5.update();
}