先日、Bluetoothモジュール(HC-05/HC-06)の使い方についてご紹介しました。
通常のシリアルでのやり取り(TXとRX)で接続できるため、Bluetoothの事をあまり意識しなくてもArduinoなどと接続し簡単に無線通信を行うことが出来るモジュールとなります。
技適に関しては取得されていないモジュールとなりその使用には少し注意も必要ですが、電子工作用途で非常に便利に使えるBluetoothモジュールとなります。
自作ロボくんの無線化をいろいろと試していますが、Bluetoothモジュール(HC-05やHC-06など)では通常のシリアルでの接続でArduinoとデータのやり取りが出来るため、製作物への組み込みなど比較的簡単に行うことが出来ます。
そしてこれらBluetoothモジュールでは、ATコマンドによる設定変更を行うことが出来ます。
デバイス名や通信速度(ボーレート)・Bluetoothモジュール同士でのやり取りでは親機(マスター)/子機(スレーブ)などの設定ですね。
BluetoothモジュールをArduinoやUSB-シリアル変換モジュールに接続してATコマンドを入力する事によりデバイスの各種設定を行うわけですが、接続方法もいろいろとあります。
上記前回の記事では、ArduinoとBluetoothモジュールを接続し簡単なスケッチを用意しATコマンドモードによるデバイスの各種設定を行いました。
そして接続方法に関して前回書ききれなかった他の接続方法も今回少しご紹介したいと思います。
上記記事の追記的な内容となります。
Bluetoothモジュール(HC-05/HC-06) ATコマンドモードの接続方法!
BluetoothモジュールHC-05やHC-06のATコマンドモードでの設定変更に前回このようにArduinoと接続して行いました。
そしてシリアルモニタに入力されたATコマンドをモジュール側に送り、モジュール側のリターンをシリアルモニタに表示させるこのような簡単なスケッチを作り設定変更を行いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // Bluetoothモジュール HC-05(HC-06) ATモード設定用スケッチ // シリアルモニタを使用した通信スケッチになります // https://burariweb.info // // HC-05はスイッチを押しながら電源投入でATモードに入ります。 // HC-06は電源投入と同時にATモードに入ります。 // // デフォルトのボーレートは HC-05(34800bps)・HC-06(9600bps)となっています。 // HC-05は[NL+CR]、HC-06は[改行なし]でコマンドを送信! // #include <SoftwareSerial.h> // Bluetoothモジュールとはソフトウェアシリアルで通信。 // TXD-(Arduino)D2,RXD-(Arduino)D3に接続。 // ArduinoからのTXは分圧してBluetoothモジュールのRXDに接続。 SoftwareSerial BTserial(2, 3); // RX,TX void setup() { Serial.begin(9600); Serial.println("AT コマンドを入力 :"); // HC-05のデフォルトでのボーレートは38400 // HC-06のデフォルトのボーレートは9600 BTserial.begin(38400); } void loop() { // HC-05(HC-06)から読み取りシリアルモニタに送信する if (BTserial.available()) { Serial.write(BTserial.read()); } // シリアルモニタからのデータを読み取りHC-05(HC-06)に送信する if (Serial.available()) { BTserial.write(Serial.read()); } } |
ここまでは前回の内容です。
詳しくはこちらの記事をご覧下さい!
前回接続方法に関して他の方法も少し触れたのですが、書ききれなかったので追記で書いていきます。
Arduinoを使った他の接続方法
上記接続方法では、Bluetoothモジュールの設定を変更する際に毎回上記のようなスケッチを用意する必要があります。
簡単なスケッチですが、面倒になる事もあるかと思います。
Arduinoを使いスケッチを必要としないシンプルな他の接続方法も見ておきます。
Arduino(こちらではUnoを使います)ボードに搭載されているUSB-シリアル変換器のみを使った方法となります。
お分かりになる方なら、その接続方法ね!・・・なんて思われるかと思います。
実はこの接続方法で試した際に私は非常にハマってしまい、これは備忘録的に残しておこうと思います。
まずは接続です。
BluetoothモジュールとArduino Unoとはこのように接続します。
前回行った上記接続方法では、シリアルモニタを使うためBluetoothモジュールとの接続はソフトウェアシリアルを使いました。
ソフトウェアシリアルでもハードウェアシリアルを使った接続でも通常のシリアルでのやり取りでは、TX-RX/RX-TXのように対になるように接続します。
しかし今回の接続では、TX-TX/RX-RXというように接続して行います。
この接続では、Arduino Unoに搭載されているUSB-シリアル変換器(ATmega16U2)のみを使ってATコマンドのやり取りを行おうとしています。
次でご紹介するUSB-シリアル変換モジュールを使った接続と内容は同じです。
Arduino | HC-05(HC-06) |
5V | VCC |
GND | GND |
RX | RXD |
TX | TXD |
Arduino UnoにはPCと接続してスケッチの書き込み等行うためのUSB-シリアル変換器にATmega16U2というマイコンチップが搭載されています。
接続されているイメージはこんな感じですね。
そして今回の接続ではこのようにBluetoothモジュールと接続されています。
Unoのシリアル変換器とはちゃんとTX-RX、RX-TXというように接続されているということですね!
理屈が分かってしまえは非常に簡単なことです。
今回ArduinoのATmega328Pは使わず、USB-シリアル変換器(ATmega16U2)とBluetoothモジュールとの接続でのやり取りとなります。
UART通信に関してはこちらの記事も参考にして下さい。
上記イメージ図を見ると分かりますが、BluetoothモジュールのTXとRXはUSB-シリアル変換器とはRX・TXと接続されています。
このイメージが掴めていなかったので、私の場合Arduino Uno側のD1(RX)/D2(TX)にBluetoothモジュールのTX/RXと接続していたので上手くいかずかなりハマってしまいました。
上記接続が出来たらシリアルモニタを立ち上げます。
例えば、Serial.printなどシリアルでのやり取りを行うスケッチが書き込まれているとうまく接続が出来ません!
ボーレートを設定すれば、あとはATコマンドを入力しBluetoothモジュールの設定変更を行っていきます。
HC-05ではATコマンドモードでのやり取りは常に38400bpsとなっています。
シリアルモニタを立ち上げ、[CRおよびLF][38400bps]に設定しておきます。
↓
OK
あとは通常のATコマンドでのやり取りとなります。
ATコマンドによる設定内容変更に関しては前回の記事を参考にして下さい。
ちなみにHC-06ではデフォルトのボーレートは9600bpsとなっています。
[改行なし][9600bps]に設定しておきます。
USB-シリアル変換モジュールを使う!
その他の接続方法として、USB-シリアル(USB-TTL)変換モジュールを使う方法があります。
手元にあれば、Arduinoボードを使うことなく一番簡単な接続方法だと思います。
接続は簡単です!
USB-シリアル変換モジュールのTXO/RXIをBluetoothモジュールのRXD/TXDに接続するだけです。
あとは上記手順と同様に、Arduino IDEのシリアルモニタからコマンドを入力するだけです。
USB-シリアル変換モジュール | HC-05(HC-06) |
VCC | VCC |
GND | GND |
TXO | RXD |
RXI | TXD |
最後に!
USB-シリアル変換モジュールが手元にあれば直接接続するだけでATコマンドによるBluetoothモジュールの設定変更が出来るので一番手っ取り早い方法ですね!
今回Arduinoを使った接続で上記のような方法もご紹介しましたが、Bluetoothモジュール以外にもこれまで接続が上手くいかなかった事も解決したので備忘録的に書いてみました。
例えば、Arduino Pro Miniのスケッチの書き込みの際に他のArduinoボードを使った接続方法です。
接続の考え方は今回と同じです。
これまで少し曖昧に理解していたことなので、理屈が分かりスッキリしました。
ArduinoボードのUSB-シリアル変換器部分のみを使った接続方法は、何かと便利で使える場面も多いと思います。
参考になればと思います!
コメントを残す