當前位置:編程學習大全網 - 源碼下載 - 工程信息源代碼

工程信息源代碼

萬物互聯的物聯網時代已經到來,ble藍牙開發在其中扮演著輕松的角色。最近正好閑著,就抽空整理壹下這壹塊的知識點。

涉及ble藍牙通信的客戶端(啟動、掃描、連接、收發數據、分包和解包)和服務器(初始化廣播數據、開始廣播、配置服務、服務器回調操作)的全過程,以及壹些常見的問題,也就是壹些被踩過的坑。

例如

1.由於不同版本安卓或不同手機的適配問題,藍牙設備無法掃描。

2.ble藍牙連接如何避免133錯誤?

3.壹次性寫入數據的大小限制為20字節。如何發送長數據?

藍牙可以分為傳統(經典)藍牙和低功耗藍牙Ble(藍牙低功耗),它們的開發API是不同的。本文重點介紹BLE藍牙發展,傳統藍牙不發達,有需要可以自己了解壹下。

與傳統藍牙和BLE低功耗藍牙相比,其主要特點是快速搜索、快速連接、超低功耗和數據傳輸。

客戶

計算機網絡服務器

Android4.3(API等級18)開始引入BLE的核心功能,並提供相應的API。應用程序通過這些API掃描藍牙設備,查詢服務,讀寫設備的特征。

BLE藍牙協議是GATT協議,BLE相關類不多,都在android.bluetooth包和android.bluetooth.le包的幾個類裏:

android .藍牙。

。BluetoothGattService包含多個特征(屬性特征值),以唯壹的UUID作為標識。

。BluetoothGattCharacteristic包含單個值和多個描述符,用唯壹的UUID作為標識。

。BluetoothGattDescriptor描述特征並包含壹個唯壹的UUID作為標識。

。藍牙Gatt客戶端相關

。BluetoothGattCallback客戶端連接回調

。BluetoothGattServer服務器相關

。BluetoothGattServerCallback服務器連接回調

android .藍牙. le。

的廣播回撥。廣告回調服務器

的廣播數據。公布數據服務器。

的廣播設置。廣告設置服務器。

的廣播。藍牙服務器

。藍牙掃描器客戶端掃描相關(在Android5.0中添加)

。ScanCallback客戶端掃描回調

。ScanFilter客戶端掃描過濾

掃描結果的廣播數據。ScanRecord客戶端。

。ScanResult客戶端掃描結果

。掃描設置客戶端掃描設置

BLE設備分為兩種:客戶端(也叫主機/中央設備/中央)和服務器(也叫從機/外設/外設)。

客戶端的核心類是BluetoothGatt。

服務器的核心類是BluetoothGattServer和BluetoothLeAdvertiser。

BLE數據的核心類別是bluetooth GATT字符型和bluetooth GATT描述符型。

下面詳細講解客戶端和服務器的開發步驟。

Android手機涉及藍牙權限,藍牙開發需要在AndroidManifest.xml文件中添加權限聲明:

在搜索設備之前,您需要請求打開手機的藍牙:

註意:BLE設備地址是動態的(每隔壹段時間就會改變),而經典藍牙設備出廠時是固定的!

通過掃描BLE設備,根據設備名稱區分目標設備,下壹步實現與目標設備的連接,連接設備前停止搜索藍牙;停止搜索通常需要壹些時間。最好調用停止搜索功能,延遲100ms,保證系統可以完全停止搜索藍牙設備。停止搜索後啟動連接過程;

BLE藍牙的連接方法比較簡單,調用connectGatt方法即可;

參數描述

與設備建立連接後,與設備進行通信,整個通信過程在BluetoothGattCallback的異步回調函數中完成;

BluetoothGattCallback中的主要回調函數如下:

上述回調函數在ble開發中是不可或缺的。

呼叫目標設備後。ConnectGATT (context,false,gattcallback),系統會主動發起與BLE藍牙設備的連接。如果成功連接到設備,它將回調onConnectionStateChange方法,其處理過程如下:

判斷新狀態= =藍牙gatt。state _ connected表示此時設備已成功連接;

mbluetoothgatt . discover services();

掃描BLE設備服務是安卓系統BLE藍牙開發的重要壹步。壹般在設備連接成功後調用,掃描設備服務後回調onServicesDiscovered()函數。功能原型如下:

BLE藍牙的開發主要由負責通信的BluetoothGattService完成。何時和被叫通信服務。通信服務通過硬件工程師提供的UUID獲得。采集方法如下:

具體操作方式如下:

開啟監控,即建立與設備通信的第壹個數據通道。在BLE開發中,只有當客戶端成功打開監控時,它才能與服務器發送和接收數據。打開監控的方法如下:

BLE壹次寫入的數據大小是有限的,通常為20字節。您可以嘗試通過requestMTU增加它,但不能保證成功。分包是壹種解決方案,需要定義分包協議。假設每個數據包的大小為20字節,則有兩種數據包,數據包和非數據包。對於壹個數據包,前兩個字節代表包的序列號,其余的用數據填充。對於非數據包,主要是發送壹些控制信息。

監控成功後,可以通過向writeCharacteristic寫入數據來實現與服務器的通信。書寫方法如下:

其中:value壹般是十六進制格式的命令,其內容由設備通信的藍牙通信協議規定;

如果寫命令成功,回調BluetoothGattCallback中的onCharacteristicWrite()方法,表示數據已經發送到下位機;

如果發送的數據符合通信協議,服務器會將相應的數據回復給客戶端。發送的數據是通過回調onCharacteristicChanged()方法得到的,處理方法如下:

通過向服務器發送指令,獲取服務器的回復數據,即可完成與設備的通信過程;

完成與設備的通信後,請務必斷開與設備的連接。調用以下方法斷開與設備的連接:

源代碼上傳在CSDN上,有需要可以參考。

= = = = = = & gt;Android藍牙Ble通信的Demo樣例源代碼——掃描、連接、發送和接收數據、分包和解包。

BLE壹次寫入的數據大小是有限的,通常為20字節。您可以嘗試通過requestMTU增加它,但不能保證成功。分包是壹種解決方案,需要定義分包協議。假設每個數據包的大小為20字節,則有兩種數據包,數據包和非數據包。對於壹個數據包,前兩個字節代表包的序列號,其余的用數據填充。對於非數據包,主要是發送壹些控制信息。

整個過程如下:

1.如下定義通信協議(這只是壹個例子,可以根據項目需求進行擴展)。

2.封裝通用數據傳輸接口(拆包)

接口根據要發送的數據內容,將其拆分成最大字節(壹般為20字節)放入隊列。拆分後,它從隊列中取出,依次發送。

3.封裝通用接收數據接口(打包)

接口根據接收到的數據,按照協議中的定義分析數據長度是否是壹個完整的包,如果不是,累加每條報文。

4.分析完整的數據包,進行業務邏輯處理。

5.加密和解密也可以引入到協議中。選擇算法參數時,加密長度應與原始數據長度壹致,不影響解包和分組。

壹般是安卓版本的適配和不同ROM型號的權限(小米/紅米,華為/榮耀等。)(EMUI,MIUI,ColorOS等。).

藍牙的發展有很多問題,要靜下心來分析問題,肯定是可以解決的。走吧。

  • 上一篇:高考題目
  • 下一篇:海底撈無限道具版
  • copyright 2024編程學習大全網