【已解决】Esp32-C3 作为BLE Client时连接从机需要密码
Posted: Wed Jun 07, 2023 8:04 am
by RunningDamin
您好,我这边使用Esp32-C3开发了一个蓝牙主机,需要连接客户的蓝牙从机,连接过程客户需要连接密码,除了这个连接密码之外,其他通信都不加密,请问我该如何做才能完成带有密码的连接?(客户的蓝牙从机是4.2的)
Re: Esp32-C3 作为BLE Client时连接从机需要密码
Posted: Thu Jun 15, 2023 3:56 am
by ESP_zhanghaipeng
在 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
Re: Esp32-C3 作为BLE Client时连接从机需要密码
Posted: Fri Jul 14, 2023 1:38 am
by RunningDamin
谢谢