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