もともとは麹を育てるためクーラーボックスを使った保温箱の内部温度を記録するのに作り、30分間隔でスローメモリ記録し確認はクーラーボックスから取り出して確認する感じ、これは苦なくできた。
次はBluetoothで計測データを飛ばし手元で確認するシステムの作成、Bluetoothは使うことがあっても作ることは無くまずはBluetoothの勉強をした。

構成
M5Stick-CPlueでデータ収集、BLEで送信
M5Stick-CでBLEデータを受信、表示
データ収集するならM5Stick-Cで良いと思うかもしれないがバッテリーの持ちが全然違い、M5Stick-CPlusなら一度の充電で一日は持ちます。
他方M5Stick-Cは受信表示用で常に電源入れっぱなしにするためUSB-Cで給電しながら使えばバッテリー量の少なさは気にならない、はず。
ペリフェラル M5Stick-CPlus
サーバーとも呼ぶ。
Env2Hatから温度・湿度・気圧を取得して30分間隔でスローメモリに保存。Bluetooth使用時は指定した(1,3,5,15,30間隔)で各データを送信、30分間隔でスローメモリに保存。
アラーム機能があり温度の上限・下限を指定すれば範囲を超えたときにアラームを送信データに乗せる。
セントラル M5Stick-C
クライアントとも呼ぶ。
セントラルから受け取ったデータを表示する単純な機能。ゆくゆくはM5Stack化。
ペリフェラルは最大9台まで接続可とした。
送信データ構造
アラームデータを考え先日のから少々改定。
UUID(Universally Unique Identifier)
サービスUUIDは「環境センサー」のIDが偶然見つかりそれを使った。キャラスティックIDは独自データにつきhttps://www.uuidgenerator.net/でジェネレート。
static NimBLEUUID serviceUUID("181a"); // Environment Sensing UUID(0000181a-0000-1000-8000-00805f9b34fb)
static NimBLEUUID charUUID("156f7abe-87c8-11eb-8dcd-0242ac130003"); // Generate https://www.uuidgenerator.net/
BLEデータ
typedef struct { // Bluetoothで使用するデータ 2byte * 7 = 14
uint8_t id; // uniqueID 送信側の個々IDに使用
union {
struct {
char alarmTL : 1; // 低温度アラーム
char alarmTH : 1; // 高温度アラーム
char unused : 6; // 未使用
};
uint8_t flags; // statusフラグ
};
struct { // 月日
uint8_t month; // 月
uint8_t date; // 日
} md;
struct { // 時分
uint8_t hours; // 時
uint8_t minutes; // 分
} hm;
int16_t pressure; // 気圧 int(pres * 10)
int16_t temperature; // 温度 int(temp * 100)
int16_t humidity; // 湿度 int(temp * 100)
int16_t voltage; // 電圧 int(volt * 100)
};
公開
github
自己責任で!
Plus_Env2Hat_Loggerがペリフェラル、LogLientMltがセントラルとなってます。