BlueTooth HC-05藍牙模塊使用教程
模塊簡介
嵌入式藍牙串口通訊模塊(簡稱藍牙模塊)具有兩種工作模式:命令響應工作模式和自動連接工作模式。
命令響應模式(AT模式)
首先按住藍牙模塊上的復位鍵然后再上電,看見藍牙模塊上的LED燈以2s間隔閃爍,就表示進入了AT模式 記住串口助手的波特率設置為38400,停止位1位,數據為8位,奇偶校驗無,另外一定要勾上“發送新行”!
當模塊處于命令響應工作模式(或者AT模式)時能才能執行 AT 命令,用戶可向模塊發送各種 AT指令,為模塊設定控制參數或發布控制命令。(AT指令就是我們PC與一些終端設備(例如藍牙,WiFi模塊)之間進行通信的,配置這些終端設備參數的一套指令。)
自動鏈接模式
我們發送AT+RESET之后,當模塊LED以0.5s間隔閃爍時表示進入自動連接模式。 在自動連接工作模式下模塊又可分為主(Master)、從(Slave)和回環(Loopback)三種工作角色。 當模塊處于自動連接工作模式時,將自動根據事先設定的方式連接的數據傳輸。
- 主模式:該模塊可以主動搜索并連接其它藍牙模塊并接收發送數據。
- 從模式:只能被搜索被其它藍牙模塊連接進行接收發送數據。
- 回環:藍牙模塊就是將接收的數據原樣返回給遠程的主設備。
連接串口通信模塊
HC05的VCC連接+5V,GND連接GND,TXD連接Pin10,RXD連接Pin11。 HC-05模塊是藍牙SPP(串行端口協議)模塊,這意味著它通過串行通信與Arduino通信。 我使用的這個模塊可以在3.6到6V的電壓下工作,因為它帶有一個包含電壓調節器的分線板。但是,數據引腳的邏輯電壓電平為3.3V。 因此,Arduino的TX(具有5V輸出的發送引腳)和藍牙模塊RX(僅支持3.3V的接收引腳)之間的線路需要通過分壓器連接,以免燒毀模塊。 另一方面,藍牙模塊TX引腳和Arduino RX引腳之間的線路可以直接連接,因為來自藍牙模塊的3.3V信號足以被Arduino開發板上的高邏輯識別。
常用 AT 命令如下
AT+ORGL # 恢復出廠模式
AT+NAME=<Name> # 設置藍牙名稱
AT+ROLE=0 # 設置藍牙為從模式
AT+CMODE=1 # 設置藍牙為任意設備連接模式
AT+PSWD=<Pwd> # 設置藍牙匹配密碼
## Other AT command
AT+VERSION? # 查看版本信息
AT+ADDR? # 查看藍牙地址
AT+UART? # 查看串口參數
AT : Ceck the connection.
AT+ROLE: See role of bt module(1=master/0=slave)
AT+RESET : Reset and exit AT mode
正常情況下,命令發送后,會返回 OK ,如果沒有返回任何信息,請檢查接線是否正確, 藍牙模塊是否已經進入 AT 模式,如果上述兩點都沒有問題,可能是藍牙模塊的問題, 可以找藍牙模塊供應商咨詢。設置完畢后,斷開電源,再次通電, 這時,藍牙模塊指示燈會快速閃爍,這表明藍牙已經進入正常工作模式。
從機設置的AT代碼
AT returns OK
AT+NAME=HC05-Slave
AT+UART=9600,0,0
AT+ROLE=0
主機設置的AT代碼
AT returns OK
AT+NAME=HC05-Master
AT+UART=9600,0,0
AT+ROLE=1
Arduino 通信示例代碼
#include <SoftwareSerial.h>
// Pin10為RX,接HC05的TXD
// Pin11為TX,接HC05的RXD
SoftwareSerial BT(10, 11);
char val;
void setup() {
Serial.begin(38400);
Serial.println("BT is ready!");
// HC-05默認,38400
BT.begin(38400);
}
void loop() {
if (Serial.available()) {
val = Serial.read();
BT.print(val);
}
if (BT.available()) {
val = BT.read();
Serial.print(val);
}
}
示例二:效果一樣
#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
#define baudrate 38400
String 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
}
}
}
示例三:主從機通信
-
Arduino 連接藍牙主機代碼
#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 monitor readSerialPort(); //Read answer from slave while (ArduinoSlave.available()) { delay(10); if (ArduinoSlave.available() >0) { char c = ArduinoSlave.read(); //gets one byte from serial buffer answer += c; //makes the string readString } } //Send data to slave if(msg!=""){ Serial.print("Master sent : "); Serial.println(msg); ArduinoSlave.print(msg); msg=""; } //Send answer to monitor if(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 buffer msg += c; //makes the string readString } } Serial.flush(); }
- Arduino 連接藍牙從機代碼
#include <SoftwareSerial.h> SoftwareSerial ArduinoMaster(2,3); String msg; void setup(){ Serial.begin(9600); ArduinoMaster.begin(9600); } void loop(){ readSerialPort(); // Send answer to master if(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 buffer msg += c; //makes the string readString } } ArduinoMaster.flush(); }
使用步驟
寫入代碼后,將 Arduino 斷電,然后按著藍牙模塊上的黑色按鈕,再讓 Arduino 通電, 如果藍牙模塊指示燈按2秒的頻率閃爍,表明藍牙模塊已經正確進入 AT 模式。 打開 Arduino IDE 的串口監視器,選擇正確的端口,將輸出格式設置為 Both: NL & CR , 波特率設置為 38400 ,可以看到串口監視器中顯示 BT is ready! 的信息。 然后,輸入 AT ,如果一切正常,串口顯示器會顯示 OK。接下來,我們即可對藍牙模塊進行設置。
示例:藍牙控制小燈
#include <SoftwareSerial.h>
// Pin3為RX,接HC05的TXD
// Pin2為TX,接HC05的RXD
SoftwareSerial BT(3, 2);
char val;
int ledPin=5;
void setup() {
Serial.begin(38400);
Serial.println("BT is ready!");
// HC-05默認,38400
BT.begin(38400);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (Serial.available()) {
val = Serial.read();
BT.print(val);
}
if (BT.available()) {
val = BT.read();
Serial.print(val);
if (val == '1')
{
// 返回到手機調試程序上
Serial.write("Serial--ledPin--high");
digitalWrite(ledPin, HIGH);
}
if (val == '2')
{
Serial.write("Serial--ledPin--low");
digitalWrite(ledPin, LOW);
}
}
}
原文連接:https://combofish.github.io/2020/02/08/how-to-use-hc-05-bluetooth-module.html