Arduinoからのキャラクタリスティックの値の書き込み
解説
Arduinoからのキャラクタリスティックの値の書き込みについてまとめます。
RN4020の動作電圧は、3.3[V]。これに対してArduinoのピンからの出力電圧は、5.0[V]。
RN4020の受信端子(RDX)への入力電圧は、抵抗を用いて分圧します。
今回は、1.8k[Ω]と3.3k[Ω]の抵抗を用いました。
(RN-42の受信端子(RDX)への入力電圧は、5.0 * 3.3k / ( 3.3k + 1.8k ) = 3.2352[V] となる)
ここでは、「プライベートサービスの作成と設定」で作成・設定したプライベートサービスのキャラクタリスティックの値を書き込みます。
作成したプライベートサービスの仕様
作成したプライベートサービスの仕様としては、以下です。
- キャラクタリスティックは2つ。
- 1つ目のキャラクタリスティックは、
- 読み出しができる。
- ノーティファイが可能。
- データサイズは、2バイト(数値を想定。0~65,535)。 - 2つ目のキャラクタリスティックは、
- 書き込みと読み出しができる。
- ノーティファイはなし。
- データサイズは、8バイト(文字列を想定。半角文字8文字)
関連コマンド解説
キャラクタリスティックの値の書き込み「SUW」
「SUW,<UUID>,<値>」※でキャラクタリスティックの値を書き込みます。
※
<UUID>は、キャラクタリスティックのUUIDの16進数値です。UUID は、パブリック キャラクタリスティックの場合は16 ビットの短いUUID(16進数表現で4桁)、プライベート
キャラクタリスティックの場合は128ビットの長いUUID(16進数表現で32桁)です。
<値>は、書き込む値です。
詳細は、「RN4020 Bluetooth® Low Energy モジュール ユーザガイド」の「SUW」コマンドの説明を参照。
「1つ目」のキャラクタリスティックの値を書き込むコマンドは以下のようになります。
UUIDは、「FF6B14268FE611E7ABC4CEC278B6B50A」です。
書き込む値は、16進数値で書き込みます。例えば10進数の10は「0x000A」、10進数の20は「0x0014」、10進数の1000は「0x03E8」です。
10進数の10を書き込む場合は、「SUW,FF6B14268FE611E7ABC4CEC278B6B50A,000A」と入力します。
10進数の20を書き込む場合は、「SUW,FF6B14268FE611E7ABC4CEC278B6B50A,0014」と入力します。
10進数の1000を書き込む場合は、「SUW,FF6B14268FE611E7ABC4CEC278B6B50A,03E8」と入力します。
「2つ目」のキャラクタリスティックの値を書き込むコマンドは以下のようになります。
UUIDは、「FF6B15488FE611E7ABC4CEC278B6B50A」です。
書き込む値は、16進数値で書き込みます。例えば文字列「ABCDE」は「0x41 0x42 0x43 0x44 0x45」、文字列「abcde」は「0x61
0x62 0x63 0x64 0x65」、文字列「Hello!」は「0x48 0x65 0x6C 0x6C 0x6F 0x21」です。
文字列「ABCDE」を書き込む場合は、「SUW,FF6B15488FE611E7ABC4CEC278B6B50A,4142434445」と入力します。
文字列「abcde」を書き込む場合は、「SUW,FF6B15488FE611E7ABC4CEC278B6B50A,6162636465」と入力します。
文字列「Hello!」を書き込む場合は、「SUW,FF6B15488FE611E7ABC4CEC278B6B50A,48656C6C6F21」と入力します。
部品表
部品名 | 数量 | 商品名 | 参考価格 |
---|---|---|---|
Arduinoボード | 1 | Arduino Uno | 2,780円 |
ジャンパーワイヤ | 適量 | ジャンパーコード(オス-オス)セット | 100mm49個 150mm8個 200mm4個 250mm4個 のセット200円 |
接続表
接続先 | RN4020モジュール | 接続先 | ||||
---|---|---|---|---|---|---|
ピン名称 | ピン名称 | ピン番号 | ピン番号 | ピン名称 | ピン名称 | |
Arduinoの3V3 | VCC | 1 | 20 | AIO2 | 無接続 | |
ArduinoのDigital 6 | UART TX | 2 | 19 | AIO1 | 無接続 | |
ArduinoのDigital 7 (1.8kΩ抵抗, 3.3kΩ抵抗で分圧する) |
UART RX | 3 | 18 | AIO0 | 無接続 | |
無接続 | - | 4 | 17 | PIO1 | 無接続 | |
無接続 | WAKE_HW | 5 | 16 | PIO5 | 無接続 | |
無接続 | I2C_SCL | 6 | 15 | PIO3 | 無接続 | |
無接続 | I2C_SDA | 7 | 14 | - | 無接続 | |
無接続 | - | 8 | 13 | WAKE_SW | 無接続 | |
無接続 | PIO4 | 9 | 12 | PIO6 | 無接続 | |
共通GND | GND | 10 | 11 | PIO2 | 無接続 |
接続例
サンプルコード
Arduinoでコマンド送信とAndroidアプリで値の確認
サポートサービスの設定
USBシリアル変換モジュールを用いて、
「プライベートサービスの作成と設定」に従い、プライベートサービスを設定します。
設定後、USBシリアル変換モジュールを取り外します。
Arduinoへのプログラム書き込み
Arduinoに上記「サンプルコード」を書き込みます。
Arduinoからのキャラクタリスティックの値の書き込み
上記「接続例」の接続を行います。
USBケーブルを接続し、Arduinoに電力が供給されると、Arduinoからのキャラクタリスティックの値の書き込みが開始します。
Androidアプリで値が書き換わっていることの確認
Androidアプリ「BLE Scanner: Read,Write,Notify」のサービス「CUSTOM SERVICE」の2つのキャラクタリスティック「CUSTOM
CHARACTERISTIC」の右の「R」ボタンをそれぞれタップします。
「1つ目のキャラクタリスティック」の値として、16進数値が表示されます。
「2つ目のキャラクタリスティック」の値として、文字列が表示されます。
Androidアプリで値の自動更新
「1つ目のキャラクタリスティック」は、ノーティファイが可能です。
「1つ目のキャラクタリスティック」の右の「N」ボタンをタップします。
「Notify」を有効にすると、「N」ボタンが緑色になります。
「1つ目のキャラクタリスティック」の値が、自動更新されます。
以上で、Arduinoからのキャラクタリスティックの値の書き込みと確認ができました。