*Bluetooth RBT-001 [#nafd25b8]
-RBT-001~
:技適取得済みのBluetooth2.0(SPP/GAP/SDAP)モジュール
-データシート
#ref(rbt-001_man.pdf)~
-RBT-001用シリアルレベルコンバータ~
:Arduinoは3.3/5V、RBT-001は3V駆動なのでこのコンバータで変換する~
[[SwitchScience:https://www.switch-science.com/catalog/1315/]]
*Arduinoとの接続 [#x7fc3c97]
-コンバータとArduinoを以下のように接続する。
|コンバータ|Arduino|備考|
|5Vin|5V|コンバータ内で3Vに変換|
|GND|GND||
|RX|任意のデジタルPIN(TX定義)|コードでTXピンに定義|
|TX|任意のデジタルPIN(RX定義)|コードでRXピンに定義|

*サンプルコード [#fe7e4814]
-「ファイル」→「スケッチの例」→「SoftwareSerial」→「Bluetooth」

***準備 [#kf0f003f]
**準備 [#kf0f003f]
-最初に以下を書く。
 #include <SoftwareSerial.h>
 
 ////////////////
 // 定数
 //////////////// 
 #define PIN_BT_RX 7                                // Arduino RX(Receive)pin7 - RBT-001 TX(Trans  )  :Arduino7番ピンをRXピンとして定義
 #define PIN_BT_TX 6                                // Arduino TX(Trans  )pin6 - RBT-001 RX(Receive)  :Arduino7番ピンをTXピンとして定義
 
 ////////////////
 // グローバル変数
 ////////////////
 SoftwareSerial btSerial(PIN_BT_RX, PIN_BT_TX);      // BT用シリアルオブジェクト

-'''※Bluetooth通信はコード上はソフトウェアシリアル通信と同じ制御してやればOK。'''
****初期化 [#kf0f003f]
***初期化 [#kf0f003f]
-setup()の中で一度だけ呼ぶ。 
 void setup()
 {
   // BT用ソフトウェアシリアル初期化
   btSerial.begin(9600);
 }


****1文字受信 [#kf0f003f]
***1文字受信 [#kf0f003f]
-以下のコードで受信データ1文字受信
 char c;   // 受信データ用
 
 if (btSerial.available()){  // 受信データ有る?
   c = btSerial.read();      // 1文字受信
 }

-'''※複数文字受信する場合は上記動作を複数回繰り返す。'''

****HOST側ポートオープン時ごみデータ対策 [#kf0f003f]
***HOST側ポートオープン時ごみデータ対策 [#kf0f003f]
-HOST(PC、タブレット)でポートオープン時にArduinoでごみデータを受信してしまう。
その対策として、初期化時にターミネータ(CR+LF)受信したら初期化完了とする事で回避できる。~
-'''※ターミネータ:改行文字(リターンボタン)'''

-以下を定義
 #define NUM_READ_BUFF  (32)                        // BT受信バッファサイズ
 
 char g_ReadBuff[NUM_READ_BUFF] = "";                // 受信データ格納バッファ
 char g_ReadLine[NUM_READ_BUFF] = "";                // 1行読み込み済データバッファ
 int  g_CountRead = 0;                               // データ受信数


-1行受信関数を作成。
 /*******************************************************************************
  * 1行受信
  * 0:読み取り途中、1:読み取り完了
  *******************************************************************************/
 char ReadLineStr(void)
 {
   char c; 
 
   while (1) {
 
     // 1文字読み込み
     c = btSerial.read();
 
     ////////////////
     // 受信データ処理
 
     // 受信データ無し:読み取り途中
     if (c == -1) {
       break;
     }
 
     // 'CR':1行読み込み済データバッファへデータコピー ⇒ 読み取り完了
     else if (c == '\r') {
       g_ReadBuff[g_CountRead] = '\0';
       strncpy(g_ReadLine, g_ReadBuff, NUM_READ_BUFF - 1);
       g_ReadLine[NUM_READ_BUFF - 1] = '\0';
       g_CountRead = 0;
       return 1;  
     }
 
     // LF:読み捨て ⇒ 受信続行
     else if (c == '\n') { 
       ;
     }
 
     // その他:バッファ保存 ⇒ 受信続行
     else {
       if ((NUM_READ_BUFF - 1) > g_CountRead) {
         g_ReadBuff[g_CountRead] = c;
         g_CountRead++;
       }
     }
   }
 
   return 0;
 }

-setup()の中にターミネータ(CR+LF)受信処理を追加。
 void setup()
 {
   // BT用シリアル初期化
   btSerial.begin(9600); 
 
   // ターミネータ(CRLF)受信まで待つ ← HOST側ポートオープン時にごみデータ受信してしまうので
   // ※HOST側ポートオープン後必ず1回ターミネータ送ること
   while (1) {
     if (ReadLineStr() == 1) break;
   }
 }

-'''HOST側でポートオープン後、ターミネータを送ってやるとsetup()ルーチンを抜けメインループに移る'''


*参考資料 [#t393016d]
[[Arduino+Bluetoothシリアル通信によるワイヤレスなLED制御:http://masanoriprog.blogspot.jp/2013/08/arduino-bluetooth-serial-led.html]]~
[[Bluetooth通信する(Bluetoothモジュール RN-42 使用):http://www.hiramine.com/physicalcomputing/arduino/bluetooth_rn42.html]]~
[[Arduino 日本語リファレンス:http://www.musashinodenpa.com/arduino/ref/]]~
----

&size(12){Total:&counter(total); / Today:&counter(today); / Yesterday:&counter(yesterday);};

トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS