Bluetooth通信する(Bluetoothモジュール RN-42 使用)
解説
Bluetoothモジュールを使用すると、他のBluetoothを有した機器と無線通信することができます。
プログラムにおいては、Bluetoothに関する処理は、シリアル通信処理として記述します。
比較的安価なBluetoothモジュール「RN-42使用 Bluetooth無線モジュール評価キット」を使用します。
まず「RN-42使用 Bluetooth無線モジュール評価キット」について下記を実施しておきます。
- S1(DIP-SW)の保護シールをはがして、1~4のスイッチポジションをすべてOFF側にセット。
- J1、J2にピンヘッダをハンダ付け。
RN-42の動作電圧は、3.3[V]。これに対してArduinoのピンからの出力電圧は、5.0[V]。
RN-42の受信端子(RDX)への入力電圧は、抵抗を用いて分圧します。
今回は、1.8k[Ω]と3.3k[Ω]の抵抗を用いました。
(RN-42の受信端子(RDX)への入力電圧は、5.0 * 3.3k / ( 3.3k + 1.8k ) = 3.2352[V] となる)
ハードウェアシリアルかソフトウェアシリアルか
Arduinoのシリアル通信には、ハードウェアシリアルとソフトウェアシリアルとがあります。
ハードウェアシリアルかソフトウェアシリアルか。
- 1.プログラム書き込み時の結線について
- ハードウェアシリアルを使用する場合には、プログラム書き込み時には、Rx、Txの結線を取り除き、実行時に再度結線します。
ソフトウェアシリアルを使用する場合には、実行時の結線のままプログラム書き込みができます。
理由・背景:プログラムをUSB経由で書き込む際には、ハードウェアシリアルを使用します。Rx、Txを通したシリアル通信が行われていると、USB経由でのプログラム書き込みのシリアル通信と混線が起き、プログラム書き込みに失敗します。 - 2.高いボーレートでの通信安定性について
- ソフトウェアシリアルは、高いボーレート(115200)の場合、通信が安定しません(文字化け、文字取りこぼしが起こることがあります)。
ハードウェアシリアルの場合は、高いボーレート(115200)の場合でも、安定して通信ができます。
理由・背景:ソフトウェアシリアルは、ソフトウェア割り込みによって実現されています。優先度の高い処理がある場合に、十分な割り込みが行われず、文字化け、文字取りこぼしが発生します。
参考)Does SoftwareSerial really work at 115200 baud
ここで、 RN-42の既定のボーレートは、115200です。
1.と2.から、ハードウェアシリアルかソフトウェアシリアルかについて、2つの実現方法があります。
- ①Arduinoのソフトウェアシリアルを使用する。RN-42のボーレートを9600に変更する。
- RN-4のボーレートは、RN-4上のS1(DIP-SW)の4のスイッチを ON にすることで、簡単に変更できます。
- ②Arduinoのハードウェアシリアルを使用する。RN-42のボーレートは既定の115200。
- プログラム書き込み時には、Rx、Txの結線を取り除き、実行時に再度結線します。
部品表
部品名 | 数量 | 商品名 | 参考価格 |
---|---|---|---|
Bluetoothモジュール | 1 | RN-42使用 Bluetooth無線モジュール評価キット | 2,400円 |
ピンヘッダ | 1 | ピンヘッダ 1×40 (40P) | 40円 |
1.8KΩ抵抗器 | 1 | カーボン抵抗(炭素皮膜抵抗) 1/6W 1.8KΩ | 100本100円 |
3.3KΩ抵抗器 | 1 | カーボン抵抗(炭素皮膜抵抗) 1/6W 3.3KΩ | 100本100円 |
LCDシールド | 1 | LCD (Liquid Crystal Display) に文字列を表示するの内容をシールド化したもの | - |
Arduinoボード | 1 | Arduino Uno | 2,780円 |
ジャンパーワイヤ | 適量 | ジャンパーコード(オス-オス)セット | 100mm49個 150mm8個 200mm4個 250mm4個 のセット200円 |
接続表
Arduino側 | Bluetoothモジュール側 | Bluetoothモジュール側 | Arduino側 | |||
---|---|---|---|---|---|---|
ピン番号 | ピン名称 | ピン番号 | ピン番号 | ピン名称 | ピン番号 | |
無接続 | PIO6 | J1-1 | J2-1 | PIO4 | 無接続 | |
無接続 | PIO7 | J1-2 | J2-2 | PIO3 | 無接続 | |
無接続 | RESET N | J1-3 | J2-3 | PIO2 | 無接続 | |
無接続 | - | J1-4 | J2-4 | CTS | J2-5(RTX)と ショートさせる |
|
無接続 | - | J1-5 | J2-5 | RTS | J2-4(CTS) とショートさせる |
|
無接続 | - | J1-6 | J2-6 | TXD | Digital 6 | |
無接続 | - | J1-7 | J2-7 | RXD | Digital 7 (1.8kΩ抵抗, 3.3kΩ抵抗 で分圧する) |
|
無接続 | VB2 | J1-8 | J2-8 | PIO11 | 無接続 | |
無接続 | - | J1-9 | J2-9 | PIO10 | 無接続 | |
無接続 | - | J1-10 | J2-10 | PIO9 | 無接続 | |
3.3V | 3.3V | J1-11 | J2-11 | PIO8 | 無接続 | |
GND | GND | J1-12 | J2-12 | VB1 | 無接続 |
接続例
①ソフトウェアシリアルを使用する場合の例(通信ボーレート9600)
・RN-4上のS1(DIP-SW)は、4のみスイッチをON。1~3のスイッチをOFFにします。
※LCDシールドに関する接続は省略
②ハードウェアシリアルを使用する場合の例(通信ボーレート115200)
・RN-4上のS1(DIP-SW)は、1~4のスイッチをすべてOFFにします。
※LCDシールドに関する接続は省略
サンプルコード
送信サンプル
①ソフトウェアシリアルを使用する場合の例(通信ボーレート9600)
②ハードウェアシリアルを使用する場合の例(通信ボーレート115200)
実行
Arduinoから送信されたものをPC(TeraTerm)で受信した結果
PC(TeraTerm)から送信されたものをArduinoで受信した結果
ダウンロード
サンプルスケッチファイル(①ソフトウェアシリアルを使用する場合の例(通信ボーレート9600))
サンプルスケッチファイル(②ハードウェアシリアルを使用する場合の例(通信ボーレート115200))
参考
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ 小林 茂 (著)