2021年07月29日 更新
どうも、クラゲです。
Web Bluetooth APIを超簡単に扱えるBlueJellyを使って今回はconnectを行います。
Scan と同様
Scan と同様
micro:bitが手元にない人は、HTML側のUUIDを変更すれば、他のBLEデバイスでも対応可能です
今回は周囲のBLEデバイスを検索(Scan)した後にConnectするというプログラムです。
WEB上で試せるデモページはこちら
BlueJelly Sample : Connect
ローカル環境で試したい方はこちらのGitHubからダウンロードし、connect.html
を開いて実行してください。
成功すると、UUID1
というUUID名とconnected GATT!
というステータス表示が出ます。
前回のScanサンプルプログラムから追加点は2点のみ。
HTMLにConnectボタンを追加しました。
<button id="connect" class="button">Connect</button>
HTMLにUUID名とステータスを表示させるための場所を追加しました。 デフォルト表示は無しとしました。
<div id="uuid_name"> </div>
<div id="status"> </div>
connectのフローはscanと同様です。
scanのフローは省略しています。
ロード時に、UUIDの設定を行います
setUUIDというメソッドを使い、本来は第一引数にはUUID名、第二引数にはServiceのUUID、第三引数にはCharacteristicのUUIDを入力します。
例ではUUID名を UUID1
としていますが、好きな名前でOKです。
window.onload = function () {
//UUIDの設定
ble.setUUID("UUID1", BlueJelly.MICROBIT_UART_SERVICE, BlueJelly.MICROBIT_TX_CHARACTERISTIC);
}
ここで重要なのが第二引数と第三引数で、どのSeviceのどのCharacteristicを使うのかを指定します。
UUIDとは、重複する事のないIDで、128bitの数値です。Byteで表すと16Byte、文字数でいうとハイフンを除いて32文字です。詳細はこちら
BlueJellyではmicro:bitのUUIDを定数化して持っているため、今回は上記のような書き方となっていますが、もし定数を使わずに書く場合は下記のようになります
window.onload = function () {
//UUIDの設定
ble.setUUID("UUID1", "6e400001-b5a3-f393-e0a9-e50e24dcca9e", "6e400002-b5a3-f393-e0a9-e50e24dcca9e");
}
通信対象となっているBLE機器が持っているUUIDに変更することで、あらゆる機器と通信可能になります。
実は、BLEデバイス機器がどのようなUUIDを持っているかはアプリで簡単に調べることが可能です。Mac/iOSであればLightBlue(Punch Through)、AndroidであればnRF Connect(Nordic)あたりを使うと良いかと思います。
次に、CONNECT後に何をするかを記述します。
BlueJelly.jsにてCONNECT処理が終わるとonConnectGATTイベントが呼ばれます。(引数にはUUID名が入る)
ここでは、CONNECT後の動作として、CONNECTしたService/CharacteristicのUUID名、CONNECTしたことを示す文字列をHTMLに表示しています。
ble.onConnectGATT = function (uuid) {
console.log('> connected GATT!');
document.getElementById('uuid_name').innerHTML = uuid;
document.getElementById('status').innerHTML = "connected GATT!";
}
ボタンが押されたときの関数呼び出しを指定します
今回はConnectGATTなので、ble.connectGATT(uuid)で呼び出しています。
document.getElementById('connect').addEventListener('click', function(){
ble.connectGATT('UUID1');
});
次回は、いよいよREADを使って、実際にデータを読み込んでみましょう!
以上、connectとUUIDでした!