BLE NRF51822教程6 建立乙個自己的服務

2021-07-25 19:28:56 字數 1267 閱讀 9089

該教程基於 sdk9.0

首先開啟 sdk 下的工程模板 在以下路徑中

開啟工程後,可以發現該模板的框架和 一般工程例子基本是一樣的。區別 就是有一些函式內部並未實現,比如 services_init() 。

main 函式的整體初始化流程都是通用。

int main(void)

}這一講我們來在該模板上建立個使用最少資源的 服務。

我們只是建立乙個 服務 這個服務具有可寫和通知的特性。從而實現手機發數 這個服務具有可寫和通知的特性。從而實現手機發數 據給裝置,然後對數做 加 1操作 後再返回給手機。

所以我們沒有使用 定時器, 按鍵定時器, 按鍵led ,以及繫結功能我們也不做鏈結引數的 ,以及繫結功能我們也不做鏈結引數的 ,以及繫結功能我們也不做鏈結引數的 ,以及繫結功能我們也不做鏈結引數的 更新操作 所以上面的 main 函式我們精簡成如下:

int main(void)

}只是連線後並沒有服務,下面我們來建立乙個服務。 要實現的 就是上面services_init() 函式。

首先我們需要定義乙個自己的服務結構體來記錄這相關些資訊。

直接在 main.c 檔案的上面 定義如下結構體。

typedef struct blkmyservicetagblkmyservice;

然後定義乙個全域性變數

blkmyservice my_service; // 這個全域性變數儲存了我們的服務相關資訊

然後實現 service_init() 函式。

這裡不使用模板工程中 建議的初始化方法,為簡單起見我 們就直接在該函式裡面呼叫服務新增和特徵值。

為方便也是直接就在 main.c 檔案中實現如下函式

void services_init(void)

服務 建立完後就是與手機 建立完後就是與手機 建立完後就是與手機 建立完後就是與手機 通訊了。我們要實現的是手機傳送乙個 資料

裝置收到後對資料做 加 1 操作後再發回給手機。

先實現對寫事件的處理。就是將資料 加一 然後在傳送回給手機。

我們針對寫事件實 我們實現如下的數 據操作和傳送函( 為方便都是直接在 main.c 文 件中實現 )

void servic e_write_handle(ble_evt_t *p_evt)

然後實現的服務處理函式如下

void my_server_handler(ble_evt_t *p_evt)

}最後我們將這個 服務事件處理函式 新增到事件派發函式中

static void ble_evt_dispatch(t * p_evt)

BLE NRF51822教程 RSSI獲取

當手機和裝置連線上後,裝置端可以通過獲取rssi來 在一定程度上判斷手機離裝置的相對距離的遠近。獲取函式很簡單直接呼叫sd ble gap rssi get介面函式就行了,傳入連線控制代碼和buff就能獲取到 最近一次連線事件中的 接收訊號強度。呼叫該函式之前需要先呼叫sd ble gap rssi...

BLE NRF51822教程8 動態廣播

本講接收如何實現動態廣播。教程基於 9.0 sdk中的 uart例子。實現動態廣播的方法是 廣播 停止廣播 修改引數 重啟廣播 所以我們通過乙個定時器來週期性的 關閉廣播然後再修改廣播資料之後再開啟廣播。sdk 9.0中的廣播搞了好幾個模式,做的有點麻煩,所以我對他做了比較大的改動。首先 在main...

BLE NRF51822教程8 動態廣播

ble nrf51822教程8 動態廣播 2015 12 29 17 38 35 分類 嵌入式 本講接收如何實現動態廣播。教程基於 9.0 sdk中的 uart例子。實現動態廣播的方法是 廣播 停止廣播 修改引數 重啟廣播 所以我們通過乙個定時器來週期性的 關閉廣播然後再修改廣播資料之後再開啟廣播。...