2023年1月27日 星期五

Android Studio - 藍牙低功耗(BLE)設備連接例子(九十九)

Android Studio - 藍牙低功耗(BLE)設備連接例子(九十九):

藍牙低功耗(Bluetooth Low Energy / BLE)連接方法和步驟是有點複習,所以利用下面的例子來描述如何連接藍牙低功耗(BLE)?

連接實現的步驟:
  1. 通過掃描,試圖發現新設備
  2. 確認發現的設備沒有而已軟體,也沒有處於鎖定狀態
  3. 發送 Device Address 地址
  4. 收到並解讀待配對設備發送過來的資料
  5. 建立並保存連接

藍牙低功耗(BLE)的連接
例: 手機 A(Observer)要跟設備 B 建立連接之前,設備 B 需要先進行廣播,即設備 B(Advertiser)不斷發送如下廣播信號,T 為廣播間隔。每發送一次廣播包,我們稱其為一次廣播事件(Advertising Event),因此 T 也稱為廣播事件間隔。藍牙晶片只有在廣播事件期間才打開射頻模組,這個時候功耗比較高,其餘時間藍牙晶片都處於 idle 狀態,因此平均功耗非常低。

設備 B 不斷發送廣播信號給手機(Observer),如果手機不開啟掃描視窗,手機是收不到設備 B 的廣播的,不僅手機要開啟射頻接收視窗,而且只有手機的射頻接收視窗跟廣播發送的發射視窗匹配成功,而且廣播射頻通道和手機掃描射頻通道是同一個通道,手機才能收到設備 B 的廣播信號。

中心(Central/Scanner)和外圍設備(Peripheral/Advertiser)的廣播信號
建立連接(Connection Establishment):
  • 根據藍牙規格規定,Advertiser 發送完一個廣播包之後150us(T_IFS),Advertiser 必須開啟一段時間的射頻Rx視窗,以接收來自 Observer 的資料包。 Observer 就可以在這段時間裡給 Advertiser 發送連接請求。
  • 同步手機和設備的時鐘,也就是說,設備每收到手機發來的一個包,都會把自己的時序原點重新設置,以跟手機同步。
  • 告訴設備你現在可以傳資料給我了。連接成功後,BLE 通信將變成主從模式,因此把連接發起者(手機)稱為 Master 或者 Central,把被連接者(之前的 Advertiser)稱為 Slave 或者 Peripheral。BLE 通信之所以為主從模式,是因為 Slave 不能隨性給 Master 發資訊,它只有等到 Master 給它發了一個 Packet 後,然後才能在規定的時間把自己的資料回傳給 Master。
  • 連接成功後,Master 和 Slave在每一個 Connection Interval開始的時候,都必須交互一次,即 Master 給 Slave 發一個包,Slave 再給 Master 發一個包,整個交互過程稱為一個 Connection Event 或者 Gap Event。。Master 不可能時時刻刻都有資料發給 Slave,所以 Master 大部分時候都是發的空包(Empty Packet)給 Slave。同樣 Slave 也不是時時刻刻都有資料給 Master,因此 Slave 回復給 Master 的包大部分時候也是空包。另外在一個 Connection Event 期間,Master 也可以發多個包給 Slave,以提高吞吐率。

中心(Central/Scanner)和外圍設備(Peripheral/Advertiser)的連接訊號
BLE 裝置位址 (Device Address) :

在通訊系統當中,Device Address 是用來唯一辨識一個物理設備的,像是 TCP/IP 中的 MAC Address, Bluetooth Classic 的 Bluetooth Device Address。對於 Device Address 來說一個很重要的特性就是唯一性,否則很可能會造成很多問題。
Public Address 屬於一種 48-bit 的 MA-L 類型地址,它的結構為:NN:NN:NN:NN:NN:NN。其中前三個 byte 使用 OUI(Organizationally Unique Identifier),後三個 byte 自由分配。OUI 代表了一個指定的組織機構識別碼,全球已經有許多公司申請了自己的 OUI。開發者可以從 IEEE 網站 https://standards.ieee.org/develop/regauth/oui/oui.csv 下載已被分配的 MA-L 位址。

BLE 結構的組成:

每個 BLE 設備由多個 Profile(GATT)組成
每個 Profile 由多個的 Service 服務組成,Service 用於資料的分類。
每個 Service 由多個 Characteristic 特徵組成,Characteristic用於存放屬性。
每個 Characteristic 由一個 Value 值和多個 Descriptor 描述組成 Descriptor 是對 Value 不同角度的描述和說明,所以有多個 Descriptor。
2023年 1月 27日(Fri)天氣報告
氣溫:44.0°F / 7.0°C @ 07:00
風速:每小時 3公里
降雨機會:11%
相對濕度:百分之 97%
天氣:多雲

2023年1月26日 星期四

Android Studio - 藍牙低功耗(BLE)設備連接介紹(九十八)

Android Studio - 藍牙低功耗(BLE)設備連接介紹(九十八):

藍牙低功耗(Bluetooth Low Energy / BLE)的資料蠻多,要多花時間才可以完全理解,但了解了基本的慨念後,便想了解藍牙低功耗設備如何連接,連接設備是筆者終極目標,因為讀寫資料到藍牙低功耗設備,已經是定立好的目標。

藍牙低功耗(BLE)設備的工作狀態有5種:
  1. 待機狀態(Standby):沒有連接任何設備,沒有傳輸和發送數據。
  2. 廣播狀態(Advertiser/advertising):周期性廣播狀態。
  3. 掃描狀態(Scanner/scanning):主動尋找正在廣播的設備。
  4. 發起連接狀態(Initiator/initiating):主動發起連接。
  5. 連接狀態(Connected):已經連接。

藍牙低功耗(BLE)設備工作狀態
藍牙低功耗的工作模式有:主設備模式,從設備模式,Mesh 組網模式,廣播模式。

BLE設備連接模式
BLE設備有不同類型的連接模式,BLE連接的項目可能具有多達4種不同的功能:
  • 廣播者(Broadcaster):應作為一個伺服器。因此,其目的是定期將數據傳輸到設備,但它不支持任何傳入連接。
  • 觀察者(Observer / Scanner):可以只監視並讀取由廣播者(Broadcaster)發送的數據。在這種情況下,對象無法將任何連接發送到伺服器。
  • 中心(Central):通常由一個智慧型手機或平板電腦。該設備提供兩種不同類型的連接,廣告模式或連接模式。它觸發了數據傳輸,從而引領了整個流程。主從設備的 Center(中心設備,主動連接的一方)主要可以分為 掃描→連接→通訊 三塊內容. 通訊主要包含 read,write,notify/indicate。read 就是讀取設備上的資料(如讀取外設電量),write 就是發送資料(如發送關閉命令關閉藍牙燈),notify/indicate 字面意思就是通知/指示,是用來接收設備主動上報的資料的,這樣就達成了雙向通訊。
  • 外圍設備(Peripheral):Peripheral(外設設備,被動連接的一方)主要理解為硬體外設,提供資料用的。允許連接和數據與中央周期性基礎上傳送。該系統的目標是通過使用標準過程來確保通用數據傳輸,以便其他設備也可以讀取和理解數據。
  • 注:中央和週邊可以進行配對、連接、資料通信。值得注意的是一個中央可以同時連接多個周邊,但是一個周邊只能連接一個中央。

BLE 設備的連接模式
廣告和連接模式(Advertising): 藍牙設備傳輸塊以允許廣播數據:這稱為廣播。這些是 31位元組的塊,可包含特定於發送者的信息。它們還用於連接其他設備(通常是掃描儀)。為了提供廣泛的不同功能,存在幾種類型的廣告包(用於具有或不具有連接的直接或間接廣告)。

BLE 設備的連接模式溝通步驟
2023年 1月 26日(Thu)天氣報告
氣溫:41.0°F / 4.0°C @ 07:00
風速:每小時 2公里
降雨機會:5%
相對濕度:百分之 92%
天氣:多雲

2023年1月25日 星期三

Android Studio - 藍牙低功耗(BLE)GATT (九十七)

Android Studio - 藍牙低功耗(BLE)GATT (九十七):

藍牙低功耗(Bluetooth Low Energy / BLE)的 Gatt(Generic Attribute Profile)即通用屬性協定,用於在 BLE 鏈路上發送和接收的資料塊。目前所有的 BLE 應用都是基於 GATT,基於 GATT 的應用協議非常簡單,因為所有的功能都是集成在 GATT 終端,這些基於其上的應用協定只是對 GATT 提供的功能的使用。一個設備可以實現多個設定檔。

藍牙低功耗(Bluetooth Low Energy / BLE)的結構
BLE 交互的橋樑是 Service,Characteristic,Descriptor。這三部分都是使用 UUID 來作為唯一標識符加以區分。一個 BLE 終端可以包含多個 Service,一個 Service 可以包含多個 Characteristic,而一個 Characteristic包含一個 value 和多個 Descriptor,一個 Descriptor 只包含一個 value。

Service、Characteristic 和 Descriptor 均有一個唯一的 UUID(Universal Unique IDentifier)標識,UUID 既有 16位元的也有 128位的。16位元的 UUID 是經過藍牙組織認證的,是需要購買的,而128位的 UUID 則可以自訂,當然也有許多通用的 UUID。UUID 格式為:0000ffe1-0000-1000-8000-00805f9b34fb。

GATT Server 與 GATT Client 的連接溝通
  • Characteristic:可以理解為一個資料類型,它包括一個 value 和 0 至多個對此 characteristic 的描述(Descriptor)。
  • Descriptor:對 Characterisctic 的描述,如範圍、單位等。
  • Service:是 Characteristic 的集合,它可以包含多個 Characteristic。
  • 重點:一個 BLE 終端可以包含多個 Service,一個 Service 可以包含多個 Characteristic,一個 Characteristic 包含一個 value 和多個 Descriptor,一個 Descriptor 包含一個 value(其中 Characteristic 比較重要,用的比較多)。

Service Characteristic Descriptor 的結構
GATT 通信的雙方是 C/S (Client / Server)關係。外設作為 GATT 服務端(Server),它維持了 ATT 的查閱資料表以及 service 和 characteristic 的定義。中心設備是 GATT 用戶端(Client),它向 Server 發起請求。需要注意的是,所有的通信事件,都是由用戶端(也叫主設備,Master)發起,並且接收服務端(也叫從設備,Slave)的回應。

GATT 通信連接

GATT 連接是獨佔的。也就是一個BLE外設同時只能被一個中心設備連接。一旦外設被連接,它就會馬上停止廣播,這樣它就對其他設備不可見了。當設備斷開,它又開始廣播。
2023年 1月 25日(Wed)天氣報告
氣溫:43.0°F / 6.0°C @ 07:00
風速:每小時 2公里
降雨機會:4%
相對濕度:百分之 96%
天氣:霧

2023年1月24日 星期二

Android Studio - 藍牙低功耗(BLE)種類介紹 (九十六)

Android Studio - 藍牙低功耗(BLE)種類介紹 (九十六):

藍牙低功耗(Bluetooth Low Energy / BLE)是一種技術,從藍牙 4.0 開始支援。BLE 較傳統藍牙具有傳送速率更快,覆蓋範圍更廣,安全性更高,延遲更短,耗電低等優點。藍牙低功耗 4.0 有兩種模式,分別為單模(Bluetooth Smart)和雙模(Bluetooth Smart Ready)兩種設備。

藍牙低功耗(BLE)種類
單模設備(Bluetooth Smart):
  • 只能執行低功耗協議棧,也就是只支援BLE,為了實現極低的功耗,硬體和軟體上都做了優化。這樣的設備只能支援BLE。單模藍牙晶片往往是一個帶有單模藍牙協定棧的產品,這個協定棧是晶片商免費提供的。
  • 具有藍牙智慧型(Bluetooth Smart)標識的設備僅支持低功耗藍牙,BLE 多個協議版本(v4.0/4.1/4.2/5.0/5.1/5.2),可以與藍牙智慧型就緒或藍牙智慧型設備通信。

藍牙低功耗(BLE)單模設備(Bluetooth Smart)
雙模設備(Bluetooth Smart Ready):
  • 雙模設備支援藍牙 BR/EDR 和 BLE(支援藍牙所有版本,相容低功耗藍牙及經典藍牙)。在雙模設備中,這兩個技術使用同一個射頻前端和天線。典型的雙模設備有智慧手機、平板電腦、PC 和 Gateway。這些設備可以收到通過BLE或者藍牙 BR/EDR 設備發送過來的資料,這些設備往往都有足夠的供電能力。雙模設備和BLE設備通信的功耗低於雙模設備和藍牙 BR/EDR 設備通信的功耗。雙模解決方案需要一個外部處理器才足以實現藍牙協議棧。
  • 具有藍牙智慧型就緒(Bluetooth Smart Ready)標識的外設兼容經典藍牙與低功耗藍牙的雙模。

藍牙低功耗(BLE)雙模設備(Bluetooth Smart Ready)
藍牙低功耗(BLE)的連接
BLE 協定棧(Protocol Stack)主要由如下幾部分組成:
  • GATT(Generic Attribute Profile ):GATT 用來規範 attribute 中的資料內容,並運用 group(分組)的概念對 attribute 進行分類管理。沒有 GATT,BLE 協議棧也能跑,但互聯互通就會出問題,也正是因為有了 GATT 和各種各樣的應用 profile,BLE 擺脫了 ZigBee 等無線協議的相容性困境,成了出貨量最大的 2.4G 無線通訊產品。
  • GAP層(Generic access profile):GAP 是對 LL層 payload(有效資料包)如何進行解析的兩種方式中的一種,而且是最簡單的那一種。GAP簡單的對LL payload 進行一些規範和定義,因此 GAP 能實現的功能極其有限。GAP目前主要用來進行廣播,掃描和發起連接等。
  • SMP(Secure manager protocol):SMP 用來管理BLE連接的加密和安全的,如何保證連接的安全性,同時不影響用戶的體驗,這些都是 SMP 要考慮的工作。
  • ATT(Attribute Protocol):所有資料傳輸經過這層實現,定義了Client 和 Server 屬性,Client 就傳 Request,Server 傳 response。每個屬性都有一個唯一的 UUID,屬性將以characteristics and services的形式傳輸。
  • L2CAP層(Logic link control and adaptation protocol)。L2CAP 對 LL 進行了一次簡單封裝,LL 只關心傳輸的資料本身,L2CAP 就要區分是加密通道還是普通通道,同時還要對連接間隔進行管理。
  • HCI(Host controller interface):HCI 是可選的(具體請參考文章: 三種藍牙架構實現方案(藍牙協議棧方案)),HCI 主要用於 2顆晶片實現 BLE 協定棧的場合,用來規範兩者之間的通信協定和通信命令等。
  • PHY層(Physical layer 實體層):PHY 層用來指定 BLE 所用的無線頻段,調製解調方式和方法等。PHY 層做得好不好,直接決定整個BLE晶片的功耗,靈敏度以及 selectivity 等射頻指標。
  • LL層(Link Layer 鏈路層)。LL層是整個BLE協議棧的核心,也是 BLE 協議棧的難點和重點。LL層要做的事情非常多,比如具體選擇哪個射頻通道進行通信,怎麼識別空中資料包,具體在哪個時間點把資料包發送出去,怎麼保證資料的完整性,ACK 如何接收,如何進行重傳,以及如何對鏈路進行管理和控制等等。LL層只負責把資料發出去或者收回來,對資料進行怎樣的解析則交給上面的 GAP 或者 GATT。

藍牙協定分為四個層次:
  • 實體層:負責提供資料傳輸的物理通道(通常稱為通道)
  • 邏輯層:在實體層的基礎上,提供兩個或多個設備之間,和物理無關的邏輯傳輸通道
  • L2CAP:L2CAP 是邏輯鏈路控制和適配協議的縮寫,負責管理邏輯層提供的邏輯鏈路
  • 應用層:基於 L2CAP 提供的 channel,實現各種各樣的應用功能

BLE 協定棧(Protocol Stack)

2023年 1月 24日(Tue)天氣報告
氣溫:38.0°F / 3.0°C @ 07:00
風速:每小時 10公里
降雨機會:46%
相對濕度:百分之 88%
天氣:多雲

2023年1月23日 星期一

Android Studio - 藍牙低功耗(BLE)基本介紹 (九十五)

Android Studio - 藍牙低功耗(BLE)基本介紹 (九十五):

筆者將會開發 Aneng AN9002 藍牙數字萬用錶(Bluetooth Digital Multimeter / DMM)的 Android APK,由於 Aneng AN9002 是使用藍牙低功耗(Bluetooth Low Energy / BLE),也特別購買了 Samsung Galaxy M33 手機作為測試之用,為了加深了解藍牙低功耗,所以便努力在網上爬文研究。

藍牙低功耗(Bluetooth Low Energy / BLE)
藍牙(Bluetooth)技術的自 1998年的 0.7版開始,一直在更新版本,進步使得低功耗藍牙(Bluetooth Low Energy / BLE)應運而生,藍牙低功耗是隨著 2010年的 4.0版本發佈中的核心規範,它具有與傳統藍牙相同的特性,但不同之處在於其非常低的能耗,而且不具備和傳統藍牙BR/EDR的相容性。它是專為小資料率、離散傳輸的應用而設計的。通信距離上也有改變,傳統藍牙的傳輸距離距離 10米或 100米,BLE 則規定為 30米以內,工作在免許可的 2.4GHz ISM(Industrial, Scientific and Medical)射頻頻段,傳輸速度為 1Mbps。

藍牙低功耗(BLE)的 ISM 射頻頻段
藍牙低功耗(Bluetooth Low Energy / Bluetooth LE / BLE)都統稱藍牙低功耗、低功耗藍牙。藍牙低功耗主要是使用在個人的新興應用上,如穿戴設備、手錶、醫療監測、運動監測,家居測量、無人感測器等領域上的應用。藍牙低功耗比較傳統藍牙,旨在保持同等通訊範圍的同時顯著降低功耗和成本。

BLE 的好處:
低功耗 - BLE 的優勢在於其超低功耗,通過大限度減少無線電不必要的操作時間,並確保在短距離內傳輸少量數據。
穩定性 - 使用與傳統藍牙技術相同的自適應跳頻 (AFH) 技術,因而能確保低功耗藍牙能夠在住宅、工業與醫療應用中的「嘈雜」射頻環境中維持穩定的傳輸。
降低成本 - 與其他類似的無線協議和技術相比,BLE 應用較便宜的模塊和芯片組。
兼容性 - BLE 已集成到所有智能手機中,有龐大的設備支持,使用起來更方便。
信用 - BLE 來自行業巨頭聯盟 (IBM、微軟、英特爾…),這使其具有更好的採用率以及強大的支持。

BLE 的局限性:
低數據吞吐量 - BLE 設備的數據吞吐量為 100-250 千比特/秒,受 PHY 限制 (物理無線電層) 數據速率。
縮小範圍 - 最初設計用於在短距離內定期傳輸少量數據,BLE無疑具有有限的工作範圍。

傳統藍牙 (Bluetooth) 與藍牙低功耗 (BLE) 比較
傳統藍牙與低功耗藍牙比較:

 

傳統藍牙 BR/EDR

低功耗藍牙

射頻頻率

2400-2483.5 MHz

2400-2483.5 MHz

距離/範圍(理論最大值)

100米(330英尺)

>100米(>330英尺)

空中數據速率

13 Mbit/s

125 kbit/s 1 Mbit/s 2 Mbit/s

應用程式吞吐量

0.72.1 Mbit/s

0.27 Mbit/s

活躍連線

7

未定義;取決於實現

安全性

56/128位,以及套用層用戶定義

使用Counter Mode CBC-MAC128AES,以及套用層用戶定義

深度睡眠電流

~80 μA

<5 μA

閒置電流

~8 mA

~1 mA

功耗

參考值1 W

0.010.5 W

峰值電流

22-40 mA

10-30 mA

距離範圍

500m (Class 1) / 50m (Class 2)

100m

最少輸出功率

0 dBm (Class 1) / -6 dBm (Class 2)

-20 dBm

最大輸出功率

+20 dBm (Class 1) / +4 dBm (Class 2)

+10 dBm

接收靈敏度

≥ -70 dBm

≥ -70 dBm

加密

64 bit / 128 bit

AES-128 bit

連接時間

100 ms

3 ms

網路拓撲

Scatternet

Scatternet

跳頻

Yes

Yes

廣播頻度

32

3

數據頻度

79

37

語音能力

Yes

No

定位功能

沒有任何

在場:廣告方向:RSSI

距離:方向尋找 (AoA/AoD)

主要用途

行動電話、遊戲、耳機、立體聲音頻流、智慧型家居、可穿戴設備、汽車、個人電腦、安防、接近感測、醫療保健、運動健身等。

行動電話、遊戲、耳機、立體聲音頻流、智慧型家居、可穿戴設備、汽車、個人電腦、安防、接近感測、醫療保健、運動健身、工業等。


BluetoothLE (BLE) 設備:

設備

支持 BLE 的型號

設備

Android手機和平板電腦

2013 7 月發佈,所有搭載 Android Android 手機 4.3 及更高

Android手機和平板電腦

Apple手機

2013 9月更新推出,一般搭配IOS 7.0及以上系統的手機都是開始支援藍牙 BLE 的。蘋果手機 4 及更高

Apple手機

iPad

iPad 3 代及更高版本 iPad mini 及更高版本

iPad

iPod 觸摸

iPod touch 5 代及更高版本

iPod 觸摸


參考資料來源:https://www.mokoblue.com/zh-tw/guide-on-bluetooth-low-energy/

2023年 1月 23日(Mon)天氣報告
氣溫:36.0°F / 2.0°C @ 07:00
風速:每小時 2公里
降雨機會:2%
相對濕度:百分之 88%
天氣:多雲

2023年1月18日 星期三

Android Studio - Aneng AN9002 藍牙數字萬用錶(Bluetooth Digital Multimeter)APK(九十四):

Android Studio - Aneng AN9002 藍牙數字萬用錶(Bluetooth Digital Multimeter)APK(九十四):

Aneng AN9002 藍牙數字萬用錶(Bluetooth Digital Multimeter / DMM)提供了免費 Android APK,祇需要在網上下載使用,雖然這個 APK 是免費的,但筆者購買萬用錶時已經決定會自行開發讀取 Aneng AN9002 的 Android APK,一來可以有目標而學習,便可以將來自已加入需要的功能,這是個不錯的學習機會。首先是試用這免費的 Android APK。

Aneng AN9002 藍牙數字萬用錶(Bluetooth Digital Multimeter / DMM)APK
網上下載地址:https://play.google.com/store/apps/details?id=com.yscoco.wyboem&hl=en_US&gl=US
開發者:深圳眾儀(Szoyi)
版本:1.0.13 (Updated:Dec 21, 2020 / Released:May 13, 2020)

首先用 Android 手機在 Google Shop 網上下載,下載完成,便可以開始使用,非常簡單。首先按 Bluetooth DMM 的圖示(ICON),進入 APK 程式,程式會顯示推送的消息可能收不到。 你想打開它嗎? 通知不可用!(The pushed message may not be received. Do you want to open it? Notification Unavailable!),按取消(Cancel),提示顯示便會消失,然後按遊客(Vistor),進入萬用錶讀取數資料。
Aneng AN9002 藍芽數字萬用錶(Bluetooth Digital Multimeter / DMM)APK
進入萬用錶讀取數據資料,開啟 Aneng AN9002 藍芽數字萬用錶(Bluetooth Digital Multimeter)和啟動藍芽裝置,程式便會自動讀取萬用錶數據資料和顯示,APK 可以同時連接 4台藍芽數字萬用錶,按動顯示資料圖示,進入圖示資料和可以紀錄數據。
進入 Aneng AN9002 藍芽數字萬用錶(Bluetooth Digital Multimeter / DMM)APK
在萬用錶讀取數據資料版頁,在左右上角有隱藏菜單(Menu),左上角的是菜單包括有語言(Language)、關於(About)、設置(Setting)、浮框(Floating Windows)、重置密碼(Reset Password)、退出(Log out)的功能,右上角的是管理菜單(Management)包括有歷史記錄(History record)、重命名(Rename)、刪除(Delete)的功能。
Aneng AN9002 藍芽數字萬用錶(Bluetooth Digital Multimeter / DMM)APK 的菜單
左上角的是(Language)、(About)、(Setting)、(Floating Windows)、(Reset Password)、(Log out)的功能。
Aneng AN9002 藍芽數字萬用錶(Bluetooth Digital Multimeter / DMM)APK 子菜單版面
Aneng AN9002 藍芽數字萬用錶(Bluetooth Digital Multimeter / DMM)APK 其它版面
2023年 1月 18日(Wed)天氣報告
氣溫:44.0°F / 7.0°C @ 07:00
風速:每小時 6公里
降雨機會:59%
相對濕度:百分之 87%
天氣:多雲