概要
- ミニチュア・カー・キットとブラウザ(JavaScript)でBLEのお勉強した。
- Web Bluetooth APIのラッパーbluejellyを使ってデータをリードした。
- UUIDは真面目に仕様書読んで確認必要。
- Readするデータのバイト数、符号、エンディアンに注意。
- 手軽にデータ見れてハッピー。しかもChromebookで。
経緯
- シリラボのミニチュア・カー・キットってBLE評価基板+αで遊んでた。以下参照。
ミニチュア・カー・キットとラズパイでBLEのお勉強 - Qiita - クラゲのIoTテクノロジーって読んでて、bluejellyってのを知った。
ハードウェアのプロが教えるWebエンジニアのためのIoT講座 | アナログ・デバイセズ
クラゲのIoTテクノロジー - 試してみた。
用意したもの
-
ミニチュア・カー・キット Thunderboard React Derby ミニチュア・カー・キット|Silicon Labs
-
Chromebook
-
Chromeブラウザ
-
bluejellyのコード一式 GitHub - electricbaka/bluejelly: BlueJelly is a wrapper library that can handle WebBluetoothAPI easily !
試したコード
scan.html
read.html
変更点
UUID
ここのUUIDを変更
window.onload = function () {
//UUIDの設定
ble.setUUID("UUID1", "0000181a-0000-1000-8000-00805f9b34fb", "00002a6e-0000-1000-8000-00805f9b34fb");
}
ユーザーガイドを真面目に読んだ。ここ。
ug164-thunderboard-react.pdf
読み取りデータのフォーマット
普通に読み取ったら、変な値が帰ってきたので、確認したらEndianが違った。
もともとBig Endianだったので、Little Endianに変更。
ちゃんとバイト数、Signed/Unsigned, Endianに気をつける。
ble.onRead = function (data, uuid){
//フォーマットに従って値を取得
// value = data.getUint16(0);//2Byteの場合のフォーマット
value = data.getInt16(0, true);//2Byteの場合のフォーマット littleEndian
//コンソールに値を表示
console.log(value);
//HTMLに値を表示
document.getElementById('data_text').innerHTML = value/100.0;
document.getElementById('uuid_name').innerHTML = uuid;
document.getElementById('status').innerHTML = "read data"
}
引数はここを確認した。
DataView.prototype.getInt16() - JavaScript | MDN
ECMAScript® 2019 Language Specification
まとめ
- 楽しかった。
- Service, CharacteristicのUUID両方使って理解が進んだ。
- バイナリデータからデコードするときの注意点がわかってきた。
- Chromebookだけで遊べるのでとても手軽。