JavaScript
BLE
Chromebook
WebBluetooth
BlueJelly

ミニチュア・カー・キットとChromebook(JavaScript)でBLEのお勉強

概要

  • ミニチュア・カー・キットとブラウザ(JavaScript)でBLEのお勉強した。
  • Web Bluetooth APIのラッパーbluejellyを使ってデータをリードした。
  • UUIDは真面目に仕様書読んで確認必要。
  • Readするデータのバイト数、符号、エンディアンに注意。
  • 手軽にデータ見れてハッピー。しかもChromebookで。

経緯

用意したもの

試したコード

scan.html

普通に動いた。
Screenshot 2018 04 15 at 00 33 01.png

read.html

そのままじゃ動かない。
以下の修正したら動いた。
Desktop screenshot  7 .png

変更点

UUID

ここのUUIDを変更

window.onload = function () {
  //UUIDの設定
  ble.setUUID("UUID1", "0000181a-0000-1000-8000-00805f9b34fb", "00002a6e-0000-1000-8000-00805f9b34fb");
}

ユーザーガイドを真面目に読んだ。ここ。
Screenshot 2018-04-15 at 00.58.29.png
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だけで遊べるのでとても手軽。