一、nrf52 靜態密碼配對
我們先來了解下關於藍牙配對的幾個參數,我的例程是按照這個參數設置的。我用的SDK是15.2的,工程是
\examples\ble_peripheral\ble_app_hrs\pca10040\s132\arm5_no_packs。
網上也有很多講靜態密碼配對的,我也嘗試了,根本行不通,估計舊的SDK上面是可以實現的。
#define SEC_PARAM_BOND 1 //綁定
#define SEC_PARAM_MITM 1 //中間人
#define SEC_PARAM_LESC 1 //低功耗加密
#define SEC_PARAM_KEYPRESS 0 //按鍵通知使能
#define SEC_PARAM_IO_CAPABILITIES BLE_GAP_IO_CAPS_DISPLAY_ONLY //只顯示
#define SEC_PARAM_OOB 0 //外帶 ,比如NFC
#define SEC_PARAM_MIN_KEY_SIZE 7 //最小加密密鑰長度
#define SEC_PARAM_MAX_KEY_SIZE 16 //最大加密密鑰長度
IO輸出能力有以下幾種
安全加密模式有以下幾種
安全進入配對方式有以下幾種
理解了以上幾個參數後,我們來進行操作
首先,對上面幾個參數進行設置,如前面的參數設置。
其次,在gap_params_init()函數後面添加以下代碼,設置靜態密碼,STATIC_PASSKEY “123456”
static void set_password(void)
{
ret_code_t err_code;
ble_opt_t passkey_opt;
uint8_t passkey[6];
memcpy(passkey,STATIC_PASSKEY,6);
passkey_opt.gap_opt.passkey.p_passkey = passkey;
err_code = sd_ble_opt_set(BLE_GAP_OPT_PASSKEY, &passkey_opt);
APP_ERROR_CHECK(err_code);
}
再者,修改services_init()函數裏面的對於安全進入的設置,將SEC_OPEN的地方全改成SEC_MITM。
編譯OK後,測試OK,如圖
注意一點的是,因爲是使能了綁定功能的,所以,斷開連接後需要手機端設置裏清除配對信息,然後從機設備端也要清除配對信息,使用以下操作清除配對信息,當你再次連接的時候就不會出錯了,不然重新連接的時候總是報錯,禁止操作。
if (erase_bonds == true)
{
// Scanning and advertising is done upon PM_EVT_PEERS_DELETE_SUCCEEDED event.
delete_bonds();
}
以上的靜態密碼配對希望對大家有所幫助。