Bluetooth Low Energy(BLE)を調べる

マウスやイヤホンなどのBLE機器は使うことはあっても作ることは無い、ケース付きバッテリー内蔵のM5Stickが実用的な機器が作りやすくなったと思う。

M5StickCPlusを使って温湿度ロガーを作り糀箱内の温度を記録する物を作りながらBLEで何処か?(M5Stackかな?)にログを飛ばしてSDカードに書き込みするのがよいかと思いついた。

BLEサンプルスケッチで疑問が

「ESP32 BLE Arduino」サンプルスケッチを見て最初にわからなかったのが「サービスUUID」と「キャラクタリスティックUUID」の二つ、何故二つもUUIDが必要なのか?
一つのUUIDでデータは送れだろうし、送受のために二つUUIDじゃなさそう。

BLEを知るのに参考になったサイト

開発視点の超簡単BLE入門 簡潔に纏めてあり、真俯瞰から見れ非常にわかりやす。最初に読むのおすすめ。

https://techweb.rohm.co.jp/iot/knowledge/iot02/s-iot02/04-s-iot02/3592 上記のサイトより少し詳しく書いてある。

ESP32によるBLEアプリケーション開発の基礎知識 上のを読んでから読めば良いかと。

BLEで必要な情報

自分向けに必要情報を纏めてます。

UUID(Universally Unique Identifier)

UUIDは色んな場面で出くわすが、BLEはBluetoothSIGが管理しているUUDIがある。
定義済のService UUID
定義済みのCharacteristic UUID
UUID自動生成サイト

定義済ServiceUUIDを探せば「環境センサー」や「バッテリー情報」などちょうどのIDが見つかると思う、自分でつかうだけなら自動生成で作っても構わないと思う。

BluetoothSIGの定義済みUUIDを使う場合は全16Byteを表記する必要がなく2Byteで済んでしまう。
よって14Byte少なくデータ送信が可能となり省エネ。

ペリフェラルとセントラル

接続機器の親子関係なのだが、出典によって色々な言葉を使っている、ESP32BLEにあるサンプルスケッチは「スレーブ」「マスター」を使ってる。

サービスとキャラクタリスティック

GATTというデータ構造やアクセス方法など規約に沿ったデータ構造の名称

機器一つに一つ以上のサービスがあり、一つのサービスに一つ以上のキャラクタリスティックがある。
キャラクタリスティックにも0個以上のディスクリプタがある。

サービス(Service)はデータの名称みたいなものでUUIDを使って内容識別。
例えば、気温・湿度・心拍・バッテリーなど。

キャラクタリスティック(Characteristic)は実際のデータ(値)を入れる。
ヘッダーと長さ情報を含め最大31バイト(31オクテット)。
気温・湿度を一緒のCharacteristicにしても、別々にしても良いのだろう。

ディスクリプタ(Descriptor)、有っても無くても可能で単位など付加情報を入れるらしい。

通信方法

機器間の通信にコネクトモードとブロードキャストモードがある。

コネクトモードはお互いにを認識し合って、互いに問答する。

ブロードキャストモードは相手の意識関係なしに情報を送る、誰かが拾ってくれると思ってるのだろう。
今回使うのはブロードキャストモード。

その他

  • Notificationあるいはindicationで送信できるデータ最大量は20バイト以下
タイトルとURLをコピーしました