keitanakのアイコン画像
keitanak 2024年05月12日作成 (2024年05月12日更新) © MIT
製作品 製作品 閲覧数 585
keitanak 2024年05月12日作成 (2024年05月12日更新) © MIT 製作品 製作品 閲覧数 585

Seeed XIAO BLE nRF52840を使ってBLE IoT センサーを作る(製作編)

Seeed XIAO BLE nRF52840を使ってBLE IoT センサーを作る(製作編)

はじめに

前回こちらの記事で実験したBLEセンサを、さらに具体的用途を決めて、製作を行いました。
https://elchika.com/article/4a636116-52cf-4ce1-ba62-231c59ee4500/

自宅の温度・湿度・気圧・CO2の測定とクラウドでの記録を目的としています、センサは室内・室外に設置する想定です。

室内センサ

室内センサで測定するのは、温度・湿度・気圧・CO2になります。CO2センサの電力消費が多いことから、電池駆動はあきらめ、USBで常時電源を供給して動作するようなものにします。

回路図

シンプルです、XIAO BLEとBME280、CO2センサーのみです。

https://github.com/keitanak/XIAO-BLE-IoT-Sensor/blob/aa0b50139732115090462319ed96713261f148c4/schematic/XIAO-BLE-Sensor-CO2.pdf

ソースコード

こちらに公開しました。Platform IOでArduinoを利用したファイル一式です。ほかの環境でのテストは未確認ですが、platform IOで読み込ませることで、たぶんこのまま利用できると思います。
https://github.com/keitanak/XIAO-BLE-IoT-Sensor

ソースコードの以下のコメントを外すことで、CO2センサからもデータの取得をおこない、BLEデータとしてアドバタイズします。

image.png

データフォーマットはヘッダー部分を除いて、以下のようにしています。

// 温度
  0x10,0x00,0x00,
  // 湿度
  0x11,0x00,0x00,
  // 気圧
  0x14,0x00,0x00,
  // Battery voltage
  0x40,0x00,
  // CO2
  0x17,0x00,0x00

外観

簡単なものですが、プリント基板にしてみました。JLCPCBさんにオーダーしました。

左側がCO2センサ、右上がBME280、右下にXIAO BLEです。ちょっと密着しすぎましたかね。

IMG_20240406_185003780.jpg

室外センサ

室内センサで測定するのは、温度・湿度・気圧になります。BME280のみで済むのでスリープも組み合わせて消費電力を抑えます、電池駆動で、必要な時にUSBで充電して動作するようなものにします。

回路図

シンプルです、XIAO BLEとBME280のみです。ここには表現されていませんが、LIPOバッテリーも必要です。

https://github.com/keitanak/XIAO-BLE-IoT-Sensor/blob/aa0b50139732115090462319ed96713261f148c4/schematic/XIAO-BLE-Sensor.pdf

ソースコード

https://github.com/keitanak/XIAO-BLE-IoT-Sensor

ソースコードの以下のコメントを入れておくことで、BME280のみデータの取得をおこない、BLEデータとしてアドバタイズします。

image.png

バッテリー駆動にするために、消費電力を抑えるための仕組みを入れてみています。
XIAOでArudino利用時のスリープ動作に関して、なかなかまとまった情報がなかったのですが、
こちらのスレッドの内容が一番役に立ちました。

https://forum.seeedstudio.com/t/system-on-sleep-of-xiao-ble/270472

スリープに関わる要点だけ抜き出してみます

// このライブラリが必要のようです
#include <Adafruit_SPIFlash.h>  // Need to be deleted /Documents/Arduino/libraries/SdFat

// setup()の中では以下の部分を実施しておきます。
  // Enable DC-DC converter
  NRF_POWER->DCDCEN = 1;  // Enable DC/DC converter for REG1 stage

  // Sleep QSPI flash
  flashTransport.begin();
  flashTransport.runCommand(0xB9);  // enter deep power-down mode
  flashTransport.end();

// loop()の中ではスリープするのみでよさそうです。
  //待ち時間を入れます。
  delay(delayTime);

この状態で消費電流を計測してみると、スリープしている期間の消費は5μアンペアです。かなり抑えられていますので、これで良しとしました。

IMG_20240511_110830749-2.jpg

データフォーマットはヘッダー部分を除いて、以下のようにしています。

// 温度
  0x10,0x00,0x00,
  // 湿度
  0x11,0x00,0x00,
  // 気圧
  0x14,0x00,0x00,
  // Battery voltage
  0x40,0x00,
  // CO2
  0x17,0x00,0x00

外観

簡単なものですが、プリント基板にしてみました。PCBGOGOさんにオーダーしました。

左側がBME280、右側下にXIAO BLEです。真ん中にあるジャンパは消費電流を測定する場合に利用しますが、通常はショートします。

IMG_20240511_141426851_MP-2.jpg

動作確認

まだ長時間の評価はしていませんが、ひとまずはデータがアドバタイズされています。

CO2センサー付き

Screenshot_20240512-173549-2.jpg

10 0AC2 温度 27.54℃
11 1140 湿度 44.16%
14 276A 気圧 1009 hPa
40 29 バッテリー (なし)
17 022B CO2 555 ppm

CO2センサー無

Screenshot_20240512-171310-2.jpg

10 0A19 温度 26.37℃
11 119D 湿度 47.23%
14 2770 気圧 1009 hPa
40 27 バッテリー 3.9V

今後の計画

ようやくセンサー部分ができました。あとはこのセンサーからデータを受信して、クラウドに送信するゲートウエイを別に準備しようと思います。
バッテリーの持続時間も気になるところなので、評価してみたいと思います。

ログインしてコメントを投稿する