?? 文章作者:二土電子
?? 關(guān)注文末公眾號(hào)獲取其他資料和工程文件!
?? 期待大家一起學(xué)習(xí)交流!
一、藍(lán)牙簡(jiǎn)介
藍(lán)牙(Bluetooth)是一種無(wú)線技術(shù)標(biāo)準(zhǔn),可實(shí)現(xiàn)固定設(shè)備、移動(dòng)設(shè)備和樓宇個(gè)人域網(wǎng)之間的短距離數(shù)據(jù)交換(使用2.4~2.485GHz的ISM波段的UHF無(wú)線電波)。藍(lán)牙技術(shù)最初由電信巨頭愛(ài)立信公司于1994年創(chuàng)制,當(dāng)時(shí)是作為RS232數(shù)據(jù)線的替代方案。藍(lán)牙可連接多個(gè)設(shè)備,克服了數(shù)據(jù)同步的難題。我們這里介紹的是在嵌入式開發(fā)中常用的藍(lán)牙模塊——HC-05。
二、使用方法
2.1 接線
HC-05供電電壓為3.6V~6V。通常使用5V供電。其余的RXD接TXD,TXD接RXD,CND接GND即可。
2.2 AT指令
HC-05也可以使用AT指令進(jìn)行配置。在配置之前,首先需要讓模塊進(jìn)入配置模式。
博主買的HC-05有一個(gè)小按鈕。按住小按鈕再給藍(lán)牙模塊上電,藍(lán)牙模塊進(jìn)入配置模式,此時(shí)模塊上自帶的LED會(huì)慢速閃爍。進(jìn)入配置模式后,就可以用AT指令來(lái)配置我們的HC-05了。配置時(shí),用USB轉(zhuǎn)TTL連接HC-05,用串口調(diào)試助手發(fā)送AT指令進(jìn)行配置。需要注意的是,HC-05配置模式的波特率固定為38400,如果你給HC-05發(fā)送指令,沒(méi)有收到回復(fù),記得檢查一下串口調(diào)試助手的波特率是否正確。
下面列舉一些配置時(shí)常用的AT指令
-
AT
檢查HC-05模塊連接是否正常,HC-05收到后會(huì)回復(fù)“OK” -
AT+NAME=名字
配置HC-05的名字,配置成功后會(huì)返回“OK” - AT+NAME?
詢問(wèn)HC-05的名字。發(fā)送后會(huì)收到“+NAME:“名字””,換行加“OK” -
AT+PSWD=密碼
配置HC-05密碼,配對(duì)時(shí)需要用到。配置成功后,會(huì)收到“OK” -
AT+PSWD?
詢問(wèn)HC-05配對(duì)密碼。發(fā)送后會(huì)收到“+PSWD:991102”,換行加“OK” -
AT+UART=波特率,停止位,校驗(yàn)
設(shè)置HC-05的波特率,其中停止位0表示一位停止位,為1表示兩位停止位。校驗(yàn)位為0表示無(wú)校驗(yàn),為1表示奇校驗(yàn),為2表示偶校驗(yàn)。比如設(shè)置115200的波特率,一位停止位,無(wú)校驗(yàn)。發(fā)送“AT+UART=115200,0,0”即可。配置成功后會(huì)返回“OK” - AT+UART?
詢問(wèn)HC-05波特率。發(fā)送后會(huì)收到“+UART:波特率,停止位,校驗(yàn)”,換行加“OK”
配置完成功后,斷電重新上電,HC-05按照配置好的名字,配對(duì)密碼和波特率開始工作。此時(shí)LED快閃。
三、藍(lán)牙APP
這里介紹一個(gè)超級(jí)好用的藍(lán)牙APP——藍(lán)牙調(diào)試器。大概長(zhǎng)這個(gè)樣子,大家可以在應(yīng)用商店下載
這個(gè)藍(lán)牙調(diào)試器是一個(gè)大佬編寫的,我這里只是介紹一下使用方法。其他的詳細(xì)內(nèi)容,可以到大佬的原文查看提高開發(fā)效率-藍(lán)牙調(diào)試器。
為什么推薦這個(gè)藍(lán)牙調(diào)試器?個(gè)人覺(jué)得,它能夠在眾多藍(lán)牙調(diào)試器中脫穎而出,是因?yàn)樗С钟脩糇约涸O(shè)計(jì)GUI,提供了許多控件,比如常見(jiàn)的按鈕,文本框,可編輯文本框,以及一些滑動(dòng)條,遙桿和曲線圖等。支持自由設(shè)置位置,大小,功能十分強(qiáng)大。更重要的是,大佬提供了程序文件,對(duì)于想快速上手藍(lán)牙模塊,用手機(jī)與藍(lán)牙交互的小伙伴來(lái)說(shuō),十分友好。
四、實(shí)戰(zhàn)項(xiàng)目
下面我們以手機(jī)控制兩個(gè)LED亮滅,同時(shí)通過(guò)BH1750檢測(cè)周圍環(huán)境光照強(qiáng)度變化,返回到手機(jī)端顯示,并且能夠顯示光強(qiáng)變化曲線。
4.1 添加文件
第一步,先將大佬的文件添加到工程中。大佬的工程中的初始化函數(shù)已經(jīng)包含了串口的初始化,所以我們不需要再包含串口文件。
除此之外還要講BH1750相關(guān)文件添加進(jìn)來(lái),具體可見(jiàn)博主STM32外設(shè)系列BH1750篇,這里就不再做介紹。
4.2 配置需要傳遞的參數(shù)
根據(jù)項(xiàng)目要求,我們需要配置三個(gè)參數(shù),分別用來(lái)控制兩個(gè)LED亮滅,傳輸周圍環(huán)境光照強(qiáng)度。首先在程序中定義好這三個(gè)變量。
int gLed1Flag = 0; // LED1亮滅控制標(biāo)志位
int gLed2Flag = 0; // LED2亮滅控制標(biāo)志位
float gLingt = 0; // 周圍環(huán)境光照強(qiáng)度
定義好這些變量之后,我們需要配置一下文件中的接收和發(fā)送數(shù)據(jù)。打開大佬的.h文件,可以看到里面定義了許多類型的發(fā)送和接收變量。這里的發(fā)送接收是針對(duì)單片機(jī)來(lái)說(shuō)的,而不是手機(jī)。
#define TX_BOOL_NUM 0
#define TX_BYTE_NUM 0
#define TX_SHORT_NUM 0
#define TX_INT_NUM 0
#define TX_FLOAT_NUM 0
#define RX_BOOL_NUM 0
#define RX_BYTE_NUM 0
#define RX_SHORT_NUM 0
#define RX_INT_NUM 0
#define RX_FLOAT_NUM 0
我們需要單片機(jī)發(fā)送一個(gè)周圍環(huán)境的光照強(qiáng)度,數(shù)據(jù)類型為浮點(diǎn)型。需要接收兩個(gè)LED亮滅控制變量,數(shù)據(jù)類型為int型。我們?cè)趯?duì)應(yīng)的位置配置好對(duì)應(yīng)的變量數(shù)量,如下
#define TX_BOOL_NUM 0
#define TX_BYTE_NUM 0
#define TX_SHORT_NUM 0
#define TX_INT_NUM 0
#define TX_FLOAT_NUM 1
#define RX_BOOL_NUM 0
#define RX_BYTE_NUM 0
#define RX_SHORT_NUM 0
#define RX_INT_NUM 2
#define RX_FLOAT_NUM 0
4.3 獲取返回值
在使用手機(jī)APP控制LED亮滅時(shí),單片機(jī)需要接收到手機(jī)發(fā)送來(lái)的數(shù)值。接收程序如下
// 如果接收到APP端數(shù)據(jù)
if(readValuePack(&rxpack))
{
gLed1Flag = rxpack.integers[0];
gLed2Flag = rxpack.integers[1];
}
具體哪個(gè)值對(duì)應(yīng)哪個(gè)參數(shù),這些需要在手機(jī)端配置,放在下面介紹。
4.4 發(fā)送光照強(qiáng)度
單片機(jī)需要不斷地向APP端發(fā)送周圍環(huán)境光照強(qiáng)度數(shù)據(jù),程序如下
// 向APP發(fā)送周圍環(huán)境光照強(qiáng)度
txpack.floats[0] = gLingt;
sendValuePack(&txpack);
delay_ms(10); // 防止發(fā)送過(guò)快
需要注意的是,藍(lán)牙發(fā)送數(shù)據(jù)時(shí)如果需要一次發(fā)送多個(gè)數(shù)據(jù),一定要在兩次發(fā)送之間加10ms延時(shí),否則會(huì)造成發(fā)送失敗。
4.5 控制程序
包含兩部分內(nèi)容,一部分是通過(guò)BH1750獲取周圍環(huán)境光照強(qiáng)度,另一部分是LED亮滅控制函數(shù)。程序如下
// LED亮滅控制
if (gLed1Flag == 1)
{
Med_Led_StateCtrl(LED1,LED_ON); // 點(diǎn)亮LED1
}
if (gLed2Flag == 1)
{
Med_Led_StateCtrl(LED2,LED_ON); // 點(diǎn)亮LED2
}
if (gLed1Flag == 0)
{
Med_Led_StateCtrl(LED1,LED_OFF); // 熄滅LED1
}
if (gLed2Flag == 0)
{
Med_Led_StateCtrl(LED2,LED_OFF); // 熄滅LED2
}
gLingt = Med_Bh1750_GetLightIntensity(); // 獲取周圍環(huán)境光照強(qiáng)度
4.6 手機(jī)端頁(yè)面設(shè)計(jì)
根據(jù)項(xiàng)目要求,需要有兩個(gè)LED開關(guān),一個(gè)顯示周圍環(huán)境光照強(qiáng)度的文本框,還有一個(gè)波形顯示框。
4.6.1 新建調(diào)試工程
打開藍(lán)牙調(diào)試助手,選擇中間的“專業(yè)調(diào)試”,然后點(diǎn)擊加號(hào)新建調(diào)試工程。
4.6.2 設(shè)置通信變量
我們新建完調(diào)試工程后,需要先進(jìn)行通信設(shè)置。實(shí)際就是將我們手機(jī)APP與單片機(jī)通信時(shí)需要的變量配置好。
首先選中新建的調(diào)試工程,選擇“通信設(shè)置”
進(jìn)入之后可以看到如下頁(yè)面
這里的發(fā)送接收,只針對(duì)手機(jī)APPA而言的。
我們需要新建一個(gè)接收變量和兩個(gè)發(fā)送變量。接收變量為float型,發(fā)送變量為int型。這里的順序?qū)?yīng)我們單片機(jī)接收時(shí),變量在接收數(shù)組中的位置。
設(shè)置完收發(fā)變量后還需要設(shè)置一下通信模式。點(diǎn)擊最右邊的通信模式。選擇“僅操作控件時(shí)發(fā)送”即可。如下圖
至此,通信設(shè)置完成。
4.6.3 編輯控件
選中新建的調(diào)試工程,選擇“編輯控件”,即可進(jìn)入編輯頁(yè)面。
4.6.4 添加LED控制開關(guān)
進(jìn)入編輯控件頁(yè)面后,點(diǎn)擊加號(hào),添加一個(gè)開關(guān)。添加時(shí)會(huì)彈出頁(yè)面讓我們?cè)O(shè)置開關(guān)的信息
第一欄是選擇該變量是接收變量還是發(fā)送變量,第二欄是選擇變量類型。最后一欄是選擇關(guān)聯(lián)的變量。關(guān)聯(lián)的變量就是我們?cè)谕ㄐ旁O(shè)置中添加的變量。
選擇完成后需要設(shè)置開關(guān)參數(shù),設(shè)置打開和關(guān)閉時(shí)對(duì)應(yīng)的值
4.6.5 添加光照強(qiáng)度顯示控件
光照強(qiáng)度顯示控件我們選擇文本,操作與添加LED開關(guān)類似,注意鏈接好我們添加的光照強(qiáng)度變量即可,這里就不再做詳細(xì)介紹了。
項(xiàng)目要求能夠顯示周圍環(huán)境光照強(qiáng)度變化曲線。這里我們用Y-T一維曲線圖來(lái)顯示。添加之后鏈接我們添加的光照強(qiáng)度變量,設(shè)置好范圍即可,這里不再展示。
五、成果展示
首先用藍(lán)牙調(diào)試器搜索我們的HC-05進(jìn)行配對(duì)。配對(duì)完成后,在專業(yè)調(diào)試中找到我們新建的調(diào)試工程。點(diǎn)擊右側(cè)的開始按鈕,選擇我們的藍(lán)牙,就可以開始操作啦。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-661289.html
點(diǎn)擊開關(guān)可以控制LED的亮滅。文本框顯示當(dāng)前周圍環(huán)境光照強(qiáng)度。最下面顯示當(dāng)前周圍環(huán)境光照強(qiáng)度變化曲線。博主最近手邊沒(méi)有烙鐵,買來(lái)的BH1750沒(méi)有焊接排針,所以沒(méi)有連接。因此,顯示的光照強(qiáng)度值為0。
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-661289.html
到了這里,關(guān)于STM32外設(shè)系列—HC-05(藍(lán)牙)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!