藍牙BLE開發(fā)
這個文章記錄一下遇到的坑哈错负。。勇边。
背景
業(yè)務場景:某個傳感器設備所在的開發(fā)板(以下簡稱板子)只有USB接口犹撒,沒有藍牙接口,目前的方案是板子通過USB連接一個WINDOWS10的平板電腦(以下簡稱win平板)粒褒,WINDOWS10平板以藍牙的方式連接微信應用程序识颊,實現數據的上報。
具體情況:win平板現在可以實現把數據從板子讀取奕坟,然后存放到文件中祥款,但是還沒有實現文件到微信的數據傳送。
需求:將數據從WIN平板發(fā)送到微信程序中月杉。
分析
因為BLE節(jié)能和通用度高的原因刃跛,因此打算通過BLE的方式連接WIN平板與微信程序。這樣就要求WIN平板要作為外圍設備苛萎。先使用Java+Spring完成后臺操作桨昙,(經過折騰后臺簽名驗證,安全域名等)各種微信硬件平臺API+JSAPI都搞定腌歉,開始搞設備與外圍WIN平板的連接蛙酪。。
微信硬件開發(fā)平臺提供了AirSyncDebugger(ASD)可以用來檢測微信藍牙BLE廣播數據(AirSync協(xié)議)翘盖,來驗證數據包是否正確」鹑現在有意思的就來了。馍驯。阁危。
方案
win7 + VS+ C++ : 找了半天貌似只支持經典藍牙的編程方式,沒有找到和BLE廣播的相關API 汰瘫。狂打。。放棄(后來才知道win8之后才支持ble)
win10+VS+C++ :找了btnleapis.h與btnledef.h這兩個頭文件吟吝,這兩個頭文件的只提供了一些常量定義和把WIN平板作為中心設備的API 。颈娜。剑逃。 然后同樣無法實現廣播浙宜。。放棄
UWP+C#:方式蛹磺,這種情況下粟瞬,UWP的API是提供廣播相關的API,竊喜萤捆,馬上弄了一個DEMO裙品,弄完之后點擊Run的時候,提示讓我安裝windows mobile emulator俗或。市怎。。辛慰。我了個X区匠。。帅腌。
換設備驰弄。。速客。戚篙。。溺职。
iOS設備:查看了一下ios平臺上有相關廣播的API 岔擂,竊喜,繼續(xù)試辅愿,用的objective-c語言智亮,廣播API接受一個參數,[self.peripheralManager startAdvertising:self.advertisement]; 后面的self.advertisment是一個NSDictionary類型參數点待,通過這個變量定義廣播數據阔蛉,這個字典KEY大概是有三種,CBAdvertisementDataServiceUUIDsKey癞埠,CBAdvertisementDataLocalNameKey和CBAdvertisementDataManufacturerKey状原,然后看github上例子一般只用了前兩個參數,都沒有最后一個CBAdvertisementDataManufacturerKey苗踪,既然都提供了這樣一個KEY了颠区,根據微信AirSync的描述0xFF+2bytes+MAC地址拼成,扔到CBAdvertisementDataManufacturerKey對應的Value里面不就萬事大吉了嗎通铲。毕莱。。Airdebugger還是校驗不通過說不含有MAC地址或者沒以它結尾。朋截。最后嘗試了好幾次蛹稍。。發(fā)現廣播參數有沒有CBAdvertisementDataManufacturerKey這個KEY對應的Value廣播出來的數據包通過AirDebugger分析完全一樣部服,那個key廣播的時候會被無視掉唆姐,只是用來ios當中心設備時讀取廠商自定數據。廓八。這TM就蛋疼了奉芦。。如果廣播不出去那個數據就不遵循AirSync的要求剧蹂。声功。所以我估計這也是一個死路[doge]。国夜。
Andoird 5.1:Android平臺在4.3開始支持設備作為中心設備去連接外設减噪,4.1開始支持作為外圍設備,提供相關的API车吹,拿了一個huawei mate7 原來是emui3系統(tǒng)筹裕,刷到emui3.1正好兼容5.1 (找固件找了半天。媽的)窄驹。 然后連接MAC朝卒,通過Android Studio跑DEMO。乐埠。抗斤。那個設備獲取bluetoothadverise為空,大概是設備太老不支持丈咐?(這個方案還沒出結果瑞眼,要換更新的設備在試)
。棵逊。伤疙。。辆影。待續(xù)中徒像。。蛙讥。锯蛀。。次慢。旁涤。翔曲。。劈愚。部默。。造虎。。纷闺。