GROVEポート(I2C)経由で取得
void setup()
{
while (!bmp280.begin(0x77))
{
}
}
void loop()
{
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure() / 100;
}
BLE経由で取得
class AdvertisedDeviceCallback : public BLEAdvertisedDeviceCallbacks
{
void onResult(BLEAdvertisedDevice device)
{
std::string str = device.getServiceData();
const char *data = str.c_str();
int batteryLevel = data[2] & 0b01111111;
float temperature = (data[3] & 0b00001111) / 10.0 + (data[4] & 0b01111111);
int humidity = data[5] & 0b01111111;
bool isBelowZero = !(data[4] & 0b10000000);
if (isBelowZero)
{
temperature = -temperature;
}
}
};
USB経由でシリアル通信
Q. なんでWiFi経由で送らないの?
A. プログラムがメモリに収まらなかったから
本当はM5StickCだけで完結させたかった…
Node.js
const SerialPort = require('serialport');
const Readline = require('@serialport/parser-readline');
const port = new SerialPort('/dev/ttyUSB0', { baudRate: 115200 });
const parser = new Readline();
port.pipe(parser);
parser.on('data', line => {
});
InfluxDB Cloud 2.0
const { InfluxDB, Point } = require('@influxdata/influxdb-client');
const client = new InfluxDB({ url: '', token: '' });
const writeApi = client.getWriteApi('', '');
const ts = new Date();
const point1 = new Point('data');
point1.timestamp(ts);
point1.floatField('temperature', receivedObject.temperature);
point1.floatField('pressure', receivedObject.pressure);
point1.tag('host', 'm5stickc');
writeApi.writePoint(point1);
database/retention policy (DBRP) mappingを設定しないと動かない
influx v1 dbrp create \
--db example-db \
--rp example-rp \
--bucket-id 00xX00o0X001 \
--default
ブラウザからポチポチするだけ!!
作ったダッシュボードは必ず非公開に!!
公開すると「その成果を発表するための気象の観測」に該当する
→気象観測の届出・検定制度の対象になる
家にいる時間が増えた今日、しっかりモニタリングすることで部屋の環境を快適に保つための良い指標になります。
部屋を快適にして、より良い自粛生活をしていきたいと思っています。