【已解决】Esp32-C3 作为BLE Client时连接从机需要密码

Moderator: ESP_Bob

RunningDamin
Posts: 2
Joined: Mon Jun 06, 2022 1:29 am

【已解决】Esp32-C3 作为BLE Client时连接从机需要密码

Postby RunningDamin » Wed Jun 07, 2023 8:04 am

您好,我这边使用Esp32-C3开发了一个蓝牙主机,需要连接客户的蓝牙从机,连接过程客户需要连接密码,除了这个连接密码之外,其他通信都不加密,请问我该如何做才能完成带有密码的连接?(客户的蓝牙从机是4.2的)

ESP_zhanghaipeng
Posts: 42
Joined: Thu May 04, 2023 3:49 am

Re: Esp32-C3 作为BLE Client时连接从机需要密码

Postby ESP_zhanghaipeng » Thu Jun 15, 2023 3:56 am

在 BLE 中,主要有下面几种加密算法:

- Just Works
- Passkey Entry
- Numeric Comparison (Only for LE secure Connections)
- Out Of Band(OOB)

具体使用哪种算法,是由配对模式和双方设备的 IO 能力共同决定的。你需要使用的加密算法是 “Passkey Entry”,

主机和从机,一个具有 Display 能力,另一个具有 Keyboard 能力,配对模式设置为 “ESP_LE_AUTH_BOND”,就可以使用该加密算法。

具体来说,IO 能力和 配对模式可以通过 “esp_ble_gap_set_security_param” API来配置,如下:

```
esp_ble_auth_req_t auth_req = ESP_LE_AUTH_BOND; //bonding with peer device after authentication
esp_ble_io_cap_t iocap = ESP_IO_CAP_IN; //KeyboardOnly
esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, sizeof(uint8_t));
esp_ble_gap_set_security_param(ESP_BLE_SM_IOCAP_MODE, &iocap, sizeof(uint8_t));
```



通过以上操作,就可以完成带有密码的连接,从机具有 Display 能力,打印出来 key,主机具有 Keyboard 能力,输入密码(esp_ble_passkey_reply())。

另外,esp-idf 提供了相关的 example 参考,下面是 example 的位置:

examples/bluetooth/bluedroid/ble/gatt_security_client
examples/bluetooth/bluedroid/ble/gatt_security_server

RunningDamin
Posts: 2
Joined: Mon Jun 06, 2022 1:29 am

Re: Esp32-C3 作为BLE Client时连接从机需要密码

Postby RunningDamin » Fri Jul 14, 2023 1:38 am

谢谢

Who is online

Users browsing this forum: No registered users and 8 guests