RS232Cシリアル通信の無線化
コンプリートBluetoothモジュールの制御方法はカンタンです。
マイコンとBluetoothモジュールをUARTでつなぎ、マイコンからUART経由でBluetoothモジュールへシリアルデータを送るだけです。Bluetoothモジュールの制御はマイコンからATコマンドライクなテキストコマンドを送ります。Bluetooth通信が確立された後はシリアルケーブルと同じようにデータ通信が行えますので、大きなアプリケーション変更は必要ありません。


Bluetoothの基本的な接続手順
まずBluetoothの基本的な接続手順についてご説明します。
Bluetoothのシリアル通信は「電話」のかけ方によく似ています。「電話」を例に挙げ、Bluetoothと比較することでイメージがしやすくなります。
電話をかける方を『マスター(Master)』、電話を着信する方を『スレーブ(Slave)』とします。
1. 電話をかける側・受ける側を決めます
Bluetoothの場合
まずマスター(接続する側の機器)とスレーブ(接続される側の機器)という役割を決めます。
2. 電源を入れ、圏内であることを確認します。
Bluetoothの場合
スレーブ側を待ち受け状態にします。

スレーブ側で「BTA(接続待ち受け)」コマンドを実行
3. 電話番号を教えてもらいます。事前に番号を知っていれば教えてもらう必要はありません。
Bluetoothの場合
マスター機器から周囲にあるスレーブ機器を「検索」し、スレーブ機器のBDアドレスを取得します(「検索」は必ずしも行う必要はありません)

マスター側で「BTI(周辺機器検索)」コマンドを実行
4. 発信先の電話番号を入力(セット)します。
Bluetoothの場合
マスター機器に接続したいスレーブ機器のBDアドレスをセットします。

マスター側で「BTT(接続先機器指定)」コマンドを実行
5. 発信ボタンを押します。
Bluetoothの場合
マスター機器から「接続」を行います。

マスター側で「BTC(接続処理実行)」コマンドを実行
6. 通話状態です。双方が会話できる状態です。(しゃべったことはそのまま相手に伝わります(データ垂れ流し)。)
Bluetoothの場合
接続完了です。双方向データ通信が可能となります。Bluetooth接続が確立された後はシリアルケーブルがつながっているのと同じ状態とみなせます。
※マスターが送信側、スレーブが受信側というわけではなく、どちら側からもデータ送信・受信が可能です。

接続されると「CONN」が出力されます。
7. どちらからでも通話を終わらせることができます。
Bluetoothの場合
マスター・スレーブどちらからでも切断することが可能です。

切断したい機器の方から「BTD(切断)」コマンドを実行。切断されると「DISC」が出力されます。
着信拒否設定をする場合
基本的にスレーブ側は待ち受け状態にあるなら発信を拒むことはできませんが、Passskey(PIN)認証を行うことで不特定多数からの接続要求を回避することができます。
Bluetoothの場合
両方の機器に同一のPasskey(PIN)を入力します。(※Passkeyが固定、あるいは入力不要な機器もあります。)

「BTP」コマンドでPasskey(PIN)をセット「認証アリ」にするには「BTF(各種設定)」コマンド
あくまで通話もBluetooth通信も1対1が基本です。
マスター側がスレーブ側へ電話を発信することで通話が確立されます。
- 電話がつながれば双方が会話ができるようになります(Bluetooth接続後は双方向通信)
- しゃべった言葉はそのまま相手に伝わります(入力したデータはそのままの形で出力されます)
- どちらからでも通話を終了することができます(どちらの機器からでもBluetooth切断可能)
Q. Bluetoothは1対多接続はできないの?
例えるなら一人のマスターが電話機を7台持って、7人のスレーブと同時通話している状態です。それぞれの通話は独立しており、1対1通信が7本あるイメージです。 スレーブ台数分のCOMポートを操作します。
※マスター側は時分割の処理となるため、接続本数が増えると通信が遅くなることがあります。
ZEALとマイコンとの接続方法
ZEALとマイコンは、UART(Universal Asynchronous Receiver Transmitter)で接続をします。UART機能搭載のマイコンであれば容易に接続し通信を行うことができます。
BluetoothのSPP通信はハードウェアフロー制御が必須仕様です。
コネクタ信号表
| 信号名 | ピン番号 | 信号名 | |
|---|---|---|---|
| GND | 1 | 2 | GND |
| GND | 3 | 4 | DSI(※2) |
| RESET | 5 | 6 | |
| 7 | 8 | ||
| 9 | 10 | ||
| 11 | 12 | ||
| 13 | 14 | VDD | |
| VDD | 15 | 16 | VDD |
| VDD | 17 | 18 | |
| CTS | 19 | 20 | BOOT0(※1) |
| TX | 21 | 22 | BOOT1(※1) |
| RX | 23 | 24 | MODE0 |
| RTS | 25 | 26 | MODE1 |
| STO | 27 | 28 | GND |
| GND | 29 | 30 | GND |
(※1)ZEAL-C01のみ (※2)ZEAL-C02のみ (※3)信号名の記載なきピンは未接続
信号説明
| 信号名 | I/O | 機能 | 論理 | 説明 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| VDD | - | 電源 | - | 3.0V~3.6Vを接続します。 | |||||||||||||||
| GND | - | 電源 | - | グラウンドに接続します。 | |||||||||||||||
| RESET | I | リセット | - | LOWを入力するとモジュールがリセットされます。モジュール内部にリセットICを搭載しているため、明示的に外部よりリセットを行いたい場合に接続し使用します。C01とS01で内部の接続が異なっているため詳細は「リセット」の項を参照してください。 | |||||||||||||||
| MODE[0:1] | I | モード | 負 | 電源入力(リセット)時のピンの状態(HIGH/LOW)により起動モードが決まります。
C01は51KΩで内部プルアップされています。S01はI/O設定によりプルアップされています。このため通常モードで起動する場合には未接続で問題ありません。モードピンをLOWにしたい場合にGNDに接続してください。マイコンで制御する場合には、I/OピンによりLOW/HIGHを入力してください。 |
|||||||||||||||
| TX | O | 送信データ | 正 | ZEALからのUART送信データです。 | |||||||||||||||
| RX | I | 送信データ | 正 | ZEALへのUART受信データです。 | |||||||||||||||
| RTS | O | 送信要求 | 負 | ZEALからのUART送信要求信号です。 | |||||||||||||||
| CTS | I | 送信許可 | 負 | ZEALへのUART送信許可信号です。 | |||||||||||||||
| STO | O | ステータス | - | コマンド設定によりステータス接続を出力することができます。接続時LOW、未接続時HIGHとなります。工場出荷時はステータスを出さない設定になっており、常時HIGHを出力しています。 ※使用方法はコマンド仕様書確認ください。 |
|||||||||||||||
| DSI(※注) | I | 低電制御 | 負 | 低消費電力モード利用時、この制御ピンが有効となります。LOWを入力するとディープスリープ状態に入ります。ZEALのUART(RX)にデータ(コマンド)入力する際にはHIGHに戻します。 ※ 詳細はコマンドリファレンス参照 |
|||||||||||||||
| BOOT[0:1] | I | ブート | - | C01のみに存在するピンです。GNDに接続してください。S01とC01を差し換えて使用する場合にもGNDに接続してください。 |
リセット

Bluetoothチップ内部のPower on Reset回路と接続されています。
チップ内部にてプルアップされています。

C01はオープンドレインアウトプットのリセットICを搭載しており、
外部コネクタのRESETピンとマイコンのリセットピンが接続されております。
このためマイコンのI/O等で制御を行う場合には、
オープンドレインバッファを使用してください。

S01のリセット信号は、内部リセットICのVDDに接続されており、
1KΩにてプルアップされております。
接続例

- RESETは明示的にリセットしたい場合に接続、この例では未接続としてあります。
- MODEはディップスイッチで切り替えられる例、外付けでプルアップ等は不要です。
- BOOTはC01を使用する場合にはGNDに接続してください。
S01は未接続で問題ありません。C01を搭載する可能性がある場合にはGNDに接続します。 - STOは、接続のステータスをマイコンで読み出したい場合等にI/Oピンと接続します。
UARTのマイコン接続例
| ZEAL UART 信号説明 | |||||
|---|---|---|---|---|---|
| ピン番号 | 信号名 | I/O | 機能 | 論理 | 説明 |
| 21 | TX | O | 送信データ | 正 | ZEALが送信するデータ (マイコンが受信するデータ) |
| 23 | RX | I | 受信データ | 正 | ZEALが受信するデータ (マイコンが送信するデータ) |
| 25 | RTS | O | 送信要求 | 負 | ZEALが受信可能な時にLOWを出力 (マイコンはLOWの時データ出力可) |
| 19 | CTS | I | 送信可 | 負 | ZEALはLOWの時データ出力可 (マイコンが受信可能な時にLOWを出力) |

フロー制御なし(非推奨)で使用する場合にはZEALのRTSはオープン、CTSはGNDにしてください。
接続相手
- ZEAL同士(別モデル間通信可能)
- 各種Bluetooth製品(ただしSPPプロファイル搭載製品に限る)
例)Bluetooth内蔵PC(外付けUSBタイプのBluetoothアダプタ)、ハンディターミナル、ハンディプリンタ、PDA
起動モード
ZEALには用途に応じた4つの起動モードをご用意しております。
各起動モードはZEALのモードピンおよびDIPSWにて切り替えます。
| MODE0 | MODE1 | DIPSW2 | DIPSW1 | |
|---|---|---|---|---|
| 通常モード | HIGH | HIGH | OFF | OFF |
| 設定値起動モード | LOW | HIGH | OFF | ON |
| 自動(接続 / 待受 / DUN)モード | HIGH | LOW | ON | OFF |
| ファームウェア書換モード | LOW | LOW | ON | ON |
通常モード
電源投入後、デフォルトのシリアル設定で起動し、コマンド状態となります。
※デフォルトシリアル設定 9,600bps, データ8, ストップ1, パリティなし
設定値起動モード
電源投入後、あらかじめユーザによって設定されたシリアル設定値で起動し、コマンド状態となります。
自動モード
自動モードには「自動待受モード(スレーブ側)」「自動接続モード(マスター側)」「自動DUNモード」があります。電源投入後、あらかじめユーザによって設定されたシリアル設定値で起動し、自動接続モードの場合はマスター側として自動で相手機器への接続を行います(事前に相手機器のBDアドレス設定が必要です)。自動待受モードの場合は起動後、スレーブ側として自動でスキャン状態となり、マスター機器からの接続を待ちます。
ファームウェア書換モード
ファームウェアを書き換える際に利用します(通常利用時には使用しません)。
ファームウェア書換には当社専用ツールが必要です。
動作状態

動作状態遷移図
ZEALは状況に応じて複数の「状態」に遷移します。各状態によって振る舞いが異なります。オンライン状態がいわゆる「シリアルケーブルがつながっているのと同じ状態」です。 上位アプリケーションからコマンドを実行し、ZEALの状態を制御してください。
コマンド状態
電源投入後、ZEALがコマンドを実行できる状態です。この状態ではまだBluetoothのシリアルデータ通信は行えません。 ZEALへ送られるデータは全てコマンドとして認識します(送られるデータがコマンドと一致しない場合は破棄されます)。
スキャン状態
ZEALがスレーブ側機器として、相手マスター機器からのデバイス検索や接続要求を待っている状態です。
オンライン状態
Bluetooth接続が確立され、シリアルデータ通信が可能となる状態です。オンライン状態時にはコマンド実行が不可能となり、 ZEALへ送られるデータは全てシリアルデータとして相手機器へ送られます。
(マスター・スレーブ)エスケープ状態
相手機器とのBluetooth接続を維持したままコマンド入力が可能となる状態です。主に切断する際に使用します。
スキャンエスケープ状態
スキャン状態を維持したままコマンド入力が可能となる状態です。主にスキャンを終了する際に使用します。
主要コマンド
ZEALはマスター・スレーブどちらでも使用可能です。上位アプリケーションからコマンド操作にてZEALを制御し、上述した各種「動作状態」へ移行させてください。
尚、下記に掲載されていないコマンドや各種コマンドの詳細、使用方法についてはZEALコマンドリファレンスをご参照ください。
マスターとして使用
BTLT ※必須
接続相手となるスレーブ機器のBDアドレスをセットするコマンドです。
BTC ※必須
BTTでセットされたスレーブ機器へ接続要求を行うコマンドです。
BTI
周囲に存在する(スキャン状態の)Bluetooth機器を検索するコマンドです。「検索」は特定の機器がスキャン状態にあるかの確認や、接続先相手機器のBDアドレスが不明なときにBDアドレス取得を目的として行います。毎度行う必要はありません。
スレーブとして使用
BTA ※必須
ZEALをスレーブ機器としてスキャン状態にするコマンドです。
共通
BTD
ZEALをオンライン状態、もしくはスキャン状態からコマンド状態へ解除するコマンドです。
「BTD」を実行するためには、一旦エスケープ状態(もしくはスキャンエスケープ状態)に移行させてください。
BTLO
自動モードの切替(自動接続モード or 自動待受モード)を設定するコマンドです。
BTLB
ボーレートを変更するコマンドです。
BTM
(コマンド実行された)ZEAL自身のBDアドレスを表示するコマンドです。
BTY
ZEALの各種設定を出荷時状態へ戻す初期化コマンドです。
この記事を書いた人
-
Bluetooth業界に足を踏み入れてから早10年。
初心者がイチから学んだ知識とノウハウを、初心者の方でもわかりやすいようにお伝えすることを心がけています。
この投稿者の最近の記事
無線化.comからのお知らせ2019.01.15【重要なお知らせ】BluetoothモジュールZEALシリーズ製造終了、および販売終了のご案内(2019/1/15)
無線化.comからのお知らせ2018.08.02【重要】ZEAL-S01ラストオーダー(販売終了)と各モジュールの供給性に関するご案内(2018年8月時点)
無線化.comからのお知らせ2018.06.04【重要なお知らせ】BluetoothSIG旧バージョン廃止の発表に伴うZEALシリーズの影響について
無線化.comからのお知らせ2018.03.16【重要】ZEALシリーズの今後の入手性、供給予定について(2018年3月時点)





