Bluetooth RBT-001 †
- RBT-001
:技適取得済みのBluetooth2.0(SPP/GAP/SDAP)モジュール
- データシート
- RBT-001用シリアルレベルコンバータ
:Arduinoは3.3/5V、RBT-001は3V駆動なのでこのコンバータで変換する
SwitchScience
Arduinoとの接続 †
- コンバータとArduinoを以下のように接続する。
コンバータ | Arduino | 備考 |
5Vin | 5V | コンバータ内で3Vに変換 |
GND | GND | |
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。
初期化 †
1文字受信 †
- ※複数文字受信する場合は上記動作を複数回繰り返す。
HOST側ポートオープン時ごみデータ対策 †
- HOST(PC、タブレット)でポートオープン時にArduinoでごみデータを受信してしまう。
その対策として、初期化時にターミネータ(CR+LF)受信したら初期化完了とする事で回避できる。
- ※ターミネータ:改行文字(リターンボタン)
- 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;
}
- HOST側でポートオープン後、ターミネータを送ってやるとsetup()ルーチンを抜けメインループに移る
参考資料 †
Arduino+Bluetoothシリアル通信によるワイヤレスなLED制御
Bluetooth通信する(Bluetoothモジュール RN-42 使用)
Arduino 日本語リファレンス
Total:5974 / Today:4 / Yesterday:1