藍牙app開發技巧(藍牙模塊app開發)
本篇文章給大家談談藍牙app開發技巧,以及藍牙模塊app開發對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。
如何使用Android藍牙開發
Android平臺支持藍牙網絡協議棧,實現藍牙設備之間數據的無線傳輸。本文檔描述了怎樣利用android平臺提供的藍牙API去實現藍壓設備之間的通信。藍牙具有point-to-point 和 multipoint兩種連接功能。
使用藍牙API,可以做到:
* 搜索藍牙設備
* 從本地的Bluetooth adapter中查詢已經配對的設備
* 建立RFCOMM通道
* 通過service discovery連接到其它設備
* 在設備之間傳輸數據
* 管理多個連接
基礎知識
本文檔介紹了如何使用Android的藍牙API來完成的四個必要的主要任務,使用藍牙進行設備通信,主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數據。
所有的藍牙API在android.bluetooth包中。實現這些功能主要需要下面這幾個類和接口:
BluetoothAdapter
代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。
BluetoothDevice
代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 (其信息是封裝在 bluetoothsocket 中) 。
BluetoothSocket
代表了一個藍牙套接字的接口(類似于 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。
BluetoothServerSocket
代表打開服務連接來監聽可能到來的連接請求 (屬于 server 端) , 為了連接兩個藍牙設備必須有一個設備作為服務器打開一個服務套接字。 當遠端設備發起連 接連接請求的時候,并且已經連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。
BluetoothClass
描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等??梢杂盟鼇磉M行一些UI上的提示。
BluetoothProfile
BluetoothHeadset
提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。
BluetoothA2dp
定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 “A2DP的”代表高級音頻分配模式。
BluetoothHealth
代表了醫療設備配置代理控制的藍牙服務
BluetoothHealthCallback
一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類并實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。
iOS藍牙開發:藍牙連接和數據讀寫
當下藍牙開發可謂是越來越火,不論是智能穿戴的興起還是藍牙家具,車聯網藍牙等等,很多同學也會接觸到藍牙的項目,我從事藍牙開發也有一段時間了,經手了兩個項目。廢話不多說了,先向大家簡單的介紹有關藍牙開發的知識。藍牙低能耗(BLE),以下介紹的都是圍繞iOS的 CoreBluetooth/CoreBluetooth.h 框架展開的。
藍牙開發分為中心者模式和管理者模式:1.常用的(其實99.99%)就是使用中心者模式作為開發,就是我們手機作為主機,連接藍牙外設;2.管理者模式,這個基本用到的比較少,我們手機自己作為外設,自己創建服務和特征,然后有其他的設備連接我們的手機。
在做藍牙開發之前,最好先了解一些概念:
服務(services):藍牙外設對外廣播的必定會有一個服務,可能也有多個,服務下面包含著一些特征,服務可以理解成一個模塊的窗口;
特征(characteristic):存在于服務下面的,一個服務下面也可以存在多個特征,特征可以理解成具體實現功能的窗口,一般特征都會有value,也就是特征值,特征是與外界交互的最小單位;
UUID:可以理解成藍牙上的唯一標識符(硬件上肯定不是這個意思,但是這樣理解便于我們開發),為了區分不同的服務和特征,或者給服務和特征取名字,我們就用UUID來代表服務和特征。
藍牙連接可以大致分為以下幾個步驟
1.建立一個Central Manager實例進行藍牙管理
2.搜索外圍設備
3.連接外圍設備
4.獲得外圍設備的服務
5.獲得服務的特征
6.從外圍設備讀數據
7.給外圍設備發送數據
其他:提醒
首先我們先導入系統的BLE的框架
#import CoreBluetooth/CoreBluetooth.h
必須遵守2個協議
CBCentralManagerDelegate, CBPeripheralDelegate
/** 中心管理者 */
@property (nonatomic, strong) CBCentralManager *cMgr;
/** 連接到的外設 */
@property (nonatomic, strong) CBPeripheral *peripheral;
1.建立一個Central Manager實例進行藍牙管理
2.搜索外圍設備 (我這里為了舉例,采用了自己身邊的一個手環)
3.連接外圍設備
4.獲得外圍設備的服務 5.獲得服務的特征
6.從外圍設備讀數據
7.給外圍設備發送數據(也就是寫入數據到藍牙)
這個方法你可以放在button的響應里面,也可以在找到特征的時候就寫入,具體看你業務需求怎么用啦
其他:提醒
有那么多的特征,我們怎么知道哪些特征是用來讀數據的,哪些是用來寫入的,哪些是需要訂閱之后再讀的呢?
如果你們硬件工程師事先告訴你了,或者有完成的開發文檔,那么就可以直接知道了,否則你就需要自己去查看特征的屬性,推介可以使用下第三方的app——LightBlue,讓你更能清楚的看到你藍牙里面的服務,特征,特征的屬性。
其他后續有關文章,我會慢慢整理發出來,我也可以回答相關的問題,有錯誤的地方可以幫忙指出來呦!
iOS藍牙開發相關知識點和注意事項
總結一下藍牙開發相關的知識點和注意事項,做個筆記,也希望你們能少踩坑
(公司部分藍牙項目為混編項目,藍牙相關處理均采用了Objective-C,故本文??均采用OC,Swift處理相同)
藍牙4.0包含兩個藍牙標準,它是一個是 雙模 的標準,它包含 傳統藍牙部分(也稱經典藍牙) 和 低功耗藍牙部分(BLE) , 二者適用于不同的應用場景和應用條件。他們的特點如下
所以藍牙4.0是集成了傳統藍牙和低功耗藍牙兩個標準的,并不只是低功耗藍牙
藍牙4.0支持兩種部署方式: 雙模式 和 單模式 ,雙模同時支持經典藍牙和低功耗藍牙,而單模則只支持其中一種。
二者更多細節詳見: 傳統藍牙和低功耗藍牙的區別
iOS中藍牙相關功能都封裝進了 CoreBluetooth 類中,其中有幾個常見的參數和概念
具體API參考 CoreBluetooth藍牙開發
保存到數組中的設備可通過 UUID 來進行區分。從 iOS7之后蘋果不提供外設的mac地址,外設的唯一標識換成了由mac封裝加密后的UUID,需要注意的是不同的手機獲取同一個外設的UUID是不同的,所以在不同手機之間UUID不是唯一的,但在本機上可以作為唯一標識(特殊情況手機刷機后也會改變UUID)。
如何獲取Mac地址
一般使用場景是根據Mac地址區分某個外設
注意點:
寫入數據時可能會遇到需要分包發送的情況,我們可以通過下面的API或許當前特征支持的最大的單條寫入長度
maxLength 一般取決于藍牙模塊內部接收 緩沖區 的大小,很多硬件設備這個緩沖區的大小是 20 字節, 這個大小也和特征的寫入權限有關,像具有寫入權限 withResponse 類的特征其大小一般為 512 字節,當然這些都是取決于設備測的設置;
當我們單次發送的數據字節長度大于 maxLength 時,我們就需要采用分包的方式來發送數據了,
分包發送的邏輯類似于下面
這邊延時主要是設備側的接收模塊接收數據以及處理能力有限
外圍設備測和中心設備(大部分情況下是手機)保持藍牙連接的狀態下,如果長時間不產生交互,藍牙就會斷開,所以為了保持兩者持續的連接狀態,需要做?;钐幚?,也就是需要持續的發送心跳包(watchdog)。相應的處理是使用一個定時器定時向設備側發送符合設備協議格式的心跳包。
斷開連接很簡單,只需要調用 [self.centralManager cancelPeripheralConnection:peripheral] 傳入需要斷開連接的設備對象就行了。斷開連接時會自動調用 centralManager:didDisconnectPeripheral:error: 代理方法。
按照之前的慣例,當error為nil時表示斷開成功,error不為nil時斷開失敗。這種理解是錯誤的。
當你調用 cancelPeripheralConnection: 方法(主動斷開)斷開連接時error為nil ; 沒有調用這個方法(異常斷開)而斷開時error返回的是異常斷開的原因。也可以理解為主動調用斷開連接方法一定會斷開
接下來就是斷開重連的問題了,對藍牙功能進行封裝時肯定少不了斷開重連。首先斷開時可通過上面的代理方法的error是否為nil判斷是否是異常斷開,一般情況下異常斷開時是需要重連的
原因就是當設備斷開連接后 peripheral.services 為nil了,當然 service.characteristics 也是nil,所以需要在斷開連接時把保存這個設備對應的服務和特征全部清除,然后在連接成功時重新過一遍發現服務和發現特征的流程就好了。
iOS7 開始,Apple加入了Beacon圍欄檢測的API, ( iBeacon-維基百科 ), 其工作方式是,配備有低功耗藍牙(BLE)通信功能的設備使用 BLE 技術向周圍發送自己特有的 ID,接收到該 ID 的應用軟件會根據該 ID 采取一些行動。比如,在店鋪里設置 iBeacon 通信模塊的話,便可讓 iPhone 和 iPad 上運行一資訊告知服務器,或者由服務器向顧客發送折扣券及進店積分, 或者公司的手機打卡,只要手機靠近打卡器一定范圍,手機測就向打開器發送打卡信息,從而自動打卡。這種場景還有很多。 其中一個最重要的功能就是App的喚醒功能(殺死后也能喚醒)
舉一個我們的例子,我們的產品業務場景就是在進入車輛以后,需要使用藍牙連接我們的后裝車載設備以采集車輛信息和駕駛行為行程等,這里有一個問題就是在App被殺死的情況下如何喚醒App, 因為不可能要求用戶每次都主動去打開App,這樣體驗太差。我們的做法是通過iBeacon,當我們的車輛點火以后,設備測通電,發出 iBeacon廣播 ,App實現監聽iBeacon相關功能后就可以喚醒我們App,然后在相應的回調的處理一些事情,比如通過藍牙連接設備。這里的前提條件是我們的硬件設備測包含iBeacon模塊,具有iBeacon功能,而且對iBeacon的廣播頻率也有一定的要求,長了可能喚醒的功能會不穩定,官方建議的好像是100ms,頻率超高越耗電,但可以讓手機或其它監聽設備越快地發現iBeacon。標準的BLE廣播距離是100m,這使Beacon在室內位置跟蹤場景下的效果更理想。
關于iBeacon更多的使用及介紹請參考
蘋果核 - iOS端近場圍欄檢測(一) ——iBeacon
iBeacon技術初探
如何開發簡單的調試藍牙app
分兩種情況:
你懂技術,安卓JAVA或蘋果OC。有一定的技術基礎,并且愿意去學習和嘗試,簡單的藍牙app其實真的簡單,就是通過藍牙協議進行軟硬件聯調,指令也就那幾條,只要調通就好了。
不懂技術。那就百度一家app技術公司去咨詢,然后把項目外包給他們,當然一定要貨比三家。
藍牙app開發技巧的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于藍牙模塊app開發、藍牙app開發技巧的信息別忘了在本站進行查找喔。