在nRF52DK上廣播定制廣告數據:藍牙LE教程
了解如何將nRF52開發工具包轉變為可廣播靜態或動態自定義數據的藍牙低能量信標。
本文引用地址:http://www.j9360.com/article/202409/462784.htm正如我們在上一篇文章中了解到的那樣,藍牙低能量(LE)數據傳輸可以分為兩類:
?面向連接。
?無連接。
讓我們來研究一個無連接通信的情況,也就是說,一個廣播定制數據的藍牙LE設備。
這在現實世界中并不少見。例如,藍牙LE信標被用于商店、博物館和機場,以提供基于位置的服務。它們的功能是將包含唯一代碼的靜態自定義數據廣播到附近的設備,例如我們的手機。
還有動態定制數據,這是環境傳感器可以用來報告農業設施濕度水平的實時變化。嵌入式定制數據提供了一個平臺,用于交流標準數據類型未處理的專有信息或不同功能。
在本教程中,我們將使用Nordic Semiconductor的nRF52DK(開發工具包)和VS Code的nRFConnect軟件開發工具包來創建廣播自定義數據的信標。和許多其他藍牙LE工程師和愛好者一樣,我發現nRF52系列能夠相對方便地設計和測試藍牙LE應用程序。
首先,我們的信標將廣播靜態定制數據。然后,我們將對它進行調整,以便它廣播自定義數據。然而,在我們做任何這一切之前,我們需要簡單地回顧一下我們的數據是如何結構化的。
廣告數據結構和類型
當藍牙LE設備正在廣播時,它發送廣告數據包(有時還掃描響應數據包)。每個數據包中的信息都以特定的方式進行組織。圖1展示了該組織的視覺表現。
藍牙低能量傳統廣告包中的數據組織。
?圖1。圖像由MDPI提供
順便說一下,這個圖中給出的最大字節數是用于傳統的,而不是擴展的,廣告模式。這對于我們的目的來說沒問題——我們將在全文中使用傳統的廣告模式。
在圖1的底部兩個部分中,我們可以看到每個廣告數據(AD)數據包都包含一個或多個AD結構。每個結構依次包括以下字段:
長度:這占1個字節,并指定后續數據字段的長度,包括AD類型,但不包括其本身。
AD類型:也占1個字節。確定以下數據類型。
AD數據:這是與AD類型關聯的實際數據內容。此字段的長度是可變的,但可以從“長度”字節中推斷出來。
AD類型必須來自藍牙核心規范中定義的AD類型列表。我們將使用指定為0xFF的制造商特定數據類型。顧名思義,這種AD類型使制造商能夠在其廣告中嵌入自定義數據。
對于制造商特定數據類型,AD數據的最初兩個字節表示公司ID。公司ID是藍牙SIG根據請求分配給成員公司的唯一編號。指定公司標識后,制造商會以其選擇的任何格式附加自定義數據。
回想一下,整個傳統廣告數據包的最大長度為31個字節。使用制造商特定數據時,數據包要求:
1個字節用于指定長度。
公司編號為2個字節。
這樣每個數據包就有27個字節用于定制數據。
隨著這一切,我們準備繼續前進,并將我們的知識投入使用!
靜態數據用例:廣播設備狀態和消息
想象一下,你想要使用nRF52DK作為一個房間或工作站的基本狀態信標。可指示工作站是否被占用或空閑。我們將通過簡短的自定義消息來做到這一點:當有人時,“會議正在進行”,而當沒有人時,“免費使用”。
第1步:申報公司ID
由于我們使用Nordic Semiconductor的nRF52DK板進行教育,我們可以使用他們的公司標識符
第2步:聲明自定義數據的結構
在本項目中,我們的定制數據結構將包括:
公司ID(2字節):我們以Nordic Semiconductor公司ID開始播出數據。
狀態(1個字節):這可以指示房間是否被占用(1)或空閑(0)。
消息(最多24個字節):自定義消息,如“正在進行會議”或“免費使用”
下面的代碼片段顯示了結構。
第3步:在掃描響應廣告包中包括制造商特定數據
使用nRF Connect SDK,可以使用BT_data()宏將這個自定義數據包括在廣告數據包中。
完整的代碼包括在本條款的結尾,作為代碼附錄A。
動態數據用例:實時廣播狀態變化
在前面的示例中,我們展示了廣播靜態定制數據,特別是房間的狀態及其相關消息。但如果我們的應用程序要求我們廣播正在變化的數據,又會怎樣呢?這就是發送動態數據的便利之處。當開發能夠反映即時狀態變化的傳感器廣播器或設備時,它尤為有用。
為了進行演示,讓我們升級我們的基本房間狀態信標,以便它使用nRF52板上的內置按鈕。按下按鈕,設備顯示“正在開會”。放開,它會切換到“免費使用”。nRF52內置的LED會亮起顯示“會議進行中”,然后熄滅顯示“免費使用”
要使用nRF Connect SDK廣播動態數據,我們使用bt_le_adv_update_data()函數,它允許我們在廣告進行時更新廣告數據。這使得廣播數據能夠實時反映變化。
您可以在代碼附錄B中查看該版本信標的所有代碼。
查看結果
最后,是時候檢查代碼是否有效了。圖2顯示了用于VS代碼的nRF連接的輸出。
顯示信標已成功開始廣播的VS代碼輸出。
?圖2。信標開始工作。圖片由恩塔蒂西?赫拉皮西提供
如您所見,信標已成功開始廣播。
圖3和4是我的nRF Connect移動應用程序中的圖像。圖3顯示了當按下并釋放nRF52上的按鈕時,我的手機收到的消息是如何變化的。
按下nRF52DK按鈕(左)和松開(右)時,范圍內電話接收到的消息。
?圖3。按下nRF52DK按鈕(左)和釋放(右)時,房間信標廣播的消息。圖片由恩塔蒂西?赫拉皮西提供
在圖4中,我們看到的是數據而不是自定義文本。請注意,從Nordic Semiconductor的公司ID開始,右側圖像中的類型0xFF(制造商特定數據)值如何與左側圖像中的值匹配。
說明信標廣播的定制數據的屏幕截圖。
?圖4。說明信標廣播的定制數據的屏幕截圖。圖片由恩塔蒂西?赫拉皮西提供
這只是一個簡單的例子,說明自定義數據可以用于什么。。如果您想要構建這個項目的自己版本,所有必要的代碼都包含在下面的兩個附錄中。
評論