M5StickCPlusで温湿度ロガー その5 完成

もともとは麹を育てるためクーラーボックスを使った保温箱の内部温度を記録するのに作り、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がセントラルとなってます。

タイトルとURLをコピーしました