2017/8/31

Writeでデータ書き込み

どうも、クラゲです。
Web Bluetooth APIを超簡単に扱えるBlueJellyを使って今回はWriteを行います
PCやスマホからBLEデバイスに対して、リモコン的な使い方が可能になります。

【 必要なもの 】

scan のときと同じです

【 デモページとソースコード 】

デバイスがBLE Nanoの場合で説明します。
BLE Nanoに繋がっているLEDを点灯および消灯させます。

WEB上で試せるデモページはこちら
https://secure1689.sakura.ne.jp/kurage.jellyware.jp/bluejelly/write.html

ローカル環境で試したい方はこちらのGitHubからダウンロードし、write.htmlを実行してください。
https://github.com/electricbaka/bluejelly


テキストボックスが1のときにWriteボタンを押すと、LEDが点灯します。
テキストボックスが0のときにWriteボタンを押すと、LEDが消灯します。
writeもread同様、scanやconnectを行っていない場合は、先にscanやconnectを行った後にwriteする仕様となっています。
それではプログラムの解説に入ります。

【 プログラム解説(HTML) 】

前回のnotifyサンプルプログラムからの変更点は2つ。

新たにテキストボックスを配置しました。
Start NotifyボタンとStop Notifyボタンを消して、Writeボタン追加しました。

<input id="write_value" type="text" size="3" value="1">
<button id="write">Write</button>

【 プログラム解説(JavaScript) 】

フローは今までと同じような感じです。

注意点として、今回のWriteの対象となるUUIDが、ReadやNotifyと異なる点です。
ReadやNotifyのUUIDはコメントアウトし、UUID2として対象のIDを記述しました。

//UUIDの設定
//ble.setUUID("UUID1", "713d0000-503e-4c75-ba94-3148f18d941e", "713d0002-503e-4c75-ba94-3148f18d941e");  //BLEnano SimpleControl rx_uuid
ble.setUUID("UUID2", "713d0000-503e-4c75-ba94-3148f18d941e", "713d0003-503e-4c75-ba94-3148f18d941e");  //BLEnano SimpleControl tx_uuid

write処理が終わるとonWriteイベントが呼ばれます。
ここでは書き込んだことを伝えているだけです。

ble.onWrite = function(uuid){
  document.getElementById('uuid_name').innerHTML = uuid;
  document.getElementById('status').innerHTML = "written data"
}

ボタンが押されたときの関数呼び出しを指定します
今回はwriteなので、ble.write(uuid, value)で呼び出しています。
引数がReadやNotifyのときと異なり、1つ増えています。
引数valueに書き込みたい値を用意します。今回はテキストボックスの中身が値となります。

document.getElementById('write').addEventListener('click', function() {
    ble.write('UUID2', document.getElementById('write_value').value);
});

うまくいかない場合

特にBLE Nano以外を使っていてうまくいかない人は、以下の3点を確かめてください

以上、Writeでデータ書き込みでした!