藍芽模組使用教程
一 、模組簡介
嵌入式藍芽串列埠通訊模組(簡稱藍芽模組)具有兩種工作模式:
命令響應工作模式和自動連線工作模式。
當模組處於命令響應工作模式(或者AT模式)時能才能執行 AT 命令,使用者可向模組傳送各種 AT指令,為模組設定控制引數或釋出控制命令。(AT指令就是我們PC與一些終端裝置(例如藍芽,WiFi模組)之間進行通訊的,配置這些終端裝置引數的一套指令。)
在自動連線工作模式下模組又可分為主(Master)、從(Slave)和迴環(Loopback)三種工作角色。當模組處於自動連線工作模式時,將自動根據事先設定的方式連線的資料傳輸。主模式:該模組可以主動搜尋並連線其它藍芽模組並接收傳送資料。從模式:只能被搜尋被其它藍芽模組連線進行接收傳送資料。迴環:藍芽模組就是將接收的資料原樣返回給遠端的主裝置。
二、開發工具
1.USB轉TTL模組(可用CH340),藍芽模組(HC-05),PC端串列埠助助手。
2.藍芽模組與USB轉TTL模組的接線情況就是VCC-VCC,GND-GND,RXD-TXD,TXD-RXD,有的藍芽模組只有四個引腳,而且我們見到的大多數藍芽模組都是四個或者只需要用到四個引腳。
3年嵌入式物聯網學習資源整理分享:C語言、Linux開發、資料結構;軟體開發,STM32微控制器、ARM硬體開發、物聯網通訊開發、綜合專案開發教程資料;筆試面試真題。點選下方外掛免費領取↓↓↓嵌入式物聯網學習資料(頭條)
3.手機需要安裝一個可以進行藍芽通訊的APP,一般直接在你手機的應用商店搜藍芽串列埠就可以下載相關APP,如“串列埠除錯助手”。
三、藍芽模組初始化
這裡以藍芽模組HC-05為例,藍芽模組可能每個人買到的不一樣,但是用法都相近,可以作為參考,建議你在哪裡買的模組就找對應的賣家找到對應的藍芽模組中文資料手冊,一般來說裡面都有對應的AT指令集。這裡要注意的是如果你傳送對應的指令,在硬體連線都正確的情況下如果串列埠除錯助手不能得到迴應,那麼很可能是你的AT指令集是錯的,因為不同的藍芽模組對應的藍芽AT指令集是有差別的。
HC-05藍芽模組引腳說明:
藍芽模組自帶一個狀態指示燈
1.在上電時,將KEY腳懸空或接地,紅燈1s一次快速閃爍,表示進入可配對模式。
2.在上電之前,按住黑色小設定按鈕不放,同時KEY接高電平,上電,燈2s一次慢速閃爍,表示進入AT模式,進入AT模式可以對藍芽模組進行設定。
3.配對成功模式,快速閃爍。
這三點很重要,藍芽模組只有進入了AT模式才能傳送AT指令集,很多小白以為只要接上USB轉TTL模組插到電腦,開啟串列埠除錯助手就可以傳送指令。這是不可以的。切記!!!
四、微控制器串列埠程式
這裡以51微控制器為例,藍芽串列埠的程式最重要的就是配置串列埠定時器,這裡將定時器相關的程式碼貼出來,大家最好按照這種方法配置,經過多次建議程式穩定。
串列埠初始化 1void Usartinit()//初始化
2{
3 TMOD=0x21; //設定定時器1的工作方式2 0010 0000 GATE C/T 8位初值自動重灌8位定時器
4 PCON=0x80; //波特率加倍 電源管理暫存器
5 TH1=0xf3; //給定時器重灌初值
6 TL1=0xf3; //這裡的波特率必須加倍 不加倍的話 通訊不成功 本人目前還不知道原因
7 //由於開發板使用的晶振頻率是12M,非標準頻率,在設定波特率時很容易產生誤差,而導致串列埠通訊出現亂碼或者失敗
8 //目前來說,選擇波特率4800,SMOD=1波特率加倍的方式,誤差率僅為0.16%,為12M晶振中最小的誤差
9 TH0=0XEC; //5ms定時
10 TL0=0X78;
11 TR0=1;
12 ET0=1;
13 TR1=1; //開定時器1
14 SM0=0; //選擇串列埠工作方式1,常用
15 SM1=1;
16 REN=1; //開串列埠接收 此時接收器所選擇的波特率16倍速率取樣RXD移交的電平 開始接收資訊
17 ES=1; //序列中斷總開關
18 EA=1; //開總中斷
19}
相關配置程式註釋已相當明白。
主函式 1uchar flag,i,receive;
2uchar code table1[]="GO";
3uchar code table2[]="Stop";
4void main()
5{
6 Usartinit(); //呼叫初始化函式進行初始化
7 while(1)
8 {
9 if(flag==1) //不斷的檢測標誌位是否被置1 被置1說明已經執行了中斷服務程式,即已經接資料,否則一直檢測flag的狀態
10 {
11 switch(receive)
12 {
13 case 1:
14 ES=0; //接下來要傳送資料 先要使ES=0關閉串列埠中斷 等資料傳送完後再開啟串列埠中斷
15 for(i=0;i<2;i )
16 {
17 SBUF=table1[i];
18 while(!TI); //等待是否傳送完成 因為傳送完成後TUI會有硬體置1
19 TI=0; //清除傳送完成標誌位 手動清0
20 }
21 ES=1;
22 flag=0;
23 break;
24 case 2:
25 ES=0;
26 for(i=0;i<4;i )
27 {
28 SBUF=table2[i];
29 while(!TI);
30 TI=0;
31 }
32 ES=1;
33 flag=0;
34 break;
35 }
36 }
37 }
38}
39void Usart() interrupt 4 //一旦有資料接入,序列口中斷觸發
40{
41 receive=SBUF-48; //當REN為1時 開始接收資料 將接收到的值賦予receive 這裡的是ACSII 所以要減去48
42 RI=0; //當RI=0 將接收資料存入SBUF暫存器中 清除接收中斷標誌位 有內部硬體置1,項CPU發出中斷請求 在中斷服務程式中,必須用軟體將其清零, 取消此中斷申請
43 flag=1; //將標誌位置1 這個是方便在主程式中查詢判斷是否已經接收到資料
44}
以上是微控制器的程式,由於51微控制器只有一對RXD和TXD引腳,故先將程式下載到微控制器後再將藍芽模組的四個引腳接到微控制器的RXD和TXD引腳,以後每次下載程式是都要這樣操作,但不要嫌麻煩。
五、手機端操作
在安卓手機的應用商店搜尋“藍芽除錯助手”,我的應用商店下載的是“藍芽偵錯程式”
在沒有連線成功藍芽時,藍芽上面的紅燈一直在閃爍,當連線成功後,紅燈停止閃爍,每傳送一條指令,電腦的串列埠除錯助手就會收到手機端傳送的訊息。
原文標題:專案分享|小師弟手把手教你用藍芽模組
原文連結:
https://mp.weixin.qq.com/s/ggA2x_prpV9EWO_uIyNUHA原文作者:果果小師弟