當前位置:首頁 » 安卓系統 » android藍牙教程

android藍牙教程

發布時間: 2023-01-11 02:02:45

A. Android 藍牙開發(一)

普通藍牙設備官方文檔

Android 平台包含藍牙網路堆棧支持 ,憑藉此支持,設備能以無線方式與其他藍牙設備交換數據。應用框架提供了通過 Android Bluetooth API 訪問藍牙功能的途徑。使用 Bluetooth API Android 應用可以執行下面的操作:

傳統藍牙適用於電池使用強度較大的操作,例如 Android 設備之間的流傳輸和通信等。針對具有低功耗要求的藍牙設備,Android 4.3(API 18)中引入了面向低功耗藍牙的 API 支持。

使用 Android Bluetooth API 來完成使用藍牙進行通信的四項主要任務: 設置藍牙 、 查找局部區域內的配對設備或可用設備 、 連接設備 ,以及在 設備之間傳輸數據 。

關於藍牙的 API 在 android.bluetooth 包中,下面介紹一下和藍牙相關的主要類:

在 BluetoothProfile IPC 客戶端連接到服務(即,運行特定配置文件的內部服務)或斷開服務連接時向其發送通知的介面。

使用藍牙必須聲明許可權 BLUETOOTH 才可以執行藍牙通信。

1、獲取藍牙適配器

例如:我們可以查詢所有已配對的設備,然後使用 ArrayAdapter 向用戶顯示每台設備的名稱:

要發起連接僅需要知道目標藍牙設備的 Mac 地址就可以了。

注意 執行 discovery 對於藍牙適配器來說是一個非常繁重的過程,並且會消耗大量資源。在找到要連接的設備後, 要確保使用 cancelDiscovery() 來停止發現,然後嘗試連接 。如果您已經和某台設備進行連接,那麼這個時候執行發現操作會大幅度的減少此連接可用的帶寬!因此不應該在處於連接狀態的時候執行發現操作!

例如:

在連接之前如果兩個設備沒有配對,則系統會自動發出配對請求。

伺服器套接字接受連接的基本過程

放在子線程中去執行。

例子:

客戶端連接的基本過程

調用 connect() 的時候要確保客戶端沒有執行發現操作。如果執行了會大幅度降低連接的速度,增加失敗的可能。

例子

在連接之前調用 cancleDiscovery() 在進行連接之前應該始終調用這個方法,而且調用的時候無需檢測是否正在掃描。

過程:

從 Android 3.0 開始, Bluetooth API 便支持使用藍牙配置文件。藍牙配置文件是適用於設備間藍牙通信的無線介面規范。

1、藍牙配置文件就是設備間通信(藍牙設備)的一種規范

免提配置文件便是一個示例,對於連接到無線耳機的手機,兩台設備都必須支持免提配置文件。我們也可以通過實現介面 BluetoothProfile 來寫入自己的類來支持特定的藍牙配置文件。Android API 提供了以下的幾種藍牙配置文件的實現:

2、使用配置文件的基本步驟

創建 HDP 應用:

關於普通藍牙設備和普通藍牙設備之間的連接通信

關於藍牙設備和藍牙儀器(藍牙耳機、電子秤等等類似產品)
這種之間的通信是通過配置文件代理來實現的。
都有一個對應的配置文件代理類。具體的操作是通過這個對象來完成。

參考: https://mp.weixin.qq.com/s?__biz=MzU5NzA2NjQzMg==&mid=2247484128&idx=1&sn=&scene=21#wechat_redirect

B. Android 經典藍牙開發(一)

Android app 可通過Bluetooth API 執行以下操作:

藍牙進行通信的四大 必需任務 :
設置藍牙、查找局部區域內的配對設備或可用設備、連接設備、在設備之間傳輸數據

基礎知識:

申明許可權:

許可權允許後,藉助 BluetoothAdapter,分兩步完成藍牙設置

使用 BluetoothAdapter ,通過 設備搜索 查詢配對設備的列表 來查找遠程藍牙設備
設備搜索 是一個 掃描 過程。
A nearby Bluetooth device responds to a discovery request only if it is currently accepting information requests by being discoverable.
發現中文的文檔描述不準確,就放英文的文檔了。
局部區域內的藍牙設備僅在其當前已啟用可檢測性時才會響應發現請求

彈框(官方推薦)

無感知方法:

C. Android開發之藍牙(Bluetooth)

在上一篇中有介紹了Wifi與網路連接處理
Android開發之WiFi與網路連接處理
下面,來繼續說說Android中藍牙的基本使用。

Bluetooth是目前使用的最廣泛的無線通訊協議之一,主要針對短距離設備通訊(10米),常用於連接耳機、滑鼠和移動通訊設備等。

值得一提的是:
android4.2新增了部分新功能,但是對於Bluetooth熟悉的人或許開始頭疼了,那就是Android4.2引入了一個新的藍牙協議棧針BLE。谷歌和Broadcom之間的合作,開發新的藍牙協議棧,取代了基於堆棧的Bluez。因此市場上出現了老設備的兼容問題,很多藍牙設備在android4.2手機上不能正常使用。

BluetoothAdapter簡單點來說就是代表了本設備(手機、電腦等)的藍牙適配器對象。

first:we need permission
要操作藍牙,先要在AndroidManifest.xml里加入許可權

**下面來看看如何使用藍牙。 **↓↓↓****
Demo已就緒:

返回值:如果設備具備藍牙功能,返回BluetoothAdapter 實例;否則,返回null對象。

打開藍牙設備的方式:
1.直接調用函數enable()去打開藍牙設備 ;
2.系統API去打開藍牙設備,該方式會彈出一個對話框樣式的Activity供用戶選擇是否打開藍牙設備。

注意: 1.如果藍牙已經開啟,不會彈出該Activity界面。2.在目前大多數Android手機中,是不支持在飛行模式下開啟藍牙的。如果藍牙已經開啟,那麼藍牙的開關 ,狀態會隨著飛行模式的狀態而發生改變。

1. 搜索藍牙設備
使用BluetoothAdapter的startDiscovery()方法來搜索藍牙設備
startDiscovery()方法是一個非同步方法,調用後會立即返回。該方法會進行對其他藍牙設備的搜索,該過程會持續12秒。該方法調用後,搜索過程實際上是在一個System Service中進行的,所以可以調用cancelDiscovery()方法來停止搜索(該方法可以在未執行discovery請求時調用)。

系統開始搜索藍牙設備
^( *  ̄(oo) ̄ ) ^ 系統會發送以下三個廣播:

2.掃描設備

3.定義廣播接收器接收搜索結果

4.注冊廣播

獲取附近的藍牙設備

第一步建立連接:首先Android sdk(2.0以上版本)支持的藍牙連接是通過BluetoothSocket建立連接,服務端BluetoothServerSocket和客戶端(BluetoothSocket)需指定同樣的UUID,才能建立連接,因為建立連接的方法會阻塞線程,所以伺服器端和客戶端都應啟動新線程連接。

(這里的服務端和客戶端是相對來說的)
兩個藍牙設備之間的連接,則必須實現服務端與客戶端的機制。
當兩個設備在同一個RFCOMM channel下分別擁有一個連接的BluetoothSocket,這兩個設備才可以說是建立了連接。

服務端設備與客戶端設備獲取BluetoothSocket的途徑是不同的。
1,服務端設備是通過accepted一個incoming connection來獲取的,
2,客戶端設備則是通過打開一個到服務端的RFCOMM channel來獲取的。

服務端
通過調用BluetoothAdapter的(String, UUID)方法來獲取BluetoothServerSocket(UUID用於客戶端與服務端之間的配對)

客戶端
調用BluetoothService的(UUID)方法獲取BluetoothSocket(該UUID應該同於服務端的UUID)。
調用BluetoothSocket的connect()方法(該方法為block方法),如果UUID同服務端的UUID匹配,並且連接被服務端accept,則connect()方法返回。

數據傳遞,通過以上操作,就已經建立的BluetoothSocket連接了,數據傳遞無非是通過流的形式
獲取流

該類就是關於遠程藍牙設備的一個描述。通過它可以和本地藍牙設備---BluetoothAdapter連接通信。

好多東西我也不知道怎麼描述,下面給出Demo:
剛好有剛學習的小夥伴問我ListView怎麼用,那我就用ListView。

源碼
RairDemo
GitHub: https://github.com/Rairmmd/android-demo
Coding: https://coding.net/u/Rair/p/RairDemo/git

D. android 藍牙 怎麼入門

入手一個新的模塊或應用,當然首先要知道它都有什麼了,與它相關的代碼在那裡,所以先一起看下藍牙代碼分布吧。


1. 代碼分布:

packages/apps/Bluetooth/

看這路徑肯定是藍牙應用方面的代碼了,主要是關於藍牙應用協議的表現代碼,包括opp、hfp、hdp、a2dp、pan等等,這些名詞後面再解釋。

frameworks/base/core/java/android/server/

4.2以後這個目錄雖然還有了,但裡面代碼已經轉移到應用層了,就是前面那個目錄,所以4.2.2上的藍牙這里可以忽略。

framework/base/core/java/android/bluetooth

這個目錄里的代碼更像一個橋梁,裡面有供java層使用一些類,也有對應的aidl文件聯系C、C++部分的代碼,還是挺重要的。

kerneldriversluetoothBluetooth

具體協議實現。包括hci,hid,rfcomm,sco,SDP等協議

kernel etluetooth Linux kernel

對各種介面的Bluetoothdevice的驅動。例如:USB介面,串口等,上面kernel這兩個目錄有可能看不到的,但一定會有的。

externalluetoothluedroid BlueZ (應用空間協議),官方藍牙協議棧。

systemluetoothBluetooth 適配層代碼,和framework那個作用類似,是串聯framework與blueZ的工具。

大致代碼分布就是這些,初步查看後讓我們再來看下藍牙的整體結構。


2.整體結構:

這部分直接上圖了,看著直觀些。圖中把JNI部分雖然在目前4.2的代碼中在packages層,這里還是畫在Framework層了,說明下希望

不要引起理解的誤會。從圖上可以感覺到整體流程和以前變化不大,所以流程方面的文章看4.1或更早的應該問題也不大。

PS:上圖關於藍牙協議棧的說明有誤,4.2里已經不再是bluez了,在些更正一下,當然協議棧這一部分還是要有的,新的協議棧看下面英文:


Android 4.2 introces a new Bluetooth stack optimized for use with Android devices. The new Bluetooth stack developed in

collaboration between Google and Broadcom replaces the stack based on BlueZ and provides improved compatibility and reliability.

google和broadcom合作開發了一個新藍牙協議棧,老版本的兼容性問題在所難免了。在此感謝網友andger032的提醒。


3.常用類和名詞解釋:

luetooth 目錄下

BluetoothEnabler.java 界面上藍牙開啟、關閉的開關就是它了,

BluetoothSettings.java 主界面,用於管理配對和連接設備

LocalBluetoothManager.java 提供了藍牙API上的簡單調用介面,這里只是開始。

CachedBluetoothDevice.java 描述藍牙設備的類,對BluetoothDevice的再封裝

BluetoothPairingDialog.java 那個配對提示的對話框


/packages/apps/Phone/src/com/android/phone/

BluetoothPhoneService.java 在phone的目錄肯定和電話相關了,藍牙接聽掛斷電話會用到這個


/packages/apps/Bluetooth/src/com/android/bluetooth/btservice/

AdapterService.java 4.2後才有的代碼,藍牙打開、關閉、掃描、配對都會走到這里,其實更准確的說它替代了4.1之前的BluetoothService.java,原來的工作就由這個類來完成了。說到這里不能不說4.2藍牙的目錄變了,在4.1及以前的代碼中packages層的代碼只有opp協議相關應用的代碼,也就是文件傳輸那部分,而4.2的代碼應用層的代碼則豐富了許多,按具體的藍牙應用協議來區別,分為以下文件夾(這里一並對藍牙一些名詞作個簡單解釋):

a2dp 藍牙立體聲,和藍牙耳機聽歌有關那些,另還有個avrcp--音頻/視頻遠程式控制制配置文件,是用來聽歌時暫停,上下歌曲選擇的。

btservice 這個前面AdapterService.java的描述大家應該能猜到一些,關於藍牙基本操作的目錄,一切由此開始。

hdp 藍牙關於醫療方面的應用 Bluetooth Health Device Profile

hfp 和電話相關,藍牙接聽、掛斷電話 Hands-free Profile

hid 人機交互介面,藍牙滑鼠鍵盤什麼的就是這個了

opp 不多解釋,以前就有。

pan 描述了兩個或更多個 Bluetooth 設備如何構成一個即時網路,和網路有關的還有串列埠功能(SPP),撥號網路功能(DUN)

pbap 電話號碼簿訪問協議(Phonebook Access Profile)

android 4.2的藍牙應用層部分代碼更豐富了,雖然有些目錄還沒具體代碼,不過說不準哪個版本更新就有了,就像4.0添加了hdp醫療那部分一樣。

另外原本在framework的JNI代碼也被移到packages/apps/bluetooth當中。

/frameworks/base/core/java/android/bluetooth/目錄下


BluetoothA2dp.java A2DP的功能實現

BluetoothAdapter.java 藍牙action的定義,虛擬設備屬性以及操作方法

BluetoothAudioGateway.java 藍牙語音網關

BluetoothClass.java 藍牙設備類型的定義

BluetoothDevice.java 藍牙設備屬性

BluetoothDevicePicker.java 定義遠程藍牙設備的特性,比如需要認證,設備類型

BluetoothHeadset.java 定義藍牙headset功能的屬性以及介面

BluetoothInputStream.java 藍牙流介面的實現(輸入流)

BluetoothOutputStream.java 藍牙流介面的實現(輸出流)

BluetoothServerSocket.java 藍牙socket服務端具備的方法

BluetoothSocket.java 藍牙socket的封裝

BluetoothUuid.java 藍牙uuid的定義以及uuid的解析

以上java文件在使用具體功能會用到,現在只是簡單描述下,至於具體使用在後續文章用到時再給出。同時代碼說明部分也就寫這些了

對於C、C++部分的代碼一方面沒看那麼多,另一方面根據android JNI的命名習慣,大家找起來也很容易。


4.後續分析:

前面從整體上描述藍牙的基本知識,落實在具體的代碼分析上,我們按幾個主線功能來走,藍牙的開關、搜索配對、藍牙耳機與電話和文件傳輸,

這幾個也算是藍牙的常用必備功能了,所以在後續文章中將按著這個順序來跟一下它們代碼調用流程。希望可以讓你快速的了解藍牙,當然如果有失誤

轉載

E. 如何使用android原生BLE藍牙進行操作

之前的涉及的物聯網項目中使用的: BLE 低功耗藍牙(藍牙4.0), 支持android 4.3以上的手機
主從關系: BLE低功耗藍牙只能做從端設備 ,一個藍牙主端設備,可同時與7個藍牙從端設備進行通訊

1)低功耗
低功耗的原理:
1低功耗藍牙僅使用了3個廣播通道,傳統藍牙技術採用 16~32 個頻道
2每次廣播開啟時間也由傳統的 22.5ms 減少到 0.6~1.2ms(毫秒)

2)傳輸距離極大提高
傳統藍牙傳輸距離為 2~10m,而藍牙4.0的有效傳輸距離可達到 60~100m

3)安全性
使用AES-128 CCM加密演算法進行數據包加密和認證。
更多BLE藍牙的解析參考博客 : BLE4.0教程一 藍牙協議連接過程與廣播分析

添加許可權
打開藍牙
1.先拿到BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
2.再拿到BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
判斷是否打開藍牙
未打開彈出 系統彈框 ,除了 魅族手機 是打開系統設置

設備/手機都是藍牙信號

在回調方法中:

一般在掃描的過程中,我們還會設置 設備過濾原則 (因為我只想要搜索到我們想要的設備,忽略無關設備)
如:從 scanRecord -- beacon -- beacon.type == 0xFF代表Manufacture,通過與嵌入式軟體定義 自己的 Manufacture值即可

用BluetoothDevice得到BluetoothGatt:

斷連:

關鍵問題:連接後一般要做什麼事?

( 必須在剛連接成功後2秒內app寫一個值給設備,否則會被設備斷開連接)

主要是讀寫 characteristic
gatt.wirteCharacteristic(mCurrentcharacteristic);

gatt.readCharacteristic(characteristic);

bluetoothGatt.setCharacteristicNotification(data, true);

真實工作中使用的藍牙庫BlueToothKit請參考我的另一篇博客:
android藍牙入門知識和優秀藍牙第三方庫BluetoothKit的使用

F. android的藍牙匹配連接

1、聲明許可權

注意:定位許可權是必須的,否則無法使用藍牙的搜索功能

2、獲取藍牙已匹配過的設備和搜索可匹配的設備列表
需要判斷藍牙是否啟用,工具類如下:

3、activity里的實現
布局

MainAcivity類

G. 安卓編程,藍牙連接怎麼做

Android 藍牙編程的基本步驟:

  1. 獲取藍牙適配器BluetoothAdapterblueadapter=BluetoothAdapter.getDefaultAdapter();

    如果BluetoothAdapter 為null,說明android手機沒有藍牙模塊。

  2. 判斷藍牙模塊是否開啟,blueadapter.isEnabled() true表示已經開啟,false表示藍牙並沒啟用。

  3. 啟動配置藍牙可見模式,即進入可配對模式Intentin=newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

    in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);

    startActivity(in); ,200就表示200秒。

  4. 獲取藍牙適配器中已經配對的設備Set<BluetoothDevice>device=blueadapter.getBondedDevices();

當然,還需要在androidManifest.xml中聲明藍牙的許可權

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

接下來就是根據自己的需求對BluetoothAdapter的操作了。

H. 如何使用Android藍牙開發

Android平台支持藍牙網路協議棧,實現藍牙設備之間數據的無線傳輸。本文檔描述了怎樣利用android平台提供的藍牙API去實現藍壓設備之間的通信。藍牙具有point-to-point 和 multipoint兩種連接功能。
使用藍牙API,可以做到:
* 搜索藍牙設備
* 從本地的Bluetooth adapter中查詢已經配對的設備
* 建立RFCOMM通道
* 通過service discovery連接到其它設備
* 在設備之間傳輸數據
* 管理多個連接

基礎知識
本文檔介紹了如何使用Android的藍牙API來完成的四個必要的主要任務,使用藍牙進行設備通信,主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數據。
所有的藍牙API在android.bluetooth包中。實現這些功能主要需要下面這幾個類和介面:

BluetoothAdapter
代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。

BluetoothDevice
代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 (其信息是封裝在 bluetoothsocket 中) 。

BluetoothSocket
代表了一個藍牙套接字的介面(類似於 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。

BluetoothServerSocket
代表打開服務連接來監聽可能到來的連接請求 (屬於 server 端) , 為了連接兩個藍牙設備必須有一個設備作為伺服器打開一個服務套接字。 當遠端設備發起連 接連接請求的時候,並且已經連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。

BluetoothClass
描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等。可以用它來進行一些UI上的提示。
BluetoothProfile

BluetoothHeadset
提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。

BluetoothA2dp
定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 「A2DP的」代表高級音頻分配模式。

BluetoothHealth
代表了醫療設備配置代理控制的藍牙服務

BluetoothHealthCallback
一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類並實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。

I. 如何使用Android藍牙開發

使用藍牙API,可以做到:
* 搜索藍牙設備
* 從本地的Bluetooth adapter中查詢已經配對的設備
* 建立RFCOMM通道
* 通過service discovery連接到其它設備
* 在設備之間傳輸數據
* 管理多個連接

基礎知識:
主要包含四個部分:藍牙設置、搜索設備(配對的或可見的)、連接、傳輸數據。
所有的藍牙API在android.bluetooth包中。實現這些功能主要需要下面這幾個類和介面:
BluetoothAdapter
代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入口。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。
BluetoothDevice
代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 (其信息是封裝在 bluetoothsocket 中) 。
BluetoothSocket
代表了一個藍牙套接字的介面(類似於 tcp 中的套接字) ,他是應用程 序通過輸入、輸出流與其他藍牙設備通信的連接點。
BluetoothServerSocket
代表打開服務連接來監聽可能到來的連接請求 (屬於 server 端) , 為了連接兩個藍牙設備必須有一個設備作為伺服器打開一個服務套接字。 當遠端設備發起連 接連接請求的時候,並且已經連接到了的時候,Blueboothserversocket 類將會返回一個 bluetoothsocket。
BluetoothClass
描述了一個設備的特性(profile)或該設備上的藍牙大致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等。可以用它來進行一些UI上的提示。
BluetoothProfile
BluetoothHeadset
提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。
BluetoothA2dp
定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 「A2DP的」代表高級音頻分配模式。
BluetoothHealth
代表了醫療設備配置代理控制的藍牙服務
BluetoothHealthCallback
一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類並實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。

代表一個應用程序的配置,藍牙醫療第三方應用注冊與遠程藍牙醫療設備交流。
BluetoothProfile.ServiceListener
當他們已經連接到或從服務斷開時通知BluetoothProfile IPX的客戶時一個介面(即運行一個特定的配置文件,內部服務)。

J. Android 藍牙開發(三)-藍牙的詳細介紹

前面的兩篇文章,主要是在 Android 官網關於藍牙介紹的基礎上加上自己的理解完成的。主要針對的是 Android 開發中的一些 API 的使用。
第一篇文章 Android 藍牙開發(一) 主要是介紹了普通的藍牙在 Android 開發中的運用。
第二篇文章 Android 藍牙開發(二) 主要是介紹了低功耗藍牙的開發。
這篇文章主要介紹的是藍牙的歷史和一些關於藍牙的通用知識,還有廣播包的知識。要想徹底了解藍牙開發,這些基礎的知識也是需要的,就像網路協議一樣,這些都是基礎的內容。我們的 API 的調用都是以這個為基礎的,了解這些,開發過程中遇到問題,才可以知道什麼怎麼一回事。

下篇文章主要講的就是實際開發中的一些坑。

藍牙其實就是一種近距離無線通信技術。

從下到上分別為:控制器(Controller)-->主機(host)-->應用(Application)

詳細介紹各個層的含義:

BLE 應用可以分為兩大類:基於非連接的和基於連接的

意思就是外設和周邊設備不發生連接,主要靠掃描到的廣播來獲取信息。發送廣播的一方叫做 broadcaster 監聽廣播的一方叫做 oberver 在 GAP 層有對應的角色定義。

網路拓撲圖:

這種方式就是廣播設備不斷的向外發送廣播(含有特定的信息),然後觀察者接受到廣播按照兩者之間約定好的協議進行解析拿到有用的信息。例如:iBeacon,通過這種設備我們可以實現室內定位。

其實這些設備的角色可以即使廣播者又是觀察者。接收到廣播後作出了處理,然後又發送廣播。這樣就形成了雙向的網路,類似於網際網路,這就是藍牙 Mesh 組網。

廣播數據包格式:

每個廣播數據包由 31 byte 組成。分為有效數據和無效數據兩部分。

例子:

這里是掃描的數據包(轉換成了 16 進制,兩個代表一個位元組),第一個位元組是 02 表示後面的兩個位元組是數據部分,然後第二個位元組是 01 表示了數據的類型。後面一個位元組就是真正的數據了。這個廣播數據單元就分析完了。下面就是另一個數據單元了。依次類推,關於數據類型的解釋,官網有。

這是數據類型對應的含義表。

網路拓撲圖:

一個中心設備可連接多個外設,但是一個外設只能連接一個中心(外設連接成功後就會停止對外廣播,別人就發現不了它了)。其中一個中心設備的連接外設的數量也是有限的。

鏈接: https://mp.weixin.qq.com/s?__biz=MzU5NzA2NjQzMg==&mid=2247484141&idx=1&sn=&scene=21#wechat_redirect

熱點內容
phprecv 發布:2025-05-17 11:55:00 瀏覽:610
福建時鍾監控網關伺服器雲主機 發布:2025-05-17 11:54:28 瀏覽:248
c資料庫壓縮 發布:2025-05-17 11:39:22 瀏覽:960
安卓手機如何連接音響功放 發布:2025-05-17 11:37:48 瀏覽:958
破解exe加密視頻 發布:2025-05-17 11:23:41 瀏覽:976
我的世界伺服器圈太大了怎麼辦 發布:2025-05-17 11:15:21 瀏覽:614
便宜的免費雲伺服器 發布:2025-05-17 11:08:50 瀏覽:779
中國頂級dhcp解析伺服器地址 發布:2025-05-17 11:06:27 瀏覽:36
php轉義html 發布:2025-05-17 11:04:00 瀏覽:569
鋼筋籠加密區規范 發布:2025-05-17 10:59:50 瀏覽:6