伊莉討論區

標題: Android BLE裝置 [打印本頁]

作者: jackyo04    時間: 2018-7-27 06:16 PM     標題: Android BLE裝置

本帖最後由 jackyo04 於 2018-7-27 06:16 PM 編輯

我手機寫了個BLE的測試程式,目前測試收發都正常,但一定要由手機端先發出訊號給裝置端,裝置端發出的訊號手機才能接收..
如果是裝置端先發出訊號的話,手機端會收不到
我確定藍芽由連線上@@
由於是廠商提供的測試軟體,所以在猜是不是廠商那邊的問題,由於手頭上沒有別的測試工具,想說來問看看有沒有相關的開發者,有遇到這個問題
作者: codewice    時間: 2018-7-29 09:01 PM

很久沒碰 BLE 的東西,依稀記得裝置端是發出 advertisement 的廣播給 client 端,告知此 server 有提供哪些服務,待 client 端來發起連線。所以理應是要從手機端先發出訊號,是嗎?
作者: jackyo04    時間: 2018-7-30 08:04 AM

codewice 發表於 2018-7-29 09:01 PM
很久沒碰 BLE 的東西,依稀記得裝置端是發出 advertisement 的廣播給 client 端,告知此 server 有提供哪些 ...

我是第一次碰所以不太清楚這個規則,之前是寫藍芽2.0的,藍芽2.0是配對上後,不管誰先傳值都可以,而碰上4.0後就發現"配對上"跟"傳值"好像是不同層面的,所以我目前的作法是,配對完成,先傳個值告知裝置,跟他說"你好",然後再處理後續動作..
作者: codewice    時間: 2018-7-31 10:33 PM

我盡量依我稀薄的記憶提供點資訊,有講得不好的地方,還望其他網友補正

2.0 跟 4.0(BLE) 不太一樣,BLE(Bluetooth Low Energy) 的目標是低功耗,所以兩端裝置的溝通流程就被設計得不一樣。在溝通上先認清四種角色

* Scanner
* Advertiser
* Master
* Slave

Scanner 與 Advertiser 的關係存在於連線建立前,當連線建立之後,兩者的關係就會轉變成 Master/Slave。通常平板或是手機等等的裝置會是 Scanner,而計步器等等小裝置會是 Advertiser。

在連線成功之前,還會有一個查詢的階段。就是 Scanner 會問 Advertiser:「你提供哪些 service」(請搜尋 "GATT Service")

當一個 device A 找到另外一個 device B 之後,A (通常是平板或手機)會是 Initiator,並且嘗試連線,連線成功就會變成 Master,另一方 B 則是 Slave。Master 會發起需求或指令,由 Slave 回應。

回到你原來的問題,總是由 Master(手機端) 發起指令給 Slave(裝置端),聽起來滿符合 spec 說的
作者: jackyo04    時間: 2018-8-1 08:40 AM

codewice 發表於 2018-7-31 10:33 PM
我盡量依我稀薄的記憶提供點資訊,有講得不好的地方,還望其他網友補正

2.0 跟 4.0(BLE) 不太一樣,BLE(Bl ...

感謝大大的解說,我目前查找的資料也是趨近Master須先詢問Slave有哪些GATT後,才能做後續動作,所以我大概知道要改哪邊了,官方提供的GATT還挺完善的,話說藍芽設計師會去竄改GATT提供的功能嗎?或是說官方有提供某個區塊供設計者可以自定義..




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!