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

コメント
ハンディキイボードの製作に挑戦しています。
アルディーノにBluetoothを繋げるのは肝になる技術で、大変参考になりました。
ありがとうございます。
koike.shirou@docomo.ne.jp : 2017/03/14 10:55:21
RN-42からシリアル信号を送る際、ハードウェアシリアル(ArduinoのRxとTx)ではなくソフトウェアシリアルを用いるのはなぜなのでしょうか?
また、ソフトウェアシリアルではなくハードウェアシリアルを用いることは出来ますか?
onitsuka : 2017/05/31 07:06:03
ソフトウェアシリアルではなく、ハードウェアシリアルでも可能です。
注意点としては、プログラム書き込み時には、Rx、Txの接続は外して、書き込みを行う必要があるかもしれません。

ソフトウェアシリアルを使用している理由としては、2点あります。
1.書き込み時、実行時で、接続の「外す」、「繋げる」をしたくないので、ソフトウェアシリアルを使用している。
  (ハードウェアシリアルは、プログラムをUSB経由で書き込む際に使用します。
   書き込み時に、Rx、Txに接続があると、うまく書き込めないことがあるため、
   書き込み時には、Rx、Txの接続は外して、書き込みを行います。)
2.ハードウェアシリアルは、デバッグ用にとっておきたいので、ソフトウェアシリアルを使用しています。
  (ハードウェアシリアルは、USB経由でパソコンとのシリアル通信が簡単に行えます。
   動作が期待通りにいかない場合に、ハードウェアシリアル経由でデバッグ出力し、デバッグを行います。)

よろしくお願いします。
Nobuki HIRAMINE : 2017/05/31 08:05:46
HIRAMINEさん

質問への回答、ありがとうございます。
書き込み時の手間について、納得です。
デバッグ用にとっておくことについて、これも納得はしているのですが、
ということはハードウェアシリアルのピンを使用している場合USB経由でのシリアル通信はうまくいかないということでしょうか。
また、ハードウェアシリアルでRN-42を通じて通信をする際、配線はソフトウェアシリアルのRxとTxをそのまま0番と1番につなげばよろしいのでしょうか。

何度も質問し、お手数をかけてすみません。返答お待ちしております。

onitsuka
onitsuka : 2017/06/05 03:40:59
ハードウェアシリアルのサンプルコードの通信ボーレートが9600になっていますが、これは間違いですか?
ボーレートは115200ではないのでしょうか?
kosei : 2018/10/26 14:41:51
koseiさん
サンプルコードの間違いの指摘ありがとうございます。
サンプルコードを修正いたしました。
Nobuki HIRAMINE : 2018/11/10 16:23:43
評価キットではなく、RN42−I/RM本体のみを購入したのですが、不都合は生じますでしょうか?
ご教示のほどよろしく願いいたします。
horita : 2019/10/13 17:41:38
Arduino unoを購入したのですが、3.3Vのピンがあります。そこに繋げたら抵抗は必要ないのでしょうか?
horita : 2019/10/13 17:54:22

コメントを投稿する
名前

コメント



ご意見、ご感想、ご質問、ご要望等は、「コメントを投稿する」もしくは「コンタクト」よりお願いいたします。