#esp32 #bluetooth #ble #async

nightly no-std esp32-nimble

ESP32 NimBLE 蓝牙堆栈的包装器

25 个版本 (7 个破坏性更新)

0.7.0 2024年7月11日
0.6.0 2024年3月7日
0.4.0 2023年12月1日
0.3.2 2023年11月18日
0.0.4 2022年12月21日

#96 in 嵌入式开发

Download history 149/week @ 2024-05-04 72/week @ 2024-05-11 303/week @ 2024-05-18 107/week @ 2024-05-25 129/week @ 2024-06-01 82/week @ 2024-06-08 93/week @ 2024-06-15 78/week @ 2024-06-22 20/week @ 2024-06-29 133/week @ 2024-07-06 73/week @ 2024-07-13 66/week @ 2024-07-20 33/week @ 2024-07-27 50/week @ 2024-08-03 33/week @ 2024-08-10 39/week @ 2024-08-17

每月166 次下载
用于 2 crates

Apache-2.0

190KB
4.5K SLoC

NimBLE Rust包装器用于ESP32

crates.io build License Documentation

这是ESP32 NimBLE蓝牙堆栈的Rust包装器。受NimBLE-Arduino启发。

使用

将以下设置添加到项目中的 sdkconfig.defaults

CONFIG_BT_ENABLED=y
CONFIG_BT_BLE_ENABLED=y
CONFIG_BT_BLUEDROID_ENABLED=n
CONFIG_BT_NIMBLE_ENABLED=y
  • 要启用扩展广告,另外追加 CONFIG_BT_NIMBLE_EXT_ADV=y
    (仅适用于ESP32C3, ESP32S3, ESP32H2)

增加esp-ble任务堆栈大小以支持更重的计算负载

如果您通过蓝牙LE计算大量值或正在运行复杂/深层嵌套的代码,则可能需要增加 esp-ble 任务的堆栈大小。为此,请将以下设置添加到项目中的 sdconfig.defaults

CONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=7000 

默认值在ESP-IDf文档中定义,可能因设置而异,为4096或5120。

配置iOS自动重连

要启用与您的ESP32 BLE服务器无缝自动重连iOS设备,您需要调整 sdkconfig 文件和您的Rust代码中的设置。

更新 sdkconfig

在您的 sdkconfig 中包含此行

CONFIG_BT_NIMBLE_NVS_PERSIST=y

CONFIG_BT_NIMBLE_NVS_PERSIST 设置为 y 确保将绑定信息保存到设备的非易失性存储器(NVS)中。此步骤对于允许iOS设备在ESP32重置或关闭并重新打开后无需重新绑定即可自动重连至关重要。

在Rust代码中配置安全选项

在您的Rust实现中正确设置安全选项是关键

device
  .security()
  .set_auth(AuthReq::Bond) // Bonding enables key storage for reconnection
  .set_passkey(123456) // Optional, sets the passkey for pairing
  .set_io_cap(SecurityIOCap::NoInputNoOutput) // You can choose any IO capability
  .resolve_rpa(); // Crucial for managing iOS's dynamic Bluetooth addresses
  • .set_auth(AuthReq::Bond) 设置绑定,这对于存储启用未来自动重连的安全密钥至关重要。
  • .resolve_rpa():此函数对于适应iOS设备使用的不断变化的蓝牙地址至关重要,这是一个称为可解析私有地址(RPA)的功能。这对于保持与iOS设备的可靠和无缝连接至关重要,确保您的ESP32设备即使在蓝牙地址更改时也能识别并重新连接到iOS设备。
  • BLE Passkeys按照规范正好是6位数字,因此如果您设置了一个“1234”的密钥,实际上它是“001234”,因此要正确地向用户显示代码,您必须在左侧填充,即format!("{:0>6}",pkey)

依赖关系

~6–16MB
~215K SLoC