單片機(jī)藍(lán)牙app開發(fā)(手機(jī)藍(lán)牙app控制單片機(jī)作品)
本篇文章給大家談?wù)剢纹瑱C(jī)藍(lán)牙app開發(fā),以及手機(jī)藍(lán)牙app控制單片機(jī)作品對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。
在單片機(jī)上使用藍(lán)牙模塊控制手機(jī)app可以嗎?
當(dāng)然可以了。你看你是需要達(dá)到什么功能,是單片機(jī)控制手機(jī),還是手機(jī)控制單片機(jī)?通過藍(lán)牙模塊可以達(dá)到數(shù)據(jù)交互。
在單片機(jī)端藍(lán)牙模塊等于一個串口。
在手機(jī)APP端開啟藍(lán)牙客戶端,進(jìn)行數(shù)據(jù)處理即可。
藍(lán)牙通訊單片機(jī)需要什么軟件
藍(lán)牙通訊單片機(jī)需要藍(lán)牙模塊軟件。
上位機(jī),java開發(fā),主要的藍(lán)牙也有函數(shù),在UI加按鍵或者是顯示的東西,開啟子線程,在子線程里面執(zhí)行發(fā)送或者是接受數(shù)據(jù),網(wǎng)上也有實(shí)例代碼,改改就行了,不過關(guān)鍵還是你要能看得懂,否則就沒什么用。
應(yīng)用:
替代串口線:我用2個BF10-A藍(lán)牙模塊,一個作為主模塊+MAX3232(TTL轉(zhuǎn)RS232電平芯片),一個作為從模塊+MAX3232(TTL轉(zhuǎn)RS232電平芯片),設(shè)置對應(yīng)好的波特率。兩個模塊通過DB9接口分別連接到PC機(jī)。
兩臺PC機(jī)電腦之間可以通過串口調(diào)試工具進(jìn)行數(shù)據(jù)傳輸。和已有的藍(lán)牙適配器形成藍(lán)牙串口連接:我采用一個藍(lán)牙適配器連接電腦,使用IVT藍(lán)牙驅(qū)動,一個藍(lán)牙模塊BF10-A做為從模塊連接到我的單片機(jī)嵌入式系統(tǒng)。
使用BF10-A,IVT藍(lán)牙驅(qū)動軟件查找到BF10-A藍(lán)牙模塊、連接并創(chuàng)建串口復(fù)位。此時則可以通過串口工具和單片機(jī)進(jìn)行串口通信。
關(guān)于單片機(jī)通過藍(lán)牙將數(shù)據(jù)傳輸給手機(jī),并在app上面顯示出來怎么實(shí)現(xiàn)?
首先是藍(lán)牙通信,我想指出,如果你用的是藍(lán)牙模塊的話,那么它的單片機(jī)程序與串口的單片機(jī)程序差不多一樣,只要你會串口操作,藍(lán)牙也就解決了,如果不是用的藍(lán)牙模塊,另當(dāng)別論。
然后是接受端手機(jī)這邊,你應(yīng)該懂一些java東西,知道怎么調(diào)用底層程序,編寫讀取串口程序,根據(jù)發(fā)送的協(xié)議,把接受的數(shù)據(jù)轉(zhuǎn)化為十進(jìn)制就可以了.
擴(kuò)展資料
單片機(jī)采用51系列單片機(jī)用C51語言編寫,通過sprintf構(gòu)造JSON格式文件通過藍(lán)牙串口模塊發(fā)送到安卓手機(jī),簡要代碼如下:
sprintf(msg,"{\"RR\":\"%02x\"}\0",(unsigned int )RRtemp);
Serial_print(msg);
這里涉及到Serial_print()函數(shù)如下:
void Serial_print(char *msg)
{
while (*msg != '\0') {
S2BUF = *msg;
while ((S2CON S2TI) == 0);
S2CON = ~S2TI;
msg++;
}
}
Android 低功耗藍(lán)牙(Ble) 開發(fā)總結(jié)
Android 從 4.3(API Level 18) 開始支持低功耗藍(lán)牙,但是只支持作為中心設(shè)備(Central)模式,這就意味著 Android 設(shè)備只能主動掃描和鏈接其他外圍設(shè)備(Peripheral)。從 Android 5.0(API Level 21) 開始兩種模式都支持。
低功耗藍(lán)牙開發(fā)算是較偏技術(shù),實(shí)際開發(fā)中坑是比較多的,網(wǎng)上有很多文章介紹使用和經(jīng)驗總結(jié),但是有些問題答案不好找,甚至有些誤導(dǎo)人,比如 :獲取已經(jīng)連接的藍(lán)牙,有的是通過反射,一大堆判斷,然而并不是對所有手機(jī)有用,關(guān)于Ble傳輸速率問題的解決,都是默認(rèn)Android每次只能發(fā)送20個字節(jié),然而也并不是,,,下面進(jìn)入正文。
這里用的是 Android5.0 新增的掃描API,
這里說一下,如果做藍(lán)牙設(shè)備管理頁面,可能區(qū)分是否是已連接的設(shè)備,網(wǎng)上又通過反射或其他挺麻煩的操作,也不見得獲取到,官方Api 就有提供
與外圍設(shè)備交互經(jīng)常每次發(fā)的數(shù)據(jù)大于 mtu的,需要做分包處理,接收數(shù)據(jù)也要判斷數(shù)據(jù)的完整性最后才返回原數(shù)據(jù)做處理,所以一般交互最少包含包長度,和包校驗碼和原數(shù)據(jù)。當(dāng)然也可以加包頭,指令還有其他完整性校驗。下面分享幾個公用方法:
我自己封裝的一個BleUtil ,因為涉及跟公司業(yè)務(wù)關(guān)聯(lián)性太強(qiáng)(主要是傳輸包的協(xié)議不同)就先不開源出來了,如果這邊文章對大家有幫助反饋不錯,我會考慮上傳個demo到github供大家使用,
在這先給大家推薦一個不錯 Demo ,里面除了沒有分包,協(xié)議,和傳輸速率?;镜墓δ芏加校艺{(diào)試數(shù)據(jù)到打印到界面上了。最主要是它可以用兩個個手機(jī)一個當(dāng)中心設(shè)備一個當(dāng)外圍設(shè)備調(diào)試。
首先傳輸速率優(yōu)化有兩個方向,1 外圍設(shè)備傳輸?shù)紸ndroid 。2 Android傳輸?shù)酵鈬O(shè)備。
我在開發(fā)中首先先使用上面那位仁兄的demo調(diào)試,兩個Android 設(shè)備調(diào)試不延時,上一個成功馬上下一個,最多一秒發(fā)11個20字節(jié)的包。
后來和我們的藍(lán)牙設(shè)備調(diào)試時發(fā)現(xiàn)發(fā)送特別快,但是數(shù)據(jù)不完整,他藍(lán)牙模塊接收成功了,但是透傳數(shù)據(jù)到芯片處理時發(fā)現(xiàn)不完整,我們的硬件小伙伴說因為 波特率 限制(差不多每10字節(jié)透傳要耗時1ms)和藍(lán)牙模塊的buff (打印時是最多100byte,100打印的)限制,就算藍(lán)牙模塊每包都告訴你接收成功,也是沒透傳完就又接收了。后來通過調(diào)試每次發(fā)20K數(shù)據(jù),最后是 Android 發(fā)是 20字節(jié)/130ms 穩(wěn)定。給Android 發(fā)是 20字節(jié)/ 8ms 。 (天殺的20字節(jié),網(wǎng)上都是說20字節(jié)最多了)
后來看了國外一家物聯(lián)網(wǎng)公司總結(jié)的 Ble 吞吐量的文章(上面有連接),知道Android 每個延時是可以連續(xù)接收6個包的。就改為 120字節(jié)/ 16ms (為啥是16ms,不是每次間隔要6個包嗎,怎么像間隔兩次,這時因為波特率影響,多了5個包100字節(jié),差不多 我們的單片機(jī)透傳到藍(lán)牙模塊要多耗時不到10ms )
而Android 發(fā)數(shù)據(jù)可以申請 我們設(shè)備的mtu 來得到最多每次能發(fā)多少字節(jié)。延時還是130ms,即:241字節(jié)/ 130ms 提高12倍,這個速度還可以。
根據(jù)藍(lán)牙BLE協(xié)議, 物理層physical layer的傳輸速率是1Mbps,相當(dāng)于每秒125K字節(jié)。事實(shí)上,其只是基準(zhǔn)傳輸速率,協(xié)議規(guī)定BLE不能連續(xù)不斷地傳輸數(shù)據(jù)包,否則就不能稱為低功耗藍(lán)牙了。連續(xù)傳輸自然會帶來高功耗。所以,藍(lán)牙的最高傳輸速率并不由物理層的工作頻率決定的。
在實(shí)際的操作過程中,如果主機(jī)連線不斷地發(fā)送數(shù)據(jù)包,要么丟包嚴(yán)重要么連接出現(xiàn)異常而斷開。
在BLE里面,傳輸速度受其連接參數(shù)所影響。連接參數(shù)定義如下:
1)連接間隔。藍(lán)牙基帶是跳頻工作的,主機(jī)和從機(jī)會商定多長時間進(jìn)行跳頻連接,連接上才能進(jìn)行數(shù)據(jù)傳輸。這個連接和廣播狀態(tài)和連接狀態(tài)的連接不是一樣的意思。主機(jī)在從機(jī)廣播時進(jìn)行連接是應(yīng)用層的主動軟件行為。而跳頻過程中的連接是藍(lán)牙基帶協(xié)議的規(guī)定,完全由硬件控制,對應(yīng)用層透明。明顯,如果這個連接間隔時間越短,那么傳輸?shù)乃俣染驮龃蟆_B接上傳完數(shù)據(jù)后,藍(lán)牙基帶即進(jìn)入休眠狀態(tài),保證低功耗。其是1.25毫秒一個單位。
2)連接延遲。其是為了低功耗考慮,允許從機(jī)在跳頻過程中不理會主機(jī)的跳頻指令,繼續(xù)睡眠一段時間。而主機(jī)不能因為從機(jī)睡眠而認(rèn)為其斷開連接了。其是1.25毫秒一個單位。明顯,這個數(shù)值越小,傳輸速度也高。
藍(lán)牙BLE協(xié)議規(guī)定連接參數(shù)最小是5,即7.25毫秒;而Android手機(jī)規(guī)定連接參數(shù)最小是8,即10毫秒。iOS規(guī)定是16,即20毫秒。
連接參數(shù)完全由主機(jī)決定,但從機(jī)可以發(fā)出更新參數(shù)申請,主機(jī)可以接受也可以拒絕。android手機(jī)一部接受,而ios比較嚴(yán)格,拒絕的概率比較高。
參考:
在iOS和Android上最大化BLE吞吐量
最大化BLE吞吐量第2部分:使用更大的ATT MTU
怎么實(shí)現(xiàn)手機(jī)APP與單片機(jī)(搭載藍(lán)牙的單片機(jī)) 之間的數(shù)據(jù)傳遞 手機(jī)軟件可以接收來自單片機(jī)的數(shù)據(jù)并顯示
把串口藍(lán)牙模塊接在單片機(jī)上,再從手機(jī)操作藍(lán)牙配對鏈接,就可以實(shí)現(xiàn)單片機(jī)和手機(jī)上的藍(lán)牙串口app互發(fā)數(shù)據(jù)了,數(shù)據(jù)直發(fā) 沒有協(xié)議
用java編個控制空調(diào)開關(guān)的andriod軟件,用單片機(jī)紅外線控制空調(diào),手機(jī)端用藍(lán)牙與單片機(jī)連接,軟件如何編程?
這不是一個人能做的 這設(shè)計到多個領(lǐng)域:
要為你這個功能寫一個app應(yīng)用,就是一個小工具,一般是用java
單片機(jī)編程和開發(fā),和藍(lán)牙模塊通訊,和紅外通訊,一般用C和匯編開發(fā)
如果涉及藍(lán)牙協(xié)議和通訊格式 還需要處理android系統(tǒng),在linux平臺操作
你一個人是做不了這么多事情的,方案公司做這個東東都要一個月
關(guān)于單片機(jī)藍(lán)牙app開發(fā)和手機(jī)藍(lán)牙app控制單片機(jī)作品的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。