暑假在家,某寶上買了幾個(gè)模塊來玩一玩,其中第一個(gè)用上的就是藍(lán)牙串口模塊。
對(duì),你沒有看錯(cuò),就是這個(gè)玩意兒:
話說雖然這個(gè)東西僅僅只是把平時(shí)單片機(jī)的有線串口變成了無線的,但我感覺還是很有魔力的,突然感覺提升了一大個(gè)檔次,畢竟它能和我的手機(jī)有了溝通渠道,MM再也不用擔(dān)心我的單片機(jī)孤獨(dú)了!哈哈。。。
這藍(lán)牙串口模塊剛到手,第一件事----點(diǎn)燈!這是所有單片機(jī)初學(xué)者最愛干的事。
前段時(shí)間借了一堆關(guān)于Android APP開發(fā)的書,照著寫了個(gè)猜字游戲的程序就再也沒有翻動(dòng)過,要寫個(gè)藍(lán)牙數(shù)據(jù)傳輸?shù)某绦蛭疫€不敢想,于是我到WDJ上下了個(gè)現(xiàn)成的程序,為人民服務(wù)!我也為大家上傳上來吧:
有了她,你就可以用你的Android設(shè)備與藍(lán)牙串口模塊愉快地玩耍了。
*****************************************************************************************************
貌似冷落了干活最多、最默默無聞的MCU了。
現(xiàn)在隆重介紹我們最核心的成員----STM32F401RE最小系統(tǒng)板(帶ST-LINK)
這塊板子是為了參加ST公司的ARM校園創(chuàng)新比賽申請(qǐng)的,盡管各個(gè)論壇,眾多推手不斷地夸它如何如何地Perfect(最近在惡補(bǔ)英語,這里當(dāng)默寫了,也幫大家復(fù)習(xí)復(fù)習(xí)),但我卻很討厭她的拖泥帶水,考慮得過于周到反而讓我用著很是不方便。
51直接硬性過渡到ARM讓我到現(xiàn)在還難受著,更何況是直接就到F4,網(wǎng)上資料匱乏,只能就著F1的資料來弄,學(xué)習(xí)很慢。。。
********************** 跑題了*********************
藍(lán)牙串口模塊接到了開發(fā)板的USART1端口,EN端子由于占時(shí)不用用到AT指令,先懸空;STATE端子可以接個(gè)LED到地指示連接狀態(tài),我沒連,就只是用到2個(gè)電源腳,2個(gè)串口數(shù)據(jù)端子。
連上USB,電源指示燈亮起,硬件電路就算OK了。
************************************************************************************************
硬件講完來軟的:
藍(lán)牙串口助手工具打開界面是這樣(昨天剛升級(jí),多了幾個(gè)按鍵和功能)
這是未連接狀態(tài):
搜索設(shè)備:
這是連接到藍(lán)牙串口的狀態(tài):
現(xiàn)在說下,如何利用這個(gè)APP來實(shí)現(xiàn)開關(guān)一個(gè)LED的簡(jiǎn)單功能的。
我在這個(gè)APP里設(shè)置了兩個(gè)按鍵,在設(shè)置里我可以設(shè)置任意一個(gè)按鍵的鍵碼,當(dāng)我按下某個(gè)按鍵時(shí),手機(jī)自帶的藍(lán)牙模塊便會(huì)以藍(lán)牙的數(shù)據(jù)通信協(xié)議發(fā)送這個(gè)按鍵定義的鍵碼到已連接的藍(lán)牙設(shè)備上,當(dāng)然這個(gè)鍵碼就由開發(fā)者自己定義了。
但是還記得紅外遙控實(shí)驗(yàn)里的“引導(dǎo)碼”嗎?我自己給它起了個(gè)名字:同步頭,它是標(biāo)志一幀數(shù)據(jù)的起始點(diǎn),如果沒有這個(gè)東西,我們沒法從一連串接收到的數(shù)據(jù)中提取出控制信號(hào);NEC標(biāo)準(zhǔn)的紅外遙控編碼方式里用了9ms+4.5ms的同步頭來作為一幀數(shù)據(jù)的開始,它與數(shù)據(jù)0和1信號(hào)的區(qū)別特別大,所以抗干擾能力十分的強(qiáng),一般不會(huì)出現(xiàn)誤碼的問題;而本次使用的藍(lán)牙串口模塊是單純的UART數(shù)據(jù)傳輸,不能夠自己定義一個(gè)類似于紅外遙控的同步頭,所以我就直接利用一個(gè)或者幾個(gè)字節(jié)的數(shù)據(jù)來作為同步頭。簡(jiǎn)單舉個(gè)例子,比如我以0xaa作為同步頭,那么我設(shè)置每按下一次“ON”按鍵手機(jī)藍(lán)牙就發(fā)送0xaa 0xa0,按下“OFF”就發(fā)送0xaa 0x0a,那我的數(shù)據(jù)是不是就被0xaa分開,已經(jīng)不是那么亂了,我可以在接收到這些數(shù)據(jù)后通過程序判斷0xaa后的數(shù)據(jù)就是我的操作碼,當(dāng)然如果是這種情況下,0xaa本身就不能作為操作碼來用了,針對(duì)這個(gè)問題,解決很簡(jiǎn)單,我多加幾個(gè)字節(jié)作為同步頭不就OK啦?按下“ON”,我發(fā)送0xa5 0x5a 0xa0,按下“OFF”,我發(fā)送0xa5 0x5a 0x0a不就完美解決了,當(dāng)然也可以多加幾個(gè),以提高抗干擾能力,至于加多少合適,就靠自己測(cè)試了,我覺得加3個(gè)就基本萬無一失了。
當(dāng)然,有的人還喜歡加“同步尾”,就是在操作碼后加幾個(gè)字節(jié)的數(shù)據(jù),本質(zhì)上和同步頭一樣,看大家的喜好了。
下面這就是F4的點(diǎn)亮、熄滅一個(gè)LED的整個(gè)工程文件(由于本人是一邊學(xué)習(xí)F4一邊弄這個(gè)東西的,所以程序里有些東西是沒用的,學(xué)習(xí)F4的朋友可以以該工程作為模板來用):
USART1(串口發(fā)送、中斷接收、藍(lán)牙串口控制點(diǎn)亮熄滅LED、TIM2定時(shí)中斷).zip