2021年07月29日 更新
どうも、クラゲです。
bluejelly.jsを扱う際に使うメソッドとコールバックについて解説します!
[TOC]
BlueJellyを使うために、初めにインスタンス生成が必要。
インスタンスとはBlueJellyというクラスから実体を作って使えるようにしたもの。
たこ焼きで例えると、クラスが「たこ焼き器」で、インスタンスが「たこ焼き」そのもの。
使用例の場合はble
という変数名でBlueJellyのインスタンスを生成している。
使用例:
var ble = new BlueJelly();
さらに追加して別名でインスタンスを生成すれば、簡単に複数のBLEデバイスと通信可能となる。
BLEデータの中のValueにアクセスするために、ServiceのUUIDとCharacteristicのUUIDを登録する。
インスタンス生成と合わせて必須の内容となる。
第一引数には登録名を設定。好きな文字列を指定して良い。
第二引数にseviceのUUID、第三引数にcharacteristicのUUIDを指定。フォーマットは決まっているので下記の使用例を参考にすること。
使用例:
ble.setUUID("BatteryLevel", "0000180f-0000-1000-8000-00805f9b34fb", "00002a19-0000-1000-8000-00805f9b34fb");
:::success micro:bitに限り、UUIDの代わりに本ページの最後に紹介している定数を使うことが可能 :::
接続対象BLEデバイスが決まってない場合は
接続対象BLEデバイスが決まっている場合は
引数にはsetUUIDで登録したUUID名が必要
使用例:
ble.scan("BatteryLevel");
接続対象Service/Characteristicが決まっていない場合は、BLEデバイスと単に接続するだけでなく、どのServiceのどのCharacteristicに接続するかまで決定する。
接続対象Service/Characteristicが決まっている場合は何もしない。
接続対象BLEデバイスが決まってない場合はエラーとなる。
引数にはsetUUIDで登録したUUID名が必要。
成功するとonConnectGATTイベントを呼ぶ。
使用例:
ble.connectGATT("BatteryLevel");
接続対象BLEデバイスの対象Service/CharacteristicのValueを読み込む。
引数にはsetUUIDで登録したUUID名が必要。
成功するとonReadイベントを呼ぶ。
接続対象BLEデバイス、対象Service/Characteristicが決まっていない場合(scanとconnectGATTをまだ実行していない場合)は、scanとconnectGATTを自動的に行う。
使用例:
ble.read("BatteryLevel");
接続対象BLEデバイスの対象Service/CharacteristicのValueにデータを書き込む。
引数にはsetUUIDで登録したUUID名と、書き込むデータが必要。データ型のByte数に注意。
成功するとonWriteイベントを呼ぶ。
接続対象BLEデバイス、対象Service/Characteristicが決まっていない場合(scanとconnectGATTをまだ実行していない場合)は、scanとconnectGATTを自動的に行う。
使用例(1Byteの場合):
ble.write("Setting", [0x01]);
使用例(3Byteの場合):
ble.write("Setting", [0x00, 0x28, 0x01]);
接続対象BLEデバイスの対象Service/CharacteristicのValueのNotificationを開始する。
引数にはsetUUIDで登録したUUID名が必要。
成功するとonStartNotifyイベントを呼ぶ。
接続対象BLEデバイス、対象Service/Characteristicが決まっていない場合(scanとconnectGATTをまだ実行していない場合)は、scanとconnectGATTを自動的に行う。
使用例:
ble.startNotify("BatteryLevel");
接続対象BLEデバイスの対象Service/CharacteristicのValueのNotificationを停止する。
引数にはsetUUIDで登録したUUID名が必要。
成功するとonStopNotifyイベントを呼ぶ。
接続対象BLEデバイス、対象Service/Characteristicが決まっていない場合(scanとconnectGATTをまだ実行していない場合)は、scanとconnectGATTを自動的に行う。
使用例:
ble.stopNotify("BatteryLevel");
現在BLEデバイスに接続中の場合は、接続を解除する。
引数は不要。
成功するとonDisconnectイベントを呼ぶ。
注意:接続対象BLEデバイス及び接続対象Service/Characteristicは記憶されたまま
使用例:
ble.disconnect();
接続対象BLEデバイス、及び接続対象Service/Characteristicをクリアする。
引数は不要。
成功するとonClearイベントを呼ぶ。
注意:BLEデバイスとはまだ接続中のまま
使用例:
ble.clear();
disconnectとclearを一気に行う。
引数は不要。
成功するとonResetイベントを呼ぶ。
使用例:
ble.reset();
scanに成功すると呼ばれるイベント。
引数のdeviceNameにはユーザーが選択したBLEデバイス名が入る。
使用例:
ble.onScan = function (deviceName) {
document.getElementById('device_name').innerHTML = deviceName;
}
connectGATTに成功すると呼ばれるイベント。
引数のuuidには接続済のUUID名が入る。
使用例:
ble.onConnectGATT = function (uuid) {
document.getElementById('uuid_name').innerHTML = uuid;
}
readに成功すると呼ばれるイベント。
引数のuuidには読み込み済みのUUID名が入る。
引数のdataにはValueの値が入る。データ型のByte数によって取り出し方が異なるので使用例を参考のこと。
使用例(1Byteの場合で、先頭のデータ取得):
ble.onRead = function (data, uuid){
value = data.getUint8(0);
document.getElementById('data_text').innerHTML = value;
document.getElementById('uuid_name').innerHTML = uuid;
}
使用例(2Byteの場合で、先頭のデータ取得):
ble.onRead = function (data, uuid){
value = data.getUint16(0);
document.getElementById('data_text').innerHTML = value;
document.getElementById('uuid_name').innerHTML = uuid;
}
使用例(1Byteで、先頭から数えて3番目のデータ取得):
ble.onRead = function (data, uuid){
value = data.getUint8(2);
document.getElementById('data_text').innerHTML = value;
document.getElementById('uuid_name').innerHTML = uuid;
}
writeに成功すると呼ばれるイベント。
引数のuuidには書き込み済みのUUID名が入る。
使用例:
ble.onWrite = function(uuid){
document.getElementById('uuid_name').innerHTML = uuid;
}
startNotifyに成功すると呼ばれるイベント。
引数のuuidにはNotification開始済みのUUID名が入る。
使用例:
ble.onStartNotify = function(uuid){
document.getElementById('uuid_name').innerHTML = uuid;
}
stopNotifyに成功すると呼ばれるイベント。
引数のuuidにはNotification停止済みのUUID名が入る。
使用例:
ble.onStopNotify = function(uuid){
document.getElementById('uuid_name').innerHTML = uuid;
}
disconnectに成功すると呼ばれるイベント
引数なし
使用例:
ble.onDisconnect = function() {
document.getElementById('status').innerHTML = "disconnected";
}
clearに成功すると呼ばれるイベント
引数なし
使用例:
ble.onClear = function() {
document.getElementById('status').innerHTML = "cleared";
}
resetに成功すると呼ばれるイベント
引数なし
使用例:
ble.onReset = function() {
document.getElementById('status').innerHTML = "reset done";
}
エラーが起きると呼ばれるイベント
引数errorにはエラーの内容を示す文字列が入る。
使用例:
ble.onError = function(error){
document.getElementById('status').innerHTML = error;
}
現在はmicro:bitのみですが、UUIDの代わりに定数が使えるようになっています。
各UUIDの詳細内容やフォーマットはこちらを参照してください。
https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html
以上、BlueJellyリファレンスでした!