BLE GATT通信
BLE Nano とスマートフォンの間は、GATT プロファイルを使って通信をします。
BLE Nano がペリフェラル側でGATTのサーバーになります。
スマートフォンがセントラル側でGATTのクライアントになります。
手順としては、こんな感じです。
- BLE Nano 側がアドバタイズを行なう
- スマートフォン側でアドバタイズをスキャンし接続する
- Characteristic を使ってデータを読み書きする
BLE GATT に関する情報はこのあたりが参考になるかと思います。
https://www.bluetooth.com/specifications/gatt
http://blue-crystal.squares.net/doc/ble/gatt.html
BLE Nano のサンプル・コードをコンパイル
BLE Nano のページ からリンクをたどって サンプル・コードのページに行きます。
そこに BLE GATTサンプル へのリンクがあります。
リンクをたどり、「import this program」ボタンを押すと、mbed の Workspace にコードを取り込むことができます。
コンパイルして、バイナリを BLE Nano に書き込みます。
(コンパイル~書き込みの手順は前の記事と同じです)
Android アプリを準備
スマートフォン側にも BLE GATT 通信をするためのプログラムが必要となります。
ここでは、既製のアプリ(Nordic の nRF Master Control Panel) を使ってデータ通信の確認をします。
データ通信を確認
BLE Nano をライターに挿して USB でPCに接続します。
Teraterm などのソフトを使って、COM ポート経由でシリアル接続しておきます。
こうしておくと、BLE Nano のコンソール出力を見ることができます。
次に、スマートフォン側で、nRF Master Control Panel を立ち上げ、デバイスをスキャンします。
名前が"ChangeMe!!"というデバイスが見つかるので接続します。
接続すると Unknown Service が定義されていることがわかります。
Unknown Service をタップすると、UUID が 0xA001 のRead Characteristics と 0xA002 の Write Characteristic が見つかります。
Write Characteristic の横の ↑ をタップして、00 という値(1 BYTE)を送ると、BLE Nano 上の LED が点灯し、非0の値(1 BYTE)を送ると LED が消灯します。
(このLED、裏になるので見にくいんですよね )
シリアル接続したターミナル上にも、LED の ON / OFF が次のように出力されます。
さらに、スマートフォンから 11223344 のようにバイト列を送信すると、送ったバイト列がにターミナルに表示されます。
また、送信したデータは、BLE Nano が Read Characteristic に書き込みます。
スマートフォン側で、Read Characteristic の横の ↓ をタップすると、BLE Nano から受信したデータを見ることができます。
これで、BLE Nano と Android 間で基本的な通信ができることが確認できました。
次は、GATT通信と NeoPixel の LED 制御を組み合わせていきます。