4.5
(2)

Arduino ではモジュール HC-05 (master/slave) により Bluetooth で他のデバイスとコミュニケーションを行うことが可能です。 Arduinoをスマートフォンやパソコン、他のマイコンなどの他の機器と接続してデータをやり取りすることができます。Bluetooth通信は、例えばロボットを遠隔操作したり、パソコンやスマートフォンにデータを表示したり保存したりするために使用できます。

前提となる条件。 Arduinoシリアル通信

材料

  • パソコン
  • Arduino UNO x2
  • USBケーブル
  • BluetoothモジュールHC-05 ZS-040 x2(または1x HC- ZS-040 x2)
  • USBケーブル

  • BluetoothモジュールHC-05 ZS-040 x2(または1x HC- ZS-040 x2)
  • パソコン

  • USBケーブル
  • Dupont cables M/F

モジュール HC-05 overview

BluetoothモジュールHC-05は6ピンを持っています。 電源用2個、接続確立用2個、設定モード用1個、接続状態を知るためのもう1個。

  • VCC電源です。 通常はArduinoの5V端子に接続します。
  • GND グラウンド。 通常、ArduinoのGND端子に接続します
  • RX 受信端子。 通常、Arduino
  • TX 送信ピンの送信ピン(TX)にフックされます。 通常はArduinoの受信ピン(RX)に接続します
  • モジュール接続時の状態はHIGHです
  • Key ou ENをHIGH (3.3V) に設定しないと設定モードにならず、切断しないと通信モードにはなりません。

HC-05の特徴は、スレーブモジュール(HC-06と同等)としても、マスターモジュール(単独で他の機器とペアリングできる)としても使用できる点です。

Schematics for configuration

WARNING :

  • Arduino Unoの2、3ピンを使用することにしました。 マイコンによっては、シリアル通信に対応していないピンがあります。 特に、Arduino Mega、Micro、Leonardo。
  • Bluetoothモジュールは3.3Vロジックを使用しているため、Arduinoからの5V電圧を下げるために分圧器を追加することをお勧めします。 (ピン3とRxの間に抵抗1k、RxとGNDの間に2kオーム)

モジュールHC-05の設定

モジュールHC-05の設定は、動作確認、正しい接続、名前などのパラメータ変更(複数のモジュールを使用している場合に便利)、PINコードや通信速度(ボーレート)に興味深いものがあります。 特に、マスターモジュールとして使用する場合は、注意が必要です。 HC-05の電源を入れる前に、KEY/ENピンをHIGHに設定してください。

シリアルモニターを開き、エンドラインオプションの「New line」とボーレート9600を選択します。

なお、HC-05はボーレート38400bpsで設定モードに入ります。

設定コード

以下のコードで、シリアルモニターとATコマンドを使ってパラメータの変更と確認が可能です。

#include <SoftwareSerial.h>#define rxPin 2#define txPin 3#define baudrate 38400String msg;SoftwareSerial hc05(rxPin ,txPin);void setup(){ pinMode(rxPin,INPUT); pinMode(txPin,OUTPUT); Serial.begin(9600); Serial.println("ENTER AT Commands:"); hc05.begin(baudrate);}void loop(){ readSerialPort(); if(msg!="") hc05.println(msg); if (hc05.available()>0){ Serial.write(hc05.read()); }}void readSerialPort(){ msg=""; while (Serial.available()) { delay(10); if (Serial.available() >0) { char c = Serial.read(); //gets one byte from serial buffer msg += c; //makes the string readString } }}

AT Commands

モジュールHC-06と比較して、HC-05はマスターモジュールとして使用でき、ATコマンドを使用して保存したパラメータを確認することもできます。

一般的には、コマンドAT+<command>? を入力すると保存したパラメータ(ex: AT+PSWD?はモジュールPINコードを表示)が表示されるようになります。 AT+<command>=<Param> と入力すると、パラメータ値を設定できます(例: AT+PWSD=0000 でPINコードを0000に変更)

ATコマンドの一部を紹介します:

  • 通信テストをするには、Arduino IDEのシリアルモニタにATと入力してください。
  • モジュール名を変更するには、AT+NAME=<Param>と入力します。
  • PINコードを変更するには、AT+PSWD=<Param>を入力します。
  • AT+ROLE=<Param>でモジュールの役割をスレーブかマスターか選択します(デフォルト0、例:マスターとして役割を変更するにはAT+ROLE=1、スレーブとしてAT+ROLE=0を入力します)。
  • ボーレートを変更するには、AT+UART=<Param1>,<Param2>,<Param3>にParam1、2、3シリアル通信パラメータ: ボーレート、ストップビット、パリティビット(デフォルトでは、9600、0、0に設定されています。 例:ボーレートを115200に変更するには、AT+UART=115200,0,0と入力します)

BluetoothモジュールHC-05用の他のATコマンドは、リンク先で見つけることができます。

CAUTION: モジュールHC-05はバージョンが異なり、設定手順も異なる可能性があります。 使用する前に、必ずモジュールラベルとファームウェアのバージョンを確認してください。 このチュートリアルでは、ZS-040というラベルのついたモジュールHC-05とファームウェアバージョン2.0-20100601を使用しました。

N.B.: モジュールが応答しない場合、配線、ケーブルの導電性、ボーレートをチェックしてください。

スレーブ設定

モジュールをスレーブに設定するには、AT+NAME=HC05-Slaveと名前を変え、通信パラメータと必要なPINコードを選択することができます。 マスターとスレーブの通信パラメータが同じであることを確認する必要があります。

  • AT returns OK
  • AT+NAME=HC05-Slave
  • AT+UART=9600,0,0
  • AT+ROLE=0
  • AT+ADDR でモジュールアドレス(例: +ADDR:98d3:32:21450e)

スレーブモジュールには、HC-06モジュール

Master Configuration

モジュールをマスターとして設定するには、ロールの変更とスレーブモジュールと同じ通信パラメータを設定することが必要です。

  • AT returns OK
  • AT+NAME=HC05-Master
  • AT+UART=9600,0,0
  • AT+ROLE=1
  • マスターモジュールでスレーブモジュールのアドレスがないと起動できない。 AT+BIND=98d3,32,21450e (replace dots “:” by coma “,”)

Schematics for communication

通信モードでは、キー/ENピンは接続されていません。

通信コード

両方のモジュールが設定できたら、モジュールと接続したArduinoボードに次のコードを書き込んで下さい。 各モジュールの電源を入れ、通信モードにします。

HC-06 モジュールと同じライブラリ SoftwareSerial.h を使用します。

  • SoftwareSerial hc05(Rx,Tx) シリアルポートのピンを定義する
  • hc05.begin() ボーレート(お使いのモジュールと同じ値にします)
  • hc05.begin() ボーレートの定義(お使いのモジュールと同じにして下さい)
  • hc05.begin() ボーレートを定義する(お使いのモジュールと同じにして下さい)
  • hc05.begin() ボーレートを定義する(お使いのモジュールと同じにして下さい)
  • hc05.begin() ボーレート(お使いのモジュールと同じにして下さい)を定義する(お使いのモジュールと同じにして下さい)を記述します。available() でデータがモジュールのバッファで利用可能かどうかをテストします
  • hc05.read() で一度に1バイトずつデータを読みます
  • hc05.print() でASCIIフォームの文字列を送信します
  • hc05.print() で1バイトずつデータを送信します。write() で1バイトずつデータを送信

マスターコード

#include <SoftwareSerial.h>SoftwareSerial ArduinoSlave(2,3);String answer;String msg;void setup(){Serial.begin(9600);Serial.println("ENTER Commands:");ArduinoSlave.begin(9600);}void loop(){//Read command from monitorreadSerialPort();//Read answer from slavewhile (ArduinoSlave.available()) {delay(10); if (ArduinoSlave.available() >0) {char c = ArduinoSlave.read(); //gets one byte from serial bufferanswer += c; //makes the string readString}}//Send data to slaveif(msg!=""){Serial.print("Master sent : ");Serial.println(msg);ArduinoSlave.print(msg);msg="";}//Send answer to monitorif(answer!=""){Serial.print("Slave recieved : ");Serial.println(answer);answer="";}}void readSerialPort(){while (Serial.available()) {delay(10); if (Serial.available() >0) {char c = Serial.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}Serial.flush();}

スレーブコード

#include <SoftwareSerial.h>SoftwareSerial ArduinoMaster(2,3);String msg;void setup(){Serial.begin(9600);ArduinoMaster.begin(9600); }void loop(){readSerialPort();// Send answer to masterif(msg!=""){Serial.print("Master sent : " );Serial.println(msg);ArduinoMaster.print(msg);msg=""; }}void readSerialPort(){while (ArduinoMaster.available()) {delay(10); if (ArduinoMaster.available() >0) {char c = ArduinoMaster.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}ArduinoMaster.flush();}

両方のシリアルモニタを開いて、マスターボードのモニタでコマンドを入力すると、次のような結果になるはずです。 マスターボードがコマンドを送信し、スレーブボードがそれを受信して送り返す。

Bluetoothモジュールの設定やペアリングに問題がある場合は、遠慮なくお問い合わせいただくか、コメント欄にご記入ください。

コメントを残す

メールアドレスが公開されることはありません。