日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BLE-NRF51822-实现简单扫描器

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BLE-NRF51822-实现简单扫描器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在sdk目錄

XXX:\Keil_v5\ARM\Pack\NordicSemiconductor\nRF_Examples\9.0.0\ble_central? 下有官方提供的主從連接的demo.




官方的demo中實現的是主機通過名字來判斷 周圍的設備是否是自己要尋找的設備,如果是就發起來接。 并且連接建立后可以繼續保持偵聽,一共可以連接8個設備。 連接上后,從機可以通過按鍵button1 來讓主機的對應的led亮。這個例子是要在官方板pca10028上才可以看到現象的,其他的板子如果不兼容需要自己修改buttonled的引腳。

?

這里就在這個 central的例子上做一個簡單的偵聽器。

?

官方demo里面的main函數很簡單如下圖所示



?

app_trace_init用來初始化打印模塊,工程默認是關閉打印宏的,所以這個函數你右擊找到的定義是空的。需要通過定義ENABLE_DEBUG_LOG_SUPPORT 來打開打印功能。



?

然后就是LED初始化,按鍵初始化(這個按鍵初始化是用來設置一個從深度睡眠中喚醒的引腳)。 協議棧初始化。

Client_handling_init初始化主要是用來注冊自己想要找到的服務。比如你注冊了服務A和對應的處理函數, 那么等主從機連接上后,并且服務發現完成后,就會判斷發現的服務中是否有你之前注冊的想要找的服務A有就會執行對應的回調處理函數。這個例子中我們沒有用到,暫時不用關心。

Device_manager_init 用來初始化設備管理了,管理綁定信息之類的,這里也不需要用到

初始化完成后,調用 scan_start就可以進行廣播了。



?

前面一部分是判斷 是否有正在處理的flash訪問操作。如果有就暫時不啟動廣播,沒有才會啟動廣播。? 如果前面真的做了flash訪問操作,并且沒有完成豈不是不能廣播了?

如果真有,廣播會在flash操作完成后進行。相關代碼如下

Flash操作完成首先會進入下面代碼




?

在判斷到flash訪問完成后,清除正在訪問flash的標志,并且調用啟動廣播函數scan_start。

scan_start最終調用如下協議棧API

uint32_t sd_ble_gap_scan_start

(

ble_gap_scan_params_t?const *?

p_scan_params

)
?

?

找到m_scan_param參數定義



值的意義依次為:

0,表示只偵聽廣播,不主動發起scan_req請求。

0,表示偵聽所有廣播包,不做過濾。

NULL,沒有白名單

掃描間隔,和掃描窗口。(比如1s的間隔和0.5s的窗口,那么每1s就會啟動偵聽,但是只偵聽0.5s,只會休眠。等待下一個1s到來)

0,表示沒有掃描超時,即設備會一值偵聽除非主動關閉掃描

?

啟動廣播之后,設備就會不斷偵聽其他設備的廣播。

當收到廣播數據后,協議棧會上拋一個BLE_GAP_EVT_ADV_REPORT事件給上層,所以實現一個簡單的偵聽器,我們直接在事件處理中添加一個 BLE_GAP_EVT_ADV_REPORT事件的分支,并在該分支中提取收到的廣播數據就可以了。

?

官方的例子里面已經有針對 BLE_GAP_EVT_ADV_REPORT這個事件的處理了。




?

代碼中就是從廣播數據中提取了 設備名 然后判斷是不是自己要連的那個設備。

?

我們不需要動這些代碼,直接在前面添加廣播數據的打印就可以了。如圖所示



?

打印結果如圖所示



? ? 關于adv data的數據怎么解析,參考 教程 ble廣播數據解析。

?

廣播數據結構體中還有一個scan_rsp 沒有使用


這個為是用來區分 當前的廣播數據是普通廣播數據,還是收到的掃描響應數據(掃描者發送了scan_req,如果廣播者可以響應則會回復scan_rsp)。

如果需要區分自己判斷一下就行了

總結

以上是生活随笔為你收集整理的BLE-NRF51822-实现简单扫描器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。