スポンサーリンク

Bluetooth RBT-001

  • RBT-001
    :技適取得済みのBluetooth2.0(SPP/GAP/SDAP)モジュール
  • データシート
  • RBT-001用シリアルレベルコンバータ
    :Arduinoは3.3/5V、RBT-001は3V駆動なのでこのコンバータで変換する
    SwitchScience

Arduinoとの接続

  • コンバータとArduinoを以下のように接続する。
    コンバータArduino備考
    5Vin5Vコンバータ内で3Vに変換
    GNDGND
    RX任意のデジタルPIN(TX定義)コードでTXピンに定義
    TX任意のデジタルPIN(RX定義)コードでRXピンに定義

サンプルコード

  • 「ファイル」→「スケッチの例」→「SoftwareSerial」→「Bluetooth」

準備

  • 最初に以下を書く。
    #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。

初期化

  • setup()の中で一度だけ呼ぶ。
    void setup()
    {
      // BT用ソフトウェアシリアル初期化
      btSerial.begin(9600);
    }

1文字受信

  • 以下のコードで受信データ1文字受信
    char c;   // 受信データ用
    
    if (btSerial.available()){  // 受信データ有る?
      c = btSerial.read();      // 1文字受信
    }
  • ※複数文字受信する場合は上記動作を複数回繰り返す。

HOST側ポートオープン時ごみデータ対策

  • 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()ルーチンを抜けメインループに移る

参考資料

Arduino+Bluetoothシリアル通信によるワイヤレスなLED制御
Bluetooth通信する(Bluetoothモジュール RN-42 使用)
Arduino 日本語リファレンス


Total:5206 / Today:1 / Yesterday:1

スポンサーリンク


添付ファイル: filerbt-001_man.pdf 3050件 [詳細]

トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-10-10 (土) 22:11:06