初めての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を送ってきているのが確認できました。