談談幾個月以來開發android藍芽4.0 BLE低功耗應用的感受,註明下時間:2012-10-17寫的部落格,後期更新的也註明了時間的。開始對藍芽4.0的各種特性和各種應用情境的美好描繪充滿了嚮往,但願望很美好,現實很骨幹。在這幾個月中遭遇了很多挫折和痛苦的折磨,相當的難熬,android2.3的沒有ble的API,android4.0系統有個HDP的API,把新買的XT910刷了系統到4.0以後仍然串連不上,後來想刷回去都刷不了,手機就此廢了,只能自己掏錢重新買一個xt910。搜尋到博通的開源SDK但需要手機add-on功能的,根本就沒法用,經過多方多次搜尋才找到摩托羅拉的SDK開發包,折騰了一個多月才第一次串連上藍芽4.0的裝置,但開發包的例子程式是個雞筋,有很多問題很多地方需要最佳化處理才能使用,又整了一個多月才最終做出了一個勉強可以使用的防丟器簡單應用產品。雖然現在開發出了幾個應用,但藍芽4.0不穩定,單片機硬體不穩定,手機底層API不穩定,尤其是android上目前只能在摩托羅拉刀鋒系列2.3版本上才能使用,升級到4.0都不能使用,摩托羅拉本身銷量就不大,前幾個月有進行了大裁員想獲得大的市場份額更加渺茫了,特別是在中國市場份額只會越來越小,逐漸給人們淡忘,甚至再次給出售消失這個品牌,所以老闆都不願意再投入開發了,只能坐等三星成熟的開發包出來再做了。 目前有藍芽4.0功能的手機就只有幾款,摩托羅拉的刀鋒系列、HTC1x和三星GS3,HTC1x和三星GS3雖然有藍芽4.0的硬體裝置但遲遲沒有成熟相關SDK可以進行開發,開源的博通BLE SDK開發出來的沒有手機可以使用。目前市場上銷量最好的android藍芽4.0的就是三星GS3,但系統本身的藍芽功能連搜尋BLE的裝置都搜尋不到,更別說串連使用了,持續關注了幾個月也只有些零散的資料有些牛人整出了些framework但需要root的使用者才能使用,跟蘋果需要越獄一樣,買GS3這種手機的人除了開發人員估計很多都不會root的,因為一root就失去了保修服務。最近有看到了些希望,有人用三星的開發包弄出可以搜尋到所有藍牙裝置的應用了,但沒有真機測試還不能確定是否可以使用。
話說iPhone的版本也只有iPhone4S以上的手機才可以使用,但ios5升級到ios6系統後也是有驗證bug的,導致手機app無法下髮指令資料到藍牙裝置,所以需要互動的BLE應用都沒法使用,iPhone5預設的系統是ios6應該也是用不了的,而且功耗比ios5的大很多,也只能坐等蘋果升級系統,不過蘋果由於閉源和開發投入比較大升級日期應該不會太久,應該等幾個月就可以解決了。(後註:不出所料很快就出ios6.0.1版本解決了wifi串連等問題了,同時出ios6.1bate版本)
android的就蛋痛了,各個廠商的都定製成不一樣的,各個系統版本上也有差異,相容性很難保證,螢幕大小也差別非常大,開發廣泛使用的應用在相容性上就浪費了很多精力,而需要根據各個廠商提供的不同sdk開發的應用就只能適應某一類手機了,不同廠商的基本上都不相容得重新開發了。
另外iPhone手機的藍芽是不能夠和android手機的藍芽通訊的,而且iPhone除了藍芽4.0以外其他版本的藍芽外設需要通過蘋果的認證才能使用的,除非大廠商大批量生產否則不可能通過認證的,當然也可以再加一個認證晶片上去解決。所以很多小公司,解決方案的公司做iPhone的應用只能做藍芽4.0的,android的則沒有這個限制。
另外當初就搜尋到健康類的應用有人做出產品的 但不是基於藍芽4.0低功耗的 還是用藍芽2.1的spp協議來做的,藍芽2.1或者3.0的耗電是個比較大的問題,一些小外設,需要用紐扣電池的應用就無法真正使用,對一些創意產品如果需要經常換電池或充電對使用者體驗都會大打折扣,成本也會大大提高。
相對wifi和zigbee無線方案,藍芽和無線射頻模組nRF24l01成本會低很多,wifi的好處是可以比較方便實現遠端控制,距離比較遠,訊號也相對比較穩定。
補充內容:
經過不斷努力終於可以讓三星的支援BLE了,HTC1X,moto這幾個主流藍芽4.0的android都可以開發了,但估計以後只會先開發三星銷量大的了,不同廠商底層差別太大了。
另外ios6.0可以把iPhone手機當從裝置了,可以兩台iPhone通過藍芽通訊傳資料了,有點類似spp協議,但android的藍芽4.0的沒有看到相關的api。
現在LG出的google nexus 4 也支援ble藍芽4.0了,但目前也沒有對應的api和sdk ,小米2也支援BLE 藍芽4.0了,由於小米的rom是開源的研究起來估計輕鬆點,只是使用者量太小的話就沒必要花精力專門搞了。
ble的發展變化比較快,之前收藏的很多網址現在都訪問不了了,更新或者作廢了
-------------------------------------------------------------------------
補充內容2:
http://processors.wiki.ti.com/index.php/Category:BluetoothLE
這個是TI的wiki上的文章,上面有moto和HTC的例子程式的,但支援不全面,之前的描述是
MotoRAZRAndroidBLEDemo Obsolete. Updated Motorola BLE SDK with new API is not compatible.
HTC1X BLE API - Complete BLE API for HTC1X (European version only!) NEW!
現在有變成下面的了
MotoRAZRAndroidBLEDemo Obsolete. Updated Motorola BLE SDK with new API is not compatible.
HTC1X BLE API - Complete BLE API for HTC1X (European version only!) Obsolete. Updated Android SDK is not 100% compatible.
三星4.0.4可以搜尋到ble裝置,但串連有問題,需要升級到android4.1.1以後才行
nordic 發布了兩個版本的nRF的app在google play上的(心率計和防丟器在一個應用裡),一個摩托羅拉的,一個三星gs3的,可以下載了反編譯參考下。
請不要問我怎麼下載apk、怎麼反編譯和怎麼用這個的,直接下載串連不是nordic的產品不一定能成功,我自己的xt910和gs3手機串連自己公司開發的csr1000做的藍芽4.0的產品就都沒成功過,聽說TI的可以直接連接上,但也讀不到資料。
但由於他沒有混淆,寫法還是值得參考的。給出Samsung Galaxy S3 and Samsung Note 2 app的串連地址:
https://play.google.com/store/apps/details?id=com.nordic.nordicbleapp&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5ub3JkaWMubm9yZGljYmxlYXBwIl0.
The nRF Utility App is a tool to demonstrate Bluetooth Smart connection to Samsung Galaxy S3. The App enables you to connect to different Bluetooth Smart accessories such as wireless heart rate monitors and proximity tags. This app complements Nordic Semiconductor’s nRF8000 and nRF518 Series Bluetooth Smart solutions, compatible with Bluetooth v4.0.
Bluetooth Smart support for:
- Heart rate monitor
- Proximity tag
Note:
Samsung Galaxy S3 and Samsung Note 2 are currently supported handsets.
Miminum Supported Android Version is Jelly Bean
摩托羅拉現在能訪問的心率計sdk網址:
http://www.motorola.com/sites/motodev/library/bluetooth_apis.html
------------------------------------------------------------------------------
Open Bluetooth Low Energy API
http://android-btle.github.com/framework/
這個是博通的開源的api 需要root許可權才能用的,使用者需要像精簡版rom增加google maps的add-on那樣增加相關檔案到手機系統裡面後才能用,除了需要root外對使用者要求也比較高。
最近發現三星 Galaxy S3 4.1.1底層ble api的問題也很多,藍芽硬體很不穩定,串連失敗後用系統設定裡面關閉開啟藍芽都經常會導致手機重啟,用代碼延遲重啟藍芽幾乎都是導致手機重啟的,這種情況在串連異常後讓人措手無策,需要用各種延時處理來避免異常和手機重啟也導致了自動連接延時緩慢也很無奈,無法完全控制底層。摩托羅拉的雖然問題多但用TI的藍芽硬體倒還穩定些,可以用代碼重啟藍芽來解決各種異常,不過代碼量和代碼複雜度比三星的多了很多。
摩托羅拉的ble sdk支援裝置非安全模式,gs3的不支援,非安全模式下無法bond也就無法串連了。
==========================
2013-01-17 補充
最近有不少人找我要代碼和開發,這裡說明下,ble app的開發需要跟藍芽工程師配合才能進行的,每個晶片廠商的底層通訊可能不一樣的,同樣晶片不同sdk版本的結果也是不一樣的,目前做解決方案比較多的是TI的晶片,我做的是csr的,還有些人用nordic的,或者博通等其他牌子的,ti能用的app換到csr做的裝置不一定能用,同樣的防丟器可能每個公司做的藍芽模組都不一樣的,最終使用可能只能匹配自己的藍芽模組的產品。這裡說明下本人時間精力有限,同時基於商業競爭的因素,不能免費提供demo代碼和支援人員。
2013-02-01 補充
現在開發完成了幾個 三星 Galaxy S3 版本(需要升級到android4.1.1版本)的 BLE 應用了(防丟器、心率計、計步器、體重秤、智能手錶、智能燈座),正常情況下使用沒有問題,但發現三星gs3手機在discoverCharacteristics後會卡住 導致手機假死狀態 不能做其他動作,儘管在串連的時候使用非同步Service也一樣,使用了其他非藍芽的app也經常出現這種情況,感覺是手機底層系統的問題,完全沒有發揮出四核多線程的優勢。代碼異常自動重啟跟xt910一樣甚至更頻繁。
2013-02-20 補充
三星終於開了一個ble的專欄出來了 不過很快就廢棄了 估計問題太多了不敢公布
http://developer.samsung.com/ble
[Samsung BLE SDK] Samsung
BLE SDK 2.0
betaSAMSUNG Developers ble
在百度搜尋 藍芽4.0 開發,安卓 藍芽4.0 開發,android 藍芽4.0開發 android ble 等關鍵字都可以搜尋到這篇部落格,也有很多人加入QQ群討論了。
2013-02-25 補充
最近和朋友交流瞭解到gs3升級到android4.1.2以後api和android4.1.1有些差別,比如中斷連線後不會自動連接幾次了。另外note2和gs3的底層也有些差別,有些bug不一樣,同樣很多問題,估計針對gs3開發的在note2上不能很好的運行,這個相容性就相當讓人惱火了,ios的開發就文檔容易多了。
2012-03-12補充
今天試了下gs3的用4.0.4的也可以串連收發資料 可以以4.1.1為基準開發相容其他系統版本使用。
發現TI的很多人會彈出配對提示框,藍芽那邊設定為非安全連線的,這樣就沒辦法做到自動連接了,很多功能都不能實現了。我用CSR的沒有遇到過,ios上的不會彈出,ios和android的底層處理方式不一樣的。最近發現做ble的人越來越多了,有時間可能再整理一篇具體開發相關的文章出來。
2013-03-27 補充 上傳兩張三星ble api的圖片:
2013-04-10 補充
最近測試發現NFC嚴重影響ble使用,試了幾次了100%有影響,而且重啟藍芽還會導致手機自動重啟
android的ble藍芽受限制太多了不能同時和wifi NFC一起使用,這個要在產品說明裡面標註下,不然出問題使用者都不知道怎麼回事
Bluetooth may conflict with WIFI and NFC.Advised to turn off WIFI and NFC.
======================================================
2013-04-23 補充
最近有人在群裡說gatt協議總是沒理解到,協議的建議還是多看官方文檔吧,這裡簡單介紹下思路:Gatt的分三層Services-->Characteristic-->Handle 都是用uuid標識的。 一個裝置可以註冊多個Services,一個Services可以有多個Characteristic,一個Characteristic可以有多個Handle。
資料通訊的時候要找到藍牙裝置最終定義的Handle才行,三星和ios的底層封裝了Handle層,不用應用程式處理,只要擷取到對應Characteristic就可以了,moto的需要擷取到指定Handle後才能用。 再發幾個本人已經發布到google play上的app吧,喜歡折騰的可以反編譯看看https://play.google.com/store/apps/details?id=com.cyberblue.ble01&feature=search_result https://play.google.com/store/apps/details?id=com.cyberblue.iiwatch&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5jeWJlcmJsdWUuaWl3YXRjaCJd https://play.google.com/store/apps/details?id=com.cyberblue.ble07&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5jeWJlcmJsdWUuYmxlMDciXQ.. https://play.google.com/store/apps/details?id=com.cyberblue.ble10&feature=more_from_developer#?t=W251bGwsMSwxLDEwMiwiY29tLmN5YmVyYmx1ZS5ibGUxMCJd 2013-04-25 補充
http://developer.samsung.com/ble
三星公布ble的api了,跟原來的類不同了
要升級系統到4.2才能用,估計很少人升級到4.2,升級到4.2後原來按反編譯api開發的估計也用不了了,相容又是一個蛋痛的事情了
================================2013-05-16 補充Android將支援Bluetooth Smart Ready
http://www.beareyes.com.cn/html/2013/05/16/news/79112.shtml
在Google I/O開發人員年會上,Google宣布未來幾個月內其Android作業系統將全面支援Bluetooth Smart Ready和 Bluetooth Smart裝置。
採用新版Android系統的行動電話和平板,只要搭載雙模藍芽晶片即屬於Bluetooth Smart Ready規格。Bluetooth Smart Ready是藍芽技術的進階標準,幾乎可與所有支援藍芽技術的電子產品相容,包括鍵盤、耳機,以及超級省電的下一代Bluetooth Smart智能應用配件(Bluetooth Smart appcessory),如FitBit Flex智能腕帶及Pebble智能手錶等。Android技術交流QQ群(253065556)