編集履歴一覧に戻る
keitanakのアイコン画像

keitanak が 2024年05月12日17時48分02秒 に編集

初版

タイトルの変更

+

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

タグの変更

+

BLE

+

Arduino

+

XIAO

+

nRF52840

メイン画像の変更

メイン画像が設定されました

記事種類の変更

+

製作品

ライセンスの変更

+

(MIT) The MIT License

本文の変更

+

# はじめに 前回こちらの記事で実験したBLEセンサを、さらに具体的用途を決めて、製作を行いました。 https://qiita.com/DeviceManager/items/440d3f045429a8edef51 自宅の温度・湿度・気圧・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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/f4fd16cb-2b25-7662-02e5-46096722336f.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/7d13bfff-d263-23ae-ad78-f02367b500da.jpeg) # 室外センサ 室内センサで測定するのは、温度・湿度・気圧になります。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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/85b25ed8-e686-bac7-f5ad-ba2b0b13d9b8.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/7a28970f-4b6e-de3b-dfc5-737a549fb99a.jpeg) データフォーマットはヘッダー部分を除いて、以下のようにしています。 ``` // 温度 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/60a6302b-1657-ca3a-00a4-211cf00fad6b.jpeg) # 動作確認 まだ長時間の評価はしていませんが、ひとまずはデータがアドバタイズされています。 ## CO2センサー付き ![Screenshot_20240512-173549-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/6f675f29-c5d2-0b63-cd48-635cc5069ea2.jpeg) 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015969/f7b2429b-aa2b-f78f-cdc4-bf6ffc162951.jpeg) 10 0A19 温度 26.37℃ 11 119D 湿度 47.23% 14 2770 気圧 1009 hPa 40 27 バッテリー 3.9V # 今後の計画 ようやくセンサー部分ができました。あとはこのセンサーからデータを受信して、クラウドに送信するゲートウエイを別に準備しようと思います。 バッテリーの持続時間も気になるところなので、評価してみたいと思います。