Arduino---HC-05 藍牙模塊
阿新 • • 發佈:2019-05-10
藍牙串口 blank set 配對 發送信息 我們 () role htm
藍牙基礎知識回顧:
(一)Arduino和HC-05連接
註意:Arduino通過TX與HC-05進行通信,而Arduino的電壓為5V,HC-05的允許電壓為3.3V。短時間通信無妨(長時間可能燒毀HC-05)<接分壓電路>
U = 5*20/30 = 3.3V I = 5V/(10K+20K) = 0.16mA
(二)Arduino和HC-05和手機通信
1.手機發送信息給藍牙
2.藍牙將信息通過TX口發送給Arduino的串口緩沖區(Arduino可以接收)
3.Arduino只需要Serial.read()操作就可以取出藍牙傳過來的數據
缺點:使用Serial.read()讀取數據,可能也會讀取到電腦串口發送的數據(導致數據混亂)
所以推薦使用SoftwareSerial.h頭文件進行藍牙操作(操作方法下面有使用)
補充:串口透傳---透明傳輸
藍牙傳輸數據使用透明傳輸:在傳輸過程中數據不發生任何形式的變化,仿佛傳輸過程是透明的,數據原封不動的從發送方傳輸到接收端
一:問題
(一)出現在AT模式下只有第一個命令可以正確返回OK,其他返回ERROR(0)
(二)出現手機和藍牙相連發送數據始終亂碼,不正確問題
二:解決問題1:進入AT模式
(一)HC-05在AT模式下的頻率必須是38400
(二)註意在命令結束後面都需要我們加上回車符
(三)arduino下設置代碼,進入AT模式
//HC-05進入設置AT模式#include <SoftwareSerial.h> SoftwareSerial BT(8,9); void setup() { //開啟電腦通信串口,因為HC-05的波特率為38400,兩者通信保持一致 Serial.begin(38400);
//開啟藍牙,設置波特率38400,進入AT模式 BT.begin(38400); //告訴電腦,藍牙準備好了 Serial.println("BT is ready!"); } char AT_Cmd,AT_Rec; void loop() { //若是電腦發送信息 if(Serial.available()>0) { //讀取信息,並且將信息發送給藍牙,進行AT設置 AT_Cmd = Serial.read(); BT.print(AT_Cmd); } //若是接收到藍牙返回的信息:一般設置後返回OK if(BT.available()>0) { AT_Rec = BT.read(); Serial.print(AT_Rec); } }
疑惑:為什麽在BT.available下,電腦依舊會一直顯示藍牙回收的信息(難道藍牙在一直發送響應信息)?
(四)重點:解決問題一(除了第一個以外的其他命令返回error)
HC-05的EN腳先接3.3V,接著按著KEY鍵不放,然後給模塊上電(供5V)後,這一瞬間模塊進入了AT命令響應狀態,
你才可以在串口調試助手裏面輸入一條AT命令;
如果想再輸入一條AT命令,你必須重復剛才的過程(斷電後再按KEY鍵再上電),
也就是說模塊在進入了AT命令響應狀態後只能響應一條AT命令(原因不明,不知道是不是只有我的這樣)
按住先斷開HC-05的vcc接線(斷電),然後一直按住Key,再接上vcc進行通電,通電後1s可以松開Key。
每當需要發送一條AT數據,都需要重復上面操作
(五)其他方法解決問題1
1.使用其他串口工具(未使用)
2.在調試代碼中直接寫入AT指令(測試可用)
#include <SoftwareSerial.h> SoftwareSerial BT(8,9); void setup() { //開啟電腦通信串口,因為HC-05的波特率為38400,兩者通信保持一致 Serial.begin(38400); BT.begin(38400); //告訴電腦,藍牙準備好了 Serial.println("BT is ready!"); BT.println("AT"); delay(100); BT.println("AT+NAME=HC-05");//命名模塊名 delay(100); BT.println("AT+ROLE=0");//設置主從模式:0從機,1主機 delay(100); BT.println("AT+PSWD=1233");//設置配對密碼,如1234 delay(100); BT.println("AT+UART=9600,0,0");//設置波特率9600,停止位1,校驗位無 delay(100); BT.println("AT+RMAAD");//清空配對列表 }
只需要開始先斷電一次,才可以進入AT模式,後面不需要斷電操作
三:解決問題2:手機連接藍牙後傳輸數據亂碼
(一)原因:HC-05的默認頻率可能是38400,而手機的頻率為9600,兩種的頻率不同,數據傳輸出錯
(二)解決方法:進入AT模式,設置頻率為9600(如上面的設置)
BT.println("AT+UART=9600,0,0");//設置波特率9600,停止位1,校驗位無
(三)補充部分AT指令
AT+UART? | 查詢波特率 |
AT+UART=參數1,參數2,參數3 | 設置波特率,停止位,校驗位 |
更多指令可查:https://wenku.baidu.com/view/a6ebe6b18e9951e79a892765.html
四:案例使用---藍牙點亮小燈
void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(11,OUTPUT); } char ch; void loop() { // put your main code here, to run repeatedly: if(Serial.available()>0) { ch = Serial.read(); if(ch==‘1‘) digitalWrite(11,HIGH); //開啟小燈 else digitalWrite(11,LOW); //關閉小燈 Serial.print(ch); } }
代碼推薦使用SoftwareSerial實現
五:Arduino無線藍牙模塊HC06安卓應用Arduino Bluetooth Controller下載(百度網盤)《或者手機應用下載藍牙串口》
Arduino---HC-05 藍牙模塊