Bluetooth通信する(Bluetoothモジュール RN-42 使用)

解説

Bluetoothモジュールを使用すると、他のBluetoothを有した機器と無線通信することができます。
プログラムにおいては、Bluetoothに関する処理は、シリアル通信処理として記述します。

比較的安価なBluetoothモジュール「RN-42使用 Bluetooth無線モジュール評価キット」を使用します。

まず「RN-42使用 Bluetooth無線モジュール評価キット」について下記を実施しておきます。

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実践レシピ 小林 茂 (著)