がじぇっとるねさす

ホビーとエレクトロニクスを繋げるサイト

アイテム

TOPへ

GR-LYCHEE 特設

BLEでスマホとつなげよう!

概要

GR-LYCHEEとスマホをBLEでつなげてみましょう。GR-LYCHEEにはESP32モジュールを搭載しており、Wi-FiとBLEの接続が可能です。今回はBLEを使って、スマホと通信してみます。

準備

ハードウェア

GR-LYCHEE、USBケーブル(マイクロBタイプ)を準備します。また、BLEが使用できるスマホも準備してください。

login login


ソフトウェア

BLE動作確認用としてiPhoneアプリの「LightBlue」を使用します。

 

GATTプロファイル

ESP32初期ファームウェアには、次の通りにGATTプロファイルが用意されています。このプロファイルを利用して、GR-LYCHEEとスマートフォンのデータをやりとりします。今回のサンプルではGR-LYCHEEがサーバとなり、スマートフォンがクライアントです。


UUID アクセス・プロパティ サイズ(バイト) Characteristic番号
A002 Read 2 -
C300 Read 1 1
C301 Read 512 2
C302 Write 1 3
C303 Write Without Response 3 4
C304 Write 2 5
C305 Notify 5 6
C306 Indicate 5 7

UUID

Primary Service UUID(0x2800)の設定におけるサービスUUIDとして「A002」が設定されています。続いてCharacteristic宣言(0x2803)で、Characteristic UUID「C300」~「C306」を含めており、各アクセス・プロパティを定めています。


アクセス・プロパティ

Read: クライアントから読み込み可能
Write: クライアントから書き込み可能。書き込みに対して、サーバ(GR-LYCHEE)からのレスポンスがある。
Write Without Response: クライアントからの書き込み可能。書き込みに対して、サーバ(GR-LYCHEE)からのレスポンスはない。
Notify: サーバ(GR-LYCHEE)がクライアントにCharacteristicの変更を通知する。
Indicate: サーバ(GR-LYCHEE)がクライアントにCharacteristicの変更を通知する。Notifyに対して、Indicateはクライアントからの応答も要求する点が異なる。

サイズ

1度に扱えるバイトデータのサイズです。動的設定値の最大長になります。


Characteristic番号

ATコマンド「AT+BLEGATTSCHAR?」で得られる<char_index>の番号です。プログラムでCharacteristicを操作するために使用します。


 

サンプルプログラム

以下はBLEのサンプルプログラムです。

注意:IDE for GR V1.03ではリンカーオプション"--specs=nano.specs"の影響でパーサーが正しく動作せず、"fail to get service"が発生します。面倒ですが、IDE for GRのフォルダ"ide4gr-1.03\hardware\arduino\rza1lu\"にある"platform.txt"をこちらと置き換えてください。

 

動作確認

シリアルモニターを起動し、GR-LYCHEEのリセットボタンを押します。スマホアプリのLight Blueでは"GR-LYCHEE"が表示されます。シリアルモニターではGATTのイニシャライズとアドバタイジングがスタートされたことが表示されます。


Light BlueでGR-LYCHEEをタップすると、コネクションが確立され、プロパティが表示されます。また、GR-LYCHEEの緑LEDが点灯します。シリアルモニタでは、コネクション番号(conn_index)とMacアドレスが表示されます。コネクション番号はシングルコネクションでは常に0です。コネクション後に、クライアントがサーバのプロパティを読み込むため、8行に渡ってログが表示されます。


LightBlueのプロパティ一覧で、UUID「C300」をタップすると初期値の0x30が表示されます。GR-LYCHEEのUB0ボタンを押した後、LightBlueで「Read again」を行うと、0x01が書き込まれていることが分かります。書き込まれる値はボタンを押すごとに1を加算しているため、何回か繰り返すと0x02、0x03が順次書き込まれます。例えばGR-LYCHEEにセンサーを接続して、その値を更新すればスマホでセンサーの値を読むことができます。


次にNotificationを試してみます。UUID「C305」を表示して、「Listen for notifications」を押します。その後、GR-LYCHEEのUB1ボタンを押すたびに値が表示されることが分かります。


最後にスマホからGR-LYCHEEにデータを書きます。UUID「C302」を表示して、「Write new value」を押します。下の図では"11"を入力しており、入力が完了するとシリアルモニターに"11"が表示されたことが分かります。


 

share