初めてのBLE (2) Characteristicを知る

 前回、ペリフェラルではサンプル・スケッチのLEDを動かし、セントラルではサンプル・スケッチのPeripheral Explorerを動かしました。サンプル・スケッチには、LED以外にBattery Monitorがあるので動かします。

 ペリフェラルのNano 33 BLE SenseでBattery Monitorを動かし、そのサービスを見つけるためにセントラルのNano 33 IoTでPeripheral Explorerが動いています。その様子を眺めているのがRSL10です。

ペリフェラルで動くBattery Monitor

  • batteryService("180F")<-サービスのUUIDは0x180fとしました。LEDのときはUUID(ユニバーサル固有識別子)をフルの128ビットを記述していましたが、ここでは16ビットで済ませています。
  • BLEUnsignedCharCharacteristic batteryLevelChar("2A19",<-キャラBattery MonitorのUUIDは0x2a19としました。

 一つのサービス(Service)の中に複数のキャラ(Characteristic)が入っているという構成です。batteryService(GATT Services)とbatteryLevel(GATT Characteristics)は、登録されているUUIDです。

 ペリフェラルで実行した画面です。誰かが探し出して接続してくれるのを待っています。

 セントラル側のシリアルモニタです。ペリフェラルを見つけました。ペリフェラルのMACアドレスとlocalName、サービスのUUIDを印字しています。

 ペリフェラル側のシリアルモニタです。接続してきたセントラルのMACアドレスと、バッテリ・サービスのバッテリ・レベルを表示しています。

 上記は、セントラルで前回と同じくPeripheral Explorerを動かしていました。ここで、1か所変更します。

if (peripheral.localName() == "LED") {

if (peripheral.localName() == "BatteryMonitor") {

 ペリフェラルのシリアルモニタの様子です。セントラルが接続しに来て、Battery Levelを表示し、接続を切るという一連の動作をしています。ここは変化ありません。

 セントラルのシリアルモニタの様子です。BatteryMonitorを見つけたので、詳細な情報を表示しました。サービス0x180fのキャラ(Characteristic)0x2a19は、propertiesが0x12、Valueが0x06です。

 ペリフェラルのスケッチBattery Monitorの中を見ます。アナログ入力のA0ポートを読み、

  • batteryLevelChar.writeValue(batteryLevel)

で、Valueに書き込んでいます。propertiesはデータの操作を表しており、0x12は、クライアントからキャラの変更を通知し、クライアントから値を読み出せるという指示です。

 このときの状態を、オン・セミコンダクターのBLEであるRSL10 Bluetooth Low Enaergy Exploerを使って情報を見ます。
 batteryLevel(2A19)の値(value)0x0fを送ってきているのが確認できました。

前へ

初めてのBLE (1) 実験環境

次へ

初めてのBLE (3) 温度