51單片機 HC05藍牙模塊


一、注意事項

1、燒寫程序時,要把藍牙tx,rx信號線拔掉,對燒寫程序有影響。

2、執行HC05集命令時,均以\r\n結尾。串口中斷若選擇“發送新行”時,不用添加\r\n。原理相同。

二、准備軟硬件

1、硬件:單片機STC89C52RC開發板,藍牙模塊HC05

2、軟件:串口工具SSCOM3.3,手機藍牙客戶端

     手機藍牙客戶端鏈接:http://mobile.baidu.com/simple/item?docid=5014650&source=aladdin@wise_app_13@button&from=1015530c&ala=wise_app@strong@藍牙串口調試助手&go_bfe=1action=content&action=content

三、藍牙模塊HC05端口定義(6引腳)

state——藍牙連接狀態,未連接輸出低,連接后輸出高

TX——信號發

RX——信號收

GND——地

+5V

EN——使能端,需要進入AT模式時接3.3V,接單片機i/o引腳即可,高電平

四、進入AT模式進行參數和狀態的設置

兩種工作模式:命令響應工作模式和自動連接工作模式

命令響應工作模式(AT模式)

state——接任意單片機i/o

rx——接usb轉串口的tx端,P3^0

tx——接usb轉串口的rx端,P3^1

gnd——接地

5v——接5V電

en——接任意單片機i/o,高電平

1、需要接通en,並給高電平

2、通信線路:電腦-->usb轉串口-->hc05藍牙模塊(電腦與藍牙模塊間進行串口傳輸)

3、按住藍牙模塊的key鍵不松,單片機開發板上電,藍牙模塊指示燈進入慢閃狀態,說明進入AT模式

4、通過電腦串口工具可以設置藍牙的工作參數與狀態

5、執行電腦串口工具SSCOM3.3,設置比特率38400,8位數據,1位停止位

6、發送測試指令AT\r\n,如果返回OK表示通信正常。

7、可以執行自己所需的命令了。

8、發送恢復默認狀態指令AT+ORGL\r\n,如果返回OK表示設置成功。

出廠默認狀態:

①.設備類:0

②.查詢碼:0x009e8b33

③.模塊工作角色:Slave Mode

④.連接模式:指定專用藍牙設備連接模式

⑤.串口參數:波特率—38400bits/s;停止位:1位;校驗位:無

⑥.配對碼:“1234”

⑦.設備名稱:“H-C-2010-06-01”

..

9、設置波特率9600與單片機串口匹配,1停止位,0校驗位

· 執行AT+UART=9600,1,0\r\n。返回OK

10、查看UART狀態是否更改成功,執行AT+UART?,返回+UART:9600,1,0  OK

11、參數狀態設置完畢,可斷電,准備進入工作模式

五、進入自動連接工作模式進行藍牙匹配

state——接任意單片機i/o

rx——接單片機的tx端,P3^1,與命令相應模式相反

tx——接單片機的rx端,P3^0

gnd——接地

5v——接5V電

en——可不接

1、不需要接通en

2、通信線路:手機藍牙控制端-->hc05藍牙模塊-->單片機

3、單片機開發板上電,藍牙模塊指示燈進入快閃狀態,說明進入自動連接工作模式

4、手機開藍牙,即可搜到藍牙模塊,連接

5、打開手機端藍牙串口工具,連接成功,藍牙模塊指示燈進入雙閃狀態

6、至此連接成功,准備發送數據

 

#include <reg52.h>

void main(void)

{

while(1);

}

設置參數狀態,匹配測試用上述幾行代碼即可。

 

五、利用藍牙向單片機發送數據

1、通信線路:手機藍牙控制端輸出字符‘0’-->hc05藍牙模塊-->單片機接收字符‘0’(單片機與藍牙模塊間進行串口傳輸)-->單片機控制燈1亮

2、通信線路:手機藍牙控制端輸出字符‘1’-->hc05藍牙模塊-->單片機接收字符‘1’(單片機與藍牙模塊間進行串口傳輸)-->單片機控制燈2亮

3、通信線路:手機藍牙控制端輸出其它字符-->hc05藍牙模塊-->單片機接收該字符(單片機與藍牙模塊間進行串口傳輸)-->單片機控制燈3亮

4、該程序源碼

#include <reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;
u8 r_buf; //藍牙接收到的字符存儲緩沖區
sbit led1 = P1^0; //燈1,當接收字符0時,燈1亮
sbit led2 = P1^1; //燈2,當接收字符1時,燈2亮
sbit led3 = P1^2; //燈2,當接收其它字符時,燈3亮
sbit led4 = P1^3; //藍牙連接狀態燈,當藍牙連通時,燈4亮
sbit state = P3^6; //藍牙連通的狀態標志位
void delay(u16 z) //延遲函數
{  
u16 x,y;  
for(x=z;x>0;x--)   
for(y=125;y>0;y--); 

void InitUART() //串口初始化9600
{
//初始化串口定時器9600
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;   
       TH1 = 0xFD;
       TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
}
void SendOneByte(unsigned char c) //發送字符函數
{
    SBUF = c;
    while(!TI);
    TI = 0;
}
void main(void)
{
    InitUART();
led1 = 1;
led2 = 1;
led3 = 1;  
led4 = 1;
r_buf = '2';
while(1)
{
if(state == 1)//藍牙連通狀態判斷
{
led4 = 0;    //如果藍牙匹配成功,燈4亮
}
else
{
led4 = 1;    //如果藍牙匹配不成功,燈4不亮
}
}
}
void UARTInterrupt(void) interrupt 4 //串口接收字符
{
    if(RI)
    {
        RI = 0;
        //add your code here!
r_buf = SBUF;
if(r_buf == '0')//如果為字符‘0’,燈1亮
{
led1 = 0;
delay(1000);
led1 = 1;
}
if(r_buf == '1')//如果為字符‘1’,燈2亮
{
led2 = 0;
delay(1000);
led2 = 1;
}
else //如果為其它字符,燈3亮
{
led3 = 0;
delay(1000);
led3 = 1;
}
   SendOneByte(r_buf);//回發該字符
    }
}





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM