天天看點

關于微信小程式上BLE藍牙開發的一些記錄

最近經常搞這個,有些點還是記錄一下。

1、關于子產品。我用的都是BLE透傳子產品,即:子產品通過藍牙接口收到的資料會轉發到一個序列槽上,一般是TTL序列槽,同時,從序列槽收到的資料會轉發到藍牙接口上。這個序列槽就可以連在裝置上。

2、關于長資料分包的問題。藍牙子產品有個參數規定了每個資料包長度的最大值,預設值一般是20位元組。超過這個長度的資料不接受。是以,小程式向藍牙寫入資料時,如果資料長度超過了這個值,必須拆分成多次發送。裝置向向子產品序列槽中寫入資料時也有這個要求,并且,兩次寫入操作之間要有時間間隔。我測試的結果是:如果子產品設定值時20位元組,那麼,兩次發送資料的間隔要10ms。小程式向藍牙寫資料時不用加間隔(但仍然要分包),我估計微信或者作業系統已經做過處理。裝置向子產品序列槽發資料時,有些子產品需要分包和發送間隔,有些子產品不需要分包發送,看具體的子產品特性。

3、關于開發中用得着的工具,至少手機上得有個GATTBrowser之類的吧。可以看各種設定,也可以收發資料。吐槽一下BLE調試寶,功能和GATTBrowser類似,隻不過廣告太多了,而且貌似不登入還不給發資料。

4、BLE子產品的供貨商還是比較多的,但不同的子產品還是有一些差別,開發之前要好好看廠商提供的源碼。

5、關于BLE子產品的服務和特征值。服務和特征值是BLE開發相關的特有概念。對于透傳BLE,每個廠商都會通過子產品中的“服務+特征值”的特定組合提供資料收發通道。注意,不同的廠商使用的方法是不同的。某些廠商,通過一個服務下的兩個特征值分别實作收發,也有的用兩個服務+特征值的方式分别實作收發。每個特征值有唯一的通路方法:read,write,notify,它們是互斥的。是以,開發時首先要搞清楚發送資料的服務+特征值是什麼,接收資料用的服務+特征值是什麼。可以通過看廠商提供的例子,也可以直接用手機上的GATT工具來看。

6、小程式搜尋藍牙的過程也要多注意。第一,windows平台下,用小程式開發工具仿真是不能連接配接藍牙。第二,通過小程式開發工具的“真機調試”和小程式釋出後在手機上運作的特形是不一樣的。操作過程都一樣,無非是:

打開藍牙-》搜尋-》擷取裝置清單-》周遊裝置清單,找到目标裝置-》連接配接-》收發資料。

需要注意的點是:

a、連續操作之間要加适當的延遲。比如打開藍牙成功了,停1000ms再開始搜尋;

b、打開藍牙和關閉藍牙,開始搜尋和停止搜尋,都要成對調用;

c、如果搜不到需要的裝置,要多試幾次。所有的fail都增加一定數量的重試是比較保險的;

d、開始搜尋後,在擷取了裝置清單和周遊過之後再停止搜尋,否則有可能得不到需要的結果。