micro:bitをBLE(Bluetooth Low Energy)を使ってブラウザーから操作するという、とても大事な技術の研究。
ブラウザーはなんでもいいわけじゃなく、Google Chromeが今のところターゲット。

Javascript

Promise

Promiseとは、ちょっと前にリリースされたJavascript界の大事件である。

私は知らなかった。

もともとJavascriptはシングルスレッドであった。
このあたりから書き起こされたGoogleドキュメントがこれ

なにかのイベントにaddEventListenerでイベントハンドラーをつけたとしても、それは非同期では動かない。イベントを受け取ったら所定のコールバック関数を呼ぶ。

そこでイベント1ができたら、イベント2をやって、とプログラムを書くとどんどんネストが深まった関数ができてしまう、と。

それを解決するのがPromiseです。(個人的には非同期処理の順序を約束するからPromiseなのかなぁ、と)

これ実行すると、Hello World, Task A, Task Bと出力されます。

これ以上の議論はこのブックレットを読むべし。

さらにアロー関数が頻繁に出てくるのでアロー関数の勉強

アロー関数

アロー関数は無名関数を簡単に書こうというもの。(thisの扱いが変わるが、今回は割愛)

もともとこう書いて関数を変数にいれちまう。

これを

return を省略できる。

これだけだとつまんないけど、

引数がいっぱいある時は

引数が1つしかない時は()が省略できて

(これを知らず、えらい苦労した)

引数がない時は省略できない。

 

これをふまえて、ブラウザーからのBLEのハンドリングを書くことになります。(Googleさんが、そうしているから)

micro:bit

スケッチ

参照:https://lancaster-university.github.io/microbit-docs/ble/profile/

micro:bitのプロジェクトにBLuetoothのパッケージを追加する。
以下のようなエラーが出るけど無視して置き換える。

すると、「プロジェクトの設定」でBLuetoothのセキュリティレベルを下げられる。

プログラムのセットアップ部分で、Bluetoothの使用可能としておく。

最低限、Bluetoothが繋がった、切れた、イベントを

ここでプログラムをボードへダウンロード

Google Chrome

ブラウザー側にmicro:bitのUUIDを知らせなきゃいけないそうです。

こちらから

BLEの接続シーケンスについてはこちらのサンプルで学ぶ

  1. デバイスの検索
  2. GATTサーバーに接続(device.gatt.connect)
  3. プライマリーサービスの取得(server.getPrimaryService)
  4. キャラクタリスティックの取得(service.getCharacteristic)
  5. キャラクタリスティックにvalueを書き込む(characteristic.writeValue)

UUIDは使うサービスとキャラクタリスティクスを得なくてはいけません。

ボタンサービス
UUID: E95D9882251D470AA062FA1922DFA9A8

ボタンサービス-キャラクタリスティクス
UUID: E95DDA90251D470AA062FA1922DFA9A8

ブラウザーのJavascript

https://qiita.com/yokmama/items/5522fabfb5b9623278e2

デバイスの検索

GATTへ接続

プライマリーサービスの取得

getPrimaryService()で使いたいサービスを指定しますが、Promise.all([])内で使いたいSERVICEのUUIDを指定します。

Characteristicsの取得

Characteristicsの値を保持、保管

全部のHTML(すいません。オリジナルはきっちりとHTML,CSS,JSをわけていますが勉強用に一緒くたにしてしまいました。)

 

注意事項

サーバーに乗っけたらhttpsであること。