create.03-1 Bluetooth通信
第三回は、Bluetoothを用いた制御を行っていきます。
最近、Bluetoothという言葉はみなさんもよく聞くようになったと思います。
今回はそのBluetoothを用いていろいろな通信を行っていきます。
最終目標として、以前取り扱った電源タップやロボットカーなども制御していこうと思います。
必要なもの
- Arduino Uno
- Bluetoothモジュール×2(RN4020) 購入元
- PC(ノートパソコン可)
- ジャンパ線
- ブレッドボード
- LED×2
- タクトスイッチ×2
- 抵抗×2
Step1.動作目標
Bluetoothの確認として、シリアル通信というものをやっていきます。
イメージ図は次のようになります。
動作概要としては、PCから送ったデータをArduinoを介してBluetoothに送り、そのデータをまたArduinoを介してPCに送るというものです。
シリアル通信ができるようになったら、BLE同士の通信をしていきます。
そのイメージ図が下図のようになります。
ここまでやっていきます!
Step2. RN4020の設定
初めに、RN4020の設定をしていきます。
下図がテストプログラムです。
回路図は、次のようになります。
プログラムを書き込んだら、シリアルモニタを起動します。
Enter CommandsとなればOK!
※改行なし⇒LFのみに変更しないと表示されません。
※RN4020の初期状態のボーレートは、115200bpsなので注意!
RN4020の設定の詳細については、ユーザーガイドを参照ください。
⇒ ユーザーガイド
+と入力するとEcho Onと表示されます。文字化けすることもありますが、問題ないです。
↓↓↓
SF,1と入力して初期状態に戻します。AOKと表示されればOK!
Dと入力すると、モジュールの情報が表示されます。
確認ができたら設定をしていきます。
初めに、現在のボーレートでは文字化けが起こるため、ボーレートを下げる設定をします。
SB,1と入力すると、AOKと表示され、115200bps⇒9600bpsまで下げることができます。
次に、R,1と入力して再起動をさせます。設定を変更したら、再起動をするようにしましょう。
再起動させたら、ボーレートのほうが9600bpsまで下がっているのでプログラムを書き換えます。
再度、書き込んだらシリアルモニタを起動します。
Step3 . 親機、子機の設定
次に、親機、子機の設定をしていきます。
親機側
SR,92000000と入力すると、機能変更/スクリプト実行(0x10000000)/MLDP有効(0x02000000)/
親機設定(0x80000000)に設定できます。
(0x92000000 = 0x80000000 + 0x10000000 + 0x02000000)
設定し終えたら、再起動(R,1)させます。
子機側
SR,32000000と入力すると、機能変更/MLDP有効(0x02000000)/
子機設定(0x30000000)に設定できます。
(0x32000000 = 0x30000000 + 0x02000000)
設定し終えたら、再起動(R,1)させます。
Step4. 手動接続
モジュールをそれぞれ親機、子機に設定します。
親機のほうで子機を探索し、接続していきます。
Fと入力すると、周辺の機器を探索します。
接続したい機器をのIDを調べる必要があります。
子機側で、Dと入力してモジュールの情報を表示させます。
赤線が引かれている機器と接続します。
E,0,xxと入力するとAOK,Connectedと表示されます。
xx → 001EC0551782と入力します。
↑
ボーレートを下げても文字化けするときがあります。
これで手動接続は完了です!
接続を切りたい場合は、Kと入力すると接続を切ることができます。
Step5. 自動接続
手動接続ができたら、自動接続のほうをしていきます。
※一度、自動接続の設定をしてしまうと書き換えが出来なくなり機器が全く動かない(書き換え不可状態になる)ことが確認されました。ユーザーガイドの方を確認していただくことをお勧めします。
操作するのは、親機側なので親機側の説明のみしていきます。
起動時に、子機と接続するようにスクリプトへ書き込んでいきます。
シリアルモニタ上で書き込むとうまく書き込めない時があったため、Tera Termを使用します。
Tera termを起動したら、シリアルポートを選択します。
今回は、COM12を選択しました。
接続完了すると、Enter Commandsと表示されます。
次に、スクリプトを作成していきます。
LWと入力すると、現在書かれているスクリプトが表示されます。
新たに書き込んでいくので、WCと入力し、書かれているスクリプトを消します。
AOKと表示されればOKです。
次に、WWと入力し、スクリプト入力モードにします。
書き込む内容は、
@PW_ON、E,0,001EC0551782 の二行を書き込みます。
書き込んだら、Escキーを押して入力モード終了です。
SR,93000000と入力すると、機能変更・MLDP有効・自動スクリプト・親機に設定できます。
そして、再起動(R,1)させます。
そうすると、再起動時にスクリプトが実行され、自動で接続できるようになります。
子機側を見てみましょう。
Connectedと表示されていることから、自動接続されていることが分かります。
これで、自動接続の設定は終了です!
こちらの記事を読んで、ArduinoとRN4020で通信をしたのですが、Teratermで親機を再起動しても子機に接続されません。さらに、TeratermからもArduino IDEからも反応がありません。
なにが原因なのか分からず、困っております。(親機用のモジュールが予備含め2台使用できなくなりました。)
また、Teraterm側の設定についてお教え願いたく思います。
返信遅れて申し訳ございません。
stepどこまで進めたのか教えていただけますでしょうか。
返信お待ちしております。
私も記事のとおり設定をしていると親機がまったく動かなくなりました。
>@PW_ON、E,0,001EC0551782 の二行を書き込みます。
のあたりからです。
リセットの様な事をすれば良いのでしょうか?
どのようにすれば良いか分かりません。
サポートお願いいたします。
手動接続は、上手くいってますでしょうか?
自動接続の際、自動スクリプト実行が悪さをしているかもしれません。
一度、自動接続の設定をしてしまうと書き換えが出来なくなることが実際にありました。
私たちも2台無駄にしてしまいました。
お手数をおかけしますが、ユーザーガイドの方を確認していただけますでしょうか。
書き込んだスクリプトをパソコンから削除することが出来たので初期状態に戻すことが出来ました。
その後、もう一度自動スクリプトの書き込みを行いましたが動きませんでした。
何の条件が悪いのか分からないままです。
また情報がありましたら宜しくお願いします。