藍牙模塊測試那些事之從機測試

来源:https://www.cnblogs.com/Sharemaker/archive/2023/01/14/17050946.html
-Advertisement-
Play Games

本文主要目的是在拿到一個藍牙模塊後,將其作為從機來對一些基本的軟體功能進行測試,用以快速驗證是否滿足基本的使用需求和功能指標。 ...


​  摘要:本文主要目的是在拿到一個藍牙模塊後,將其作為從機來對一些基本的軟體功能進行測試,用以快速驗證是否滿足基本的使用需求和功能指標。針對測試的方法和測試的項目進行總結,作為對藍牙模塊從設備模式下的功能的一個初步評估。

一、測試目的

        1、快速驗證藍牙模塊從機模式下的基本功能。

        2、初步評估藍牙模塊從機模式下通信參數指標是否滿足軟體功能需求。

        3、掌握藍牙調試助手的使用方法。

        4、熟悉藍牙模塊從機相關測試方法。

        5、熟悉藍牙模塊相關設置命令和含義。


二、測試工具

硬體:

        1、藍牙模塊一個,後續需要根據藍牙模塊是單模還是雙模進行針對性的協議測試。

        2、USB轉串口線,用於連接藍牙模塊和PC端通信,設置命令和數據收發,當然藍牙模塊還有別的類型的介面,這裡僅對串口藍牙模塊進行測試。

        3、手機一個或多個,用於連接上藍牙模塊後收發數據,可以使用多個品牌的手機,進行不同手機系統相容性測試。

軟體:

       1、PC端串口調試工具軟體,用於收發從藍牙模塊串口的數據,如sscom,xcom,Secure CRT等。

        2、手機端藍牙調試助手,用於和藍牙模塊連接後,通過手機藍牙收發藍牙模塊的空中數據。根據用的藍牙模塊是單模還是雙模選擇,如BLE調試助手,SPP調試助手,調試全能王等。

關於藍牙調試助手:

        1、針對不同協議進行測試時使用的藍牙助手工具也不同,分別使用SPP藍牙助手和BLE藍牙助手。

        2、打開藍牙調試助手,搜索藍牙設備,找到需要測試的藍牙模塊進行連接。

        3、藍牙服務相關

        連上之後,就會看到幾個藍牙服務,實時日誌里也會看到連接狀態的提示;使用藍牙對外提供服務的設備,需要有對應的服務功能。藍牙服務分為服務、特性、屬性三個部分:

(1)、服務(Service)

        每一個具體的藍牙應用是由多個服務(Service)組成的,而每一個服務(Service)又是由多個特性(Characteristic)組成的。服務(Service) 可以理解為一個房間,當這個房間為空的時候他什麼也不是,不能提供任何的服務功能,所以,房間裡面至少需要有一個或多個傢俱,不同的傢俱有不同的功能,這就是特性(Characteristic)。不同的服務(Service)應該有不同的編號(UUID),用以區分不同的服務(Service)。

        比如藍牙連上之後,可以看到這幾個藍牙服務,Generic Access、Generic Attribute、Device Information以及Unknown Service。

(2)、特性(Characteristic)

        特性(Characteristic) 是依附於某個服務(Service)的,就像前面說到房間里每樣傢俱可以提供與之相關的不同功能。同樣,我們需要給每樣傢俱分配一個編號,這就是特性(Characteristic)的UUID。我們知道,每種傢俱會有一個或多個不同的子功能,這個子功能就是特性(Characteristic)所包含的屬性(Property) 。例如床單可以更換、床的高低可以調整。

        比如服務Generic Access的含義是“通用訪問”,下麵有特性:

        DeviceName,設備名。

        Appearance,說明自己是個什麼設備(比如藍牙滑鼠)。

        Peripheral Preferred Connection Parameters,外設首選連接參數。

        服務Generic Attribute的含義是“通用屬性”,下麵有特性:

        ServiceChanged,服務改變。

(3)、屬性(Property)

        通常的數據交互的屬性有如下幾個:

        Read:讀屬性,具有這個屬性的特性是可讀的,也就是說這個屬性允許手機來讀取一些信息。手機可以發送指令來讀取某個具有讀屬性UUID的信息。

        Notify:通知屬性, 具有這個屬性的特性是可以發送通知的,也就是說具有這個屬性的特性(Characteristic),藍牙模塊可以主動發送信息給手機。Notify是一直讀取,Read是想讀取的時候讀取。

        Write:寫屬性, 具有這個屬性的特性是可以接收寫入數據的。通常手機發送數據給藍牙模塊就是通過這個屬性完成的。這個屬性在Write 完成後,會發送寫入完成結果的反饋給手機,然後手機再可以寫入下一包或處理後續業務,這個屬性在寫入一包數據後,需要等待應用層返回寫入結果,速度比較慢。

        WriteWithout Response:寫屬性,從字面意思上看,只是寫,不需要返回寫的結果,這個屬性的特點是不需要應用層返回,完全依靠協議層完成,速度快,但是寫入速度超過協議處理速度的時候,會丟包。

        Indication:在手機收到藍牙模塊數據後會主動回一個應答,有確認機制,藍牙模塊收到應答後才繼續發送下一個數據,保證數據正確到達,也起到了流控的作用。Notify無確認機制,不會保證數據發送是否到達。

(4)、UUID

        通用唯一標識符。是藍牙組織聯盟定義的用於區分藍牙服務和特性的的標識符,總長度為128 Bit。UUID 用於標識藍牙服務以及通訊特征訪問屬性,不同的藍牙服務和屬性使用不同的訪問方法,就像人們語言交流一樣,語言相同才能正常交流(找到正確的UUID,才能使用正確的功能)。

        簡單理解UUID就是編號,對應不同服務的一個唯一的編號,用於區分不同的服務及服務特性的個體。服務和特性都有各自的UUID。他很像網路應用中的埠號,例如80是HTTP協議的埠,他提供的是HTTP服務。

        為了明確標準的藍牙服務,藍牙技術聯盟SIG定義UUID共用了一個基本的UUID。總共128Bit,據藍牙官網Assigned Numbers | Bluetooth® Technology Website里的文檔Service Discovery,可以看到基本的UUID為:

        128Bit的UUID占用16個位元組,在變成個傳輸的時候都很不方便,所以藍牙聯盟定義了一個UUID的基地址,允許在此基礎上使用16Bit的UUID,進一步簡化基本UUID:

        0x0000xxxx-0000-1000-8000-00805F9B34FB

        每一個藍牙技術聯盟定義的屬性有一個唯一的16BitUUID,以代替上面的基本UUID的‘x’部分。使用16Bit的UUID便於記憶和操作,如SIG定義了“Device Information”的16BitUUID為0x180A。

        也就是說,不管是什麼樣的藍牙設備,只要你提供設備信息(Device Information) 的服務功能,就必須使用”0x180A“的UUID號。這樣,當應用程式需要讀取這藍牙設備的設備信息時,只需要找到對應UUID號為0x180A的服務,就可以獲取到。

        技術聯盟已定義好較多的標準服務UUID。根據藍牙官網的16bit UUID文檔,可以看到:

        同時,也允許廠商定義自己的UUID,以滿足已定義服務外的功能實現。很多廠家的藍牙串口模塊(及某些服務)並沒真正使用規定的標準UUID編號,而使用自己定義的UUID。


三、測試項目

1、協議功能

        藍牙模塊按照對藍牙協議棧支持的數量可以分為單模模塊(經典藍牙或低功耗藍牙)和雙模模塊(經典藍牙和低功耗藍牙),如經典藍牙的數據傳輸基於SPP協議,低功耗藍牙的數據傳輸基於BLE協議。同樣針對不同協議進行測試時使用的藍牙助手工具也不同,分別使用SPP藍牙助手和BLE藍牙助手,後續的測試項目中針對藍牙模塊支持的協議的不同,要使用對應的藍牙助手進行連接以應對不同協議的測試。

2、波特率支持

        主要是選用藍牙模塊規格書中支持的藍牙串口波特率來進行和手機通信測試,一般藍牙模塊都有對應的命令對藍牙模塊的波特率進行修改。根據項目的藍牙模塊串口通信要求,為藍牙模塊設置對應的波特率,從而滿足單位時間內數據帶寬的要求,這裡的波特率指的是藍牙模塊上硬體串口的數據吞吐量,實際要看透傳理論最大空中速度(如一定距離內,數據從模塊發送至手機的空中速度為10KB/s),只要串口的輸入速度小於等於數據在空中的發送速度,模塊就沒有位元組限制。實際速度會根據軟硬體差異、環境、距離等的不同而有所差異。

        為藍牙模塊設置好固定的波特率後,需要在PC端串口調試工具上設置好對應的波特率進行數據收發。

3、發送間隔

        在對應的藍牙協議模式下,分別在手機藍牙助手上設置數據自動發送的間隔和PC端串口工具的自動發送間隔,設置好後,可以測試手機給藍牙模塊發送或者藍牙模塊給手機發送,以及手機和藍牙模塊同時互相發送這種全雙工通信的情況,主要是為了模擬在軟體程式開發中實際通信時的每包數據的發送間隔,驗證在設置的數據包時間間隔下的通信效率。當然,測試時需要設置好相互發送的每包數據長度。

        分別在PC端串口調試工具和藍牙調試助手上設置好每包數據迴圈發送的時間間隔,觀察互發互收的情況。

4、丟包率

        指測試中所丟失數據包數量占所發送數據的比率。手機藍牙助手和PC端的串口工具都可以檢測到數據包發送的數量和接收的數量,因此可以為藍牙模塊設定好固定的波特率,以及分別在藍牙助手和PC端串口工具上設置需要發送的數據包長度,在一定通信距離和時間內測試手機給藍牙模塊發送或者藍牙模塊給手機發送,以及手機和藍牙模塊同時互相發送這種全雙工通信的情況,觀察雙方收發數據包的個數是否有丟失。

        可以分別在PC端串口調試工具和藍牙調試助手上觀察相互收發的數據位元組長度,來確認是否有數據丟包的情況。

5、通信距離

        測量通信距離是使用用手機離藍牙模塊一段距離後通信的數據是否正常,當然,這個和具體藍牙模塊設計的射頻發射功率,接收靈敏度,收發環境,空中速率,無線電壓以及天線的類型和位置有關係,同樣可以選定不同的場景測試,如直線或非直線距離,是否穿牆及穿牆的層數等。一般可以先通過命令修改好藍牙模塊的射頻功率,同時配置好數據發送間隔和包長等參數後,進行一個初步模擬實際使用時的通信距離測試。

        可以在藍牙調試助手上看到掃描到的模塊信號的強度,dbm 中文是分貝毫瓦,是一個表示無線功率的絕對值。它的數值是以1mw功率為基準的一個比值。計算公式如下:dbm=10log(p/1mw)

        為什麼常見的信號強度都是負數的值呢?因為1mw = 0 dbm, 而隨著信號在空間內傳播,又受到障礙物的干擾,能量會衰減,所以常見的接收端顯示的信號強度都為負值,表示比1mw弱。由此也可以得知,信號強度這個值越大,表示信號越好。比如-30dbm比-90dbm好。

        嘗試分別在近距離和遠距離測試藍牙模塊,可以在藍牙調試助手上觀察到信號強度的變化。

  

6、通信回連測試

        如果一個藍牙設備已經與藍牙中心設備連接上,那麼當該藍牙設備的斷電重啟,其依然會和配對過的中心主設備連接上,而不需要重新走配對的流程,這個過程叫做回連。

        當設備重啟之後,藍牙協議棧以及所有的上層的profile都要重新進行初始化,之前的配對信息是保存在文件bt_config.conf中,藍牙起來之後,會去載入這個文件,去解析曾經配對過的設備,對於已經配對過的設備,並且配對信息保持完整,那麼就會對該設備發起回連。手機連接藍牙模塊後,藍牙模塊斷電再上電,在藍牙調試助手上觀察藍牙模塊回連狀態。

7、通信穩定性

        需要說明的是這裡的通信穩定性僅僅是在正常的環境下,對藍牙模塊進行一個基本綜合測試。主要是進行一個長時間的手機和藍牙模塊通信數據收發測試,選定好波特率、包長、通信包發送時間間隔、通信距離等參數後,進行例如1h或更長時間的數據收發測試後,檢查是否有丟包,誤碼,斷連等異常情況發生。

8、相容性測試

        安卓手機版本眾多,各大安卓品牌都深度定製,略有差異。所以為了達到好的效果,需要使用不同品牌和型號的手機來測試藍牙模塊的數據傳輸,這也是有必要的。


四、總結

        最後用一張思維導圖作為藍牙模塊從機的測試總結。


 更多技術內容和書籍資料獲取敬請關註微信公眾號“明解嵌入式”

本文來自博客園,作者:Sharemaker,轉載請註明原文鏈接:https://www.cnblogs.com/Sharemaker/p/17050946.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2023-01-12 一、Mybatis中緩存機制 1、一級緩存 (1)概述:一級緩存(即本地緩存或SqlSession級別緩存) (2)特點: ①一級緩存預設開啟 ②不能關閉 ③可以清空 (3)緩存原理 ①當第一次獲取數據時,需要先從資料庫中載入數據,將數據緩衝到Mybatis一級緩存中(緩存底層 ...
  • 1 簡介 為了更好的版本控制和問題定位,我們需要知道正在運行的應用是什麼版本,什麼時候打包的,Git的相關信息等。通過/actuator/info可以幫助我們獲取這些信息。 2 配置 首先要有actuator的依賴: <dependency> <groupId>org.springframework ...
  • .Net6中想實現對某個網址截屏,可通過Selenium模擬訪問網址並實現截圖。 實現 安裝Nuget包 <PackageReference Include="Selenium.Chrome.WebDriver" Version="85.0.0" /> <PackageReference Inclu ...
  • ABP Framework 在架構上有四大目標:模塊化、DDD、多租戶和微服務。從 `7.0` 更新的功能來看,其側重點轉向微服務場景的實現,比如:Dapr 集成、動態許可權和功能、外部本地化、分散式實體緩存服務,都是對微服務和分散式架構所提出的解決方案。 ...
  • public class SerializeHelper { #region 二進位格式 /// <summary> /// Binary 序列化使用前需要標記類可序列化 /// </summary> /// <param name="fileName">序列化到指定的文件</param> /// ...
  • Helix 解碼庫提供了MP3內容的MPEG相容解碼, 支持可變比特率, 恆定比特率以及立體聲和單聲道音頻格式. Helix 的定點解碼庫專門針對ARM處理器進行了優化. Helix 解碼庫是以幀為解碼單位的, 一次解碼一幀, 運行需要占用的資源很少, 可以在任何能夠執行長整數乘法運算(兩個32位輸... ...
  • 以下介紹PY32F0系列在Ubuntu下如何使用GCC Arm Embedded Toolchain環境進行開發和燒錄. GitHub 倉庫地址: https://github.com/IOsetting/py32f0-template ...
  • PY32F0 屬於 32位 M0 內核的MCU, 配置上有 16KF+2KR, 20KF+3KR, 32KF+4KR, 64KF+8KR 這些組合, 根據外設的豐富程度分成了 PY32F002, PY32F003, PY32F030, PY32F072 這四個系列, 另外還有一家芯嶺科技貼牌的 XL... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...