恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

ESP-IDF BluFi 详解:基于蓝牙通道的 Wi-Fi 配网协议、帧格式与安全实现

  • 首页
  • 资讯中心
  • /
  • ESP-IDF BluFi 详解:基于蓝牙通道的 Wi-Fi 配网协议、帧格式与安全实现

相关资讯

Umi 本地开发环境搭建:Node.js 安装、pnpm 依赖管理与 IDE 选择 2026/9/14 11:48:40
C++多核并行计算实验:std::thread与OpenMP矩阵乘法实战 2026/9/14 11:48:40
Arduino ESP32 Zigbee 颜色调光开关(ZigbeeColorDimmerSwitch)端点开发指南 2026/9/14 11:43:40

最新资讯

SpringBoot宿舍报修系统开发与优化实践
knowledge-work-plugins 产品管理插件 write-spec 技能:从问题陈述到结构化 PRD 的完整实战指南
Flutter开发OpenHarmony华容道游戏实战
基于LSTM的淘宝商品评论情感分析:从数据清洗到差评预警
基于责任链模式的消息队列—异步处理流水线的最佳实践
面试题总结 ---Linux篇

今日推荐

ASP+Access库存管理系统源码部署与IIS配置实战指南
基于SSM框架的毕业季旧物分类处理系统设计与实现
MATLAB FFT频谱仿真:从DFT原理到参数设置与窗函数选择

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

ESP-IDF BluFi 详解:基于蓝牙通道的 Wi-Fi 配网协议、帧格式与安全实现

发布时间:2026/9/14 11:48:40
ESP-IDF BluFi 详解:基于蓝牙通道的 Wi-Fi 配网协议、帧格式与安全实现 ESP-IDF BluFi 详解基于蓝牙通道的 Wi-Fi 配网协议、帧格式与安全实现【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf本篇基于 ESP-IDF 官方 API 指南 blufi.rst 展开系统讲解 BluFiBluetooth Wi-Fi配网方案的工作原理、完整帧格式定义、安全机制与回调接口并结合 blufi 示例工程 的源码DH 密钥协商、AES-CTR 加密、CRC16 校验的实际实现进行印证。读完后你将能够理解 BluFi 从 BLE 广播到 Wi-Fi 连接状态回传的完整流程、解析 BluFi 数据帧/控制帧的每一个字段、并通过esp_blufi_register_callbacks为自己的项目定制密钥协商与加解密算法。需要先说明BluFi 目前处于维护模式官方不再规划新功能。对于新项目或需要 Wi-Fi 配网能力的场景官方推荐改用network_provisioning组件位于 ESP-IDF 附加组件仓库 idf-extra-components它提供更现代、更安全且持续维护的配网方案。因此本文更适合两类读者需要维护既有 BluFi 项目的工程师以及希望深入理解“BLE 通道传输 Wi-Fi 凭据”这一配网范式底层细节的开发者。一、BluFi 是什么概述与工作原理BluFi 是通过蓝牙BLE通道配置 Wi-Fi 网络的功能它提供一套安全协议把 Wi-Fi 配置信息SSID、密码等与凭据从手机端传递到 ESP 芯片上。芯片获得这些信息后既可以作为 Station 连接到一个 AP也可以作为 SoftAP 对外建点。BluFi 层面上的分片Fragmenting、数据加密Data encryption与校验Checksum verification是这一过程的关键要素。对称加密、非对称加密与校验算法均支持自定义官方示例中采用DH 算法进行密钥协商、AES-128 进行数据加密、CRC16 进行校验注意新版示例代码已演进为 3072 位 DH SHA-256 派生密钥 AES-CTR详见第四、五节。从示例工程的README可以看到 BluFi 当前支持的芯片目标为ESP32、ESP32-C2、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-C61、ESP32-S3、ESP32-S31见 README.md。二、快速上手使用 EspBlufi App 完成配网2.1 准备工作硬件一块支持 BluFi 的 ESP 模组一台电脑通过 USB 连接模组用于供电与查看串口日志一部运行 Android 或 iOS 的智能手机。软件BluFi 示例工程blufi example烧录到芯片上手机 AppEspBlufiAndroid 与 iOS 版本均可在乐鑫 App 仓库获取工程 README 中给出了下载入口。烧录示例工程的通用步骤可参考 ESP-IDF 入门文档docs/en/get-started/index。构建时先确保用idf.py set-target chip_name选中正确的芯片目标然后idf.py -p PORT flash monitor完成构建、烧录与串口监视。2.2 配置为 Station 模式连接已有 Wi-Fi第 1 步给 ESP 芯片上电。芯片连接电脑后串口工具会输出初始化日志见文首图片最终打印BLUFI init finish表示就绪。第 2 步通过 EspBlufi 建立连接。在手机上授予 Wi-Fi、蓝牙与位置权限打开 EspBlufi App下拉刷新界面即可看到附近开启了蓝牙的设备列表点击目标设备并选择Connect建立 BLE 连接连接成功后 App 会显示对应界面与此同时串口工具会输出 BLE 连接日志官方文档配有blufi-ble-connect.png截图。注意如果 App 中Networking按钮缺失或无响应请重启 ESP 芯片并确认已授予蓝牙权限。第 3 步配置 Wi-Fi。点击Networking按钮打开网络配置菜单从下拉列表选择设备模式。BluFi 支持三种模式Station连接到已有的 Wi-Fi 网络SoftAP创建一个 Wi-Fi 接入点SoftAP/Station两种模式同时使能选择Station模式点击刷新按钮扫描并选择一个 SSID然后输入密码针对 ESP32 的特别说明ESP32 只支持 2.4 GHz Wi-Fi请确保选择兼容的网络点击Confirm完成配置。连接成功后界面中会以红色标注显示 Wi-Fi 模式本例为 Station 模式以及连接信息AP 的 BSSID、SSID、连接状态等串口工具同时输出 Station 连接日志。对应源码实现示例的 Wi-Fi 事件处理函数wifi_event_handler在WIFI_EVENT_STA_CONNECTED时保存 BSSID/SSIDip_event_handler在收到IP_EVENT_STA_GOT_IP后调用esp_blufi_send_wifi_conn_report()把连接状态回传给手机——这正是 App 界面上“Station 连接信息”数据的来源见 blufi_example_main.c。2.3 配置为 SoftAP 模式ESP 芯片建点第 1 步通过 EspBlufi 建立连接。给模组上电EspBlufi App 通过蓝牙连接设备后在网络配置菜单中选择SoftAP模式。第 2 步配置 SoftAP。选择安全加密模式、信道、最大可连接 Station 数量输入 SoftAP 的 SSID 与密码点击Confirm完成配置。第 3 步验证 SoftAP。配置成功后 App 会显示当前 Wi-Fi 模式与连接状态串口输出 SoftAP 连接日志。第 4 步连接 SoftAP。打开手机 Wi-Fi网络列表中会出现刚配置好的 SoftAP连接成功后即可正常使用。至此ESP 芯片已通过蓝牙通道完成 Wi-Fi 配网。示例工程对 SoftAP 参数的接收处理见 blufi_example_main.c分别通过ESP_BLUFI_EVENT_RECV_SOFTAP_SSID、ESP_BLUFI_EVENT_RECV_SOFTAP_PASSWD、ESP_BLUFI_EVENT_RECV_SOFTAP_MAX_CONN_NUM上限 4、ESP_BLUFI_EVENT_RECV_SOFTAP_CHANNEL示例中上限 13等事件写入ap_config并调用esp_wifi_set_config(WIFI_IF_AP, ...)生效。三、BluFi 配网核心流程BluFi 配网流程覆盖 SoftAP 与 Station 两种场景。官方以Station为例说明核心环节包括广播、连接、服务发现、共享密钥协商、数据传输与连接状态回传共 10 步将 ESP 芯片设置为 GATT Server 模式然后发送带有特定advertising data的广播。该广播内容可以按需自定义它不属于 BluFi Profile 的一部分。手机上的 App 搜索这一特定广播确认后将 ESP 芯片作为 GATT Client 连接上去。此阶段使用什么 App 由你自行决定。GATT 连接建立成功后手机向 ESP 芯片发送一帧用于密钥协商的数据帧帧格式见下节。ESP 芯片收到密钥协商数据帧后按用户定义的协商方式解析内容。手机与 ESP 芯片使用 DH、RSA 或 ECC 等加密算法完成密钥协商。协商完成后手机向 ESP 芯片发送一帧安全模式设置的控制帧。收到该控制帧后ESP 芯片即可使用共享密钥与安全配置对通信数据进行加解密。手机发送第 4 节定义的数据帧携带 Wi-Fi 配置信息SSID、密码等到 ESP 芯片。手机发送Wi-Fi 连接请求控制帧。收到该帧后ESP 芯片认为必要信息交换完毕准备连接 Wi-Fi。连接上 Wi-Fi 后ESP 芯片向手机发送Wi-Fi 连接状态报告控制帧。至此配网流程完成。官方补充了 2 条注意事项ESP 芯片收到安全模式配置控制帧后将按所定义的安全模式执行相应操作对称加密/解密前后数据长度必须保持一致且支持原地加解密。对应的时序关系可以概括为Phone ← ESP [Advertising] Phone → ESP [Create GATT connection] Phone → ESP [Negotiate key procedure] Phone ← ESP [Negotiate key procedure] Phone → ESP [CTRL: 设置手机→ESP 的安全模式] Phone → ESP [DATA: SSID] Phone → ESP [DATA: Password] Phone → ESP [DATA: 其他信息如 CA 证书] Phone → ESP [CTRL: 连接 AP] Phone ← ESP [DATA: 连接状态报告]这一流程与示例代码的回调一一对应example_event_callback中ESP_BLUFI_EVENT_INIT_FINISH触发esp_blufi_adv_start()开始广播ESP_BLUFI_EVENT_BLE_CONNECT时调用blufi_security_init()初始化安全上下文并在可选配置下发起 BLE SMP 配对请求ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP对应第 9 步的“连接 AP”控制帧示例在此处调用esp_wifi_disconnect()后重新esp_wifi_connect()见 blufi_example_main.c。四、BluFi 帧格式定义手机 App 与 ESP 芯片之间通信的帧格式定义如下。4.1 总体结构无分片字段值字节数Type最低位起1Frame Control1Sequence Number1Data Length1DataData LengthCheckSum最高位起2当Frame Control字段中的 frag 位被置位时Data字段内会多出一个 2 字节的Total Content Length字段。该字段指示帧剩余部分的长度并告诉对端需要分配多少内存。4.2 分片帧格式字段值字节数Type最低位起1Frame ControlFrag1Sequence Number1Data Length1DataTotal Content Length: 2Content: Data Length − 2CheckSum最高位起24.3 ACK 帧格式一般情况下控制帧不含数据位ACK 帧除外字段值字节数Type − ACK最低位起1Frame Control1Sequence Number1Data Length1DataAcked Sequence Number: 2CheckSum最高位起24.4 Type 字段Type字段占 1 字节细分为Type低 2 位标识数据帧或控制帧与Subtype高 6 位标识具体含义。控制帧暂不加密但支持校验数据帧支持加密与校验。4.4.1 控制帧Type 0x0控制帧含义说明备注0x0 (b000000)ACK用被应答帧的序号填充 data 字段进行应答data 字段消耗 1 字节取值与被应答帧的 sequence 字段相同0x1 (b000001)设置 ESP 设备安全模式通知设备发送数据时使用哪种安全模式流程中允许多次重置每次设置影响其后使用的安全模式。若不设置ESP 设备默认以无校验、无加密方式发送控制帧与数据帧。手机→ESP 的数据传输由该控制帧控制data 字段消耗 1 字节高 4 位为控制帧安全模式设置低 4 位为数据帧安全模式设置。b0000无校验无加密b0001有校验无加密b0010无校验有加密b0011校验与加密都有0x2 (b000010)设置 Wi-Fi opmode帧内含 opmode 配置用于设置 ESP 设备的 Wi-Fi 模式data[0] 取值0x00: NULL0x01: STA0x02: SoftAP0x03: SoftAP STA。若涉及 AP 模式请先行设置 AP 的 SSID/Password/最大连接数0x3 (b000011)连接 ESP 设备到 AP通知 ESP 设备必要信息已发完允许其连接 AP无 data 字段0x4 (b000100)断开 ESP 设备与 AP 的连接—无 data 字段0x5 (b000101)获取 ESP 设备 Wi-Fi 模式与状态信息—无 data 字段。收到该帧后ESP 设备回发一帧 Wi-Fi 连接状态报告包含当前 opmode、连接状态、SSID 等信息回传信息的类型由手机上安装的应用定义0x6 (b000110)将某个 STA 设备从 SoftAP 断开SoftAP 模式下—Data[0~5] 为 STA 设备 MAC 地址若有第二个 STA 设备则使用 data[6-11]其余类推0x7 (b000111)获取版本信息——0x8 (b001000)断开 BLE GATT 链路—ESP 设备收到该命令后断开 BLE GATT 连接0x9 (b001001)获取 Wi-Fi 列表让 ESP 设备扫描周围 Wi-Fi AP无 data 字段。收到后 ESP 设备回发一帧 Wi-Fi 列表报告4.4.2 数据帧Type 0x1数据帧含义说明备注0x0 (b000000)发送协商数据协商数据会被发送到应用层注册的回调函数数据长度取决于 length 字段0x1 (b000001)发送 STA 模式的 SSID在 SSID 隐藏的情况下向 STA 设备发送要连接的 AP 的 BSSID见注 10x2 (b000010)发送 STA 模式的 SSID向 STA 设备发送要连接的 AP 的 SSID见注 10x3 (b000011)发送 STA 模式的密码向 STA 设备发送要连接的 AP 的密码见注 10x4 (b000100)发送 SoftAP 模式的 SSID—见注 10x5 (b000101)发送 SoftAP 模式的密码—见注 10x6 (b000110)设置 SoftAP 模式最大连接数—data[0] 表示连接数取值 1~4ESP→手机方向时则表示为手机提供所需信息0x7 (b000111)设置 SoftAP 模式认证方式—data[0]0x00: OPEN0x01: WEP0x02: WPA_PSK0x03: WPA2_PSK0x04: WPA_WPA2_PSKESP→手机方向时则表示为手机提供所需信息0x8 (b001000)设置 SoftAP 模式信道—data[0] 表示支持信道数量取值 1~14ESP→手机方向时则为手机提供信息0x9 (b001001)用户名使用企业级加密时提供 GATT client 的用户名数据长度取决于 length 字段0xA (b001010)CA 证书使用企业级加密时提供 CA 证书见注 20xB (b001011)客户端证书提供企业级加密用的客户端证书是否含私钥取决于证书内容见注 20xC (b001100)服务器证书提供企业级加密用的服务器证书是否含私钥取决于证书内容见注 20xD (b001101)客户端私钥提供企业级加密用的客户端私钥见注 20xE (b001110)服务器私钥提供企业级加密用的服务器私钥见注 20xF (b001111)Wi-Fi 连接状态报告通知手机 ESP 设备的 Wi-Fi 状态含 STA 状态与 SoftAP 状态data[0] 为 opmode0x00: NULL0x01: STA0x02: SoftAP0x03: SoftAP STA。data[1] 为 STA 连接状态0x0 已连接且有 IP0x1 断开0x2 连接中0x3 已连接但无 IP。data[2] 为 SoftAP 状态已连接 STA 数量。data[3] 起为 SSID/BSSID 信息格式若处于连接中此处包含最大 Wi-Fi 重连时间若已断开则包含断开原因与 RSSI0x10 (b010000)版本—data[0] 为大版本号data[1] 为小版本号0x11 (b010001)Wi-Fi 列表向 ESP 设备发送 Wi-Fi 列表数据格式为 length RSSI SSID数据过长时支持分片0x12 (b010010)报告错误通知手机 BluFi 出现错误错误码0x00 序号错误0x01 校验和错误0x02 解密错误0x03 加密错误0x04 安全初始化错误0x05 dh malloc 错误0x06 dh 参数错误0x07 读取参数错误0x08 生成公钥错误0x09 数据格式错误0x0A 计算 MD5 错误0x0B Wi-Fi 扫描错误0x13 (b010011)自定义数据收发自定义数据数据过长时支持分片0x14 (b010100)设置最大 Wi-Fi 重连时间—data[0] 为最大重连次数0x15 (b010101)设置 Wi-Fi 连接结束原因—data[0] 为结束原因类型同wifi_err_reason_t结构0x16 (b010110)设置 Wi-Fi 连接结束时的 RSSI—data[0] 为结束时的 RSSI若结束时 RSSI 无意义则该值取无意义值-128注 1数据长度取决于数据长度字段传输方向为 ESP 设备→手机时表示为手机提供所需信息。 注 2数据长度取决于数据长度字段数据长度不足时帧支持分片。4.5 Frame Control 字段1 字节逐位含义位含义0x01指示帧是否加密。1 已加密0 未加密。帧的加密部分为 DATA 字段加密前的全部明文数据不含 checksum。控制帧不加密因此该位为 00x02指示帧是否带校验和如 SHA1、MD5、CRC位于帧尾。校验内容覆盖 sequence、data length 与明文。控制帧与数据帧均可选择是否带校验位0x04指示数据方向。0 手机→ESP 设备1 ESP 设备→手机0x08指示是否需要对方回复 ACK。0 不需要1 需要0x10指示是否有后续数据分片。0 无1 有用于传输更长的数据。分片帧中当前内容段 后续内容段的总长度写在 data 字段的前 2 字节即内容最大支持 64 K0x10~0x80保留4.6 其余字段Sequence Number序号控制字段。发送帧时无论帧类型该字段值自动加 1可防止重放攻击Replay Attack。每次重连后序号清零。Data Length指示 data 字段长度不含 CheckSum。Data内容随 Type/Subtype 取值不同而不同参见 4.4 节表格。CheckSum2 字节用于校验 sequence data length 明文数据。五、安全实现机制保护数据机密性为确保 SSID 与密码传输安全消息需使用 AES、DES 等对称加密算法加密。使用对称算法前双方须先用非对称算法DH、RSA、ECC 等协商或生成一个共享密钥。保证数据完整性添加 SHA1、MD5、CRC 等校验和算法。身份安全签名可用 RSA 等算法保护身份对 DH 则需要其他算法作为签名配套。防重放攻击利用 Sequence Number 字段并在校验和验证中使用。在 ESP 芯片端你可以自行决定并开发安全处理逻辑如密钥协商手机把协商数据发送到 ESP 芯片数据会被送到应用层处理若应用层不处理可直接使用 BluFi 提供的 DH 加密算法协商密钥。应用层需要向 BluFi 注册若干安全相关函数typedef void (*esp_blufi_negotiate_data_handler_t)(uint8_t *data, int len, uint8_t **output_data, int *output_len, bool *need_free);该函数用于 ESP 芯片在协商过程中接收普通数据处理完成后通过output_data与output_len传回输出。negotiate_data_handler被调用后BluFi 会把output_data发出去。两个星号意味着待发送数据长度未知因此需要函数自行分配内存malloc或指向全局变量并通过need_free告知 BluFi 内存是否需要释放。typedef int (*esp_blufi_encrypt_func_t)(uint8_t iv8, uint8_t *crypt_data, int crypt_len); typedef int (*esp_blufi_decrypt_func_t)(uint8_t iv8, uint8_t *crypt_data, int crypt_len);待加密/解密的数据必须等长iv8是帧的 8 位序号值可作为 8 位 IV 使用。typedef uint16_t (*esp_blufi_checksum_func_t)(uint8_t iv8, uint8_t *data, int len);该函数用于计算 CheckSum 并返回校验值BluFi 用它与帧中的 CheckSum 比对。以上四个回调的类型声明与esp_blufi_callbacks_t结构体定义均可在公开头文件 esp_blufi_api.h 中查看。5.1 更强的安全性建议官方明确提示示例中的默认加解密逻辑仅用于演示目的。如果应用需要更强的安全保证可考虑自定义安全回调在 Blufi 框架中通过esp_err_t esp_blufi_register_callbacks(esp_blufi_callbacks_t *callbacks);自定义加密、解密、认证与校验算法改用 network_provisioning 组件推荐对于更健壮、更安全、面向生产的配网方案。5.2 示例源码中的真实安全实现blufi_security.c 展示了当前仓库中官方示例的安全栈基于 PSA Crypto 接口DH 密钥协商blufi_dh_negotiate_data_handlerblufi_security.c接收SEC_TYPE_DH_PARAM_LEN长度帧与SEC_TYPE_DH_PARAM_DATA参数帧解析出 P、G 与对端公钥后通过psa_raw_key_agreement(PSA_ALG_FFDH, ...)完成协商。当前实现仅支持 3072 位DH 密钥缓冲区DH_SELF_PUB_KEY_LEN 384字节协商出的共享密钥经 SHA-256 压缩为 32 字节 AES-256 PSKPSA_KEY_TYPE_AESPSA_ALG_CTR。性能优化——DH 密钥对预生成在没有硬件 MPI 加速的 SoC 上3072 位模幂运算软件实现约需 12 秒。示例通过blufi_dh_pregen_start()在 BLE 广播期间提前生成密钥对blufi_dh_pregen_task任务栈 4096 字节使手机发来 DH 参数后只剩密钥约定在关键路径上并在重连后通过blufi_dh_pregen_start_with_cb(esp_blufi_adv_start)重启预生成见 blufi_example_main.c。IV 域分离加密/解密 IV 分别由SHA-256(blufi_enc || share_key)与SHA-256(blufi_dec || share_key)派生各取前 16 字节作为 AES-CTR 的 IV避免双向使用同一 IV见 blufi_security.c。校验blufi_crc_checksum使用esp_crc16_be(0, data, len)计算 CRC16大端初值 0与文档概述中的 CRC16 描述一致。边界防护DH 参数长度被限制在DH_PARAM_LEN_MAX 1024字节以内防止恶意长度值触发的大内存分配DoS 防护。六、GATT 相关说明UUID项目UUIDBluFi Service0xFFFF16 位BluFi 特征手机 → ESP0xFF01可写BluFi 特征ESP → 手机0xFF02可读、可通知readable and callable源码侧对应关系服务 UUID 在 esp_blufi.h 中定义为#define BLUFI_APP_UUID 0xFFFFGATT 服务的注册与写/通知处理分别位于 blufi_prf.cProfile 层与 blufi_protocol.c协议解析层。手机 App 扫描时即是在寻找服务 UUID 为 0xFFFF 的 GATT Server。七、示例工程结构与关键配置blufi 示例工程 的文件组织如下可作为自建项目的参考骨架examples/bluetooth/blufi/ ├── main/ │ ├── blufi_example_main.c # app_main、Wi-Fi 初始化、BluFi 事件回调 │ ├── blufi_init.c # Bluedroid/NimBLE 双栈的 host 初始化 │ ├── blufi_security.c # DH 协商 AES-CTR CRC16 实现 │ ├── blufi_example.h │ ├── Kconfig.projbuild # 示例级 Kconfig 选项 │ └── CMakeLists.txt ├── sdkconfig.defaults # 通用默认配置 ├── sdkconfig.defaults.* # 各芯片专属配置 └── sdkconfig.defaults.mini # 精简版无 Wi-Fi仅 BLE host 调试app_main的初始化顺序值得注意blufi_example_main.cnvs_flash_init()初始化 NVS失败则擦除重试initialise_wifi()创建默认 STA/AP netif、注册WIFI_EVENT/IP_EVENT处理器、esp_wifi_set_mode(WIFI_MODE_STA)并启动 Wi-Fiesp_blufi_controller_init()仅在使用控制器Bluedroid 或非 NimBLE 场景时调用ESP32 上还会esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT)释放经典蓝牙内存esp_blufi_host_and_cb_init(example_callbacks)内部依次执行 host 初始化、esp_blufi_register_callbacks()、GAP 回调注册回调集合即static esp_blufi_callbacks_t example_callbacks { .event_cb example_event_callback, .negotiate_data_handler blufi_dh_negotiate_data_handler, .encrypt_func blufi_aes_encrypt, .decrypt_func blufi_aes_decrypt, .checksum_func blufi_crc_checksum, };在非 MPI 硬件平台上同步等待 DH 预生成完成blufi_dh_pregen_wait()后esp_blufi_adv_start()最后打印esp_blufi_get_version()版本号文档示例输出为BLUFI VERSION 0102。关键 Kconfig 选项Kconfig.projbuildEXAMPLE_WIFI_CONNECTION_MAXIMUM_RETRY默认 2范围 0~255Wi-Fi 连接最大重试次数对应状态报告中的“最大重连时间”EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD默认ESP_WIFI_AUTH_WPA2_PSK扫描接受的最弱认证方式。AP 工作在 WEP/WPA 模式时请相应调整为ESP_WIFI_AUTH_WEP/ESP_WIFI_AUTH_WPA_PSKEXAMPLE_BLUFI_BLE_SMP_ENABLE默认关闭仅在 Bluedroid host 下可用。开启后 BluFi 会配置 SMP 参数IO 能力、认证模式 SC MITM、16 字节密钥等并在 BLE 连接建立后主动发起安全请求——只有配对成功才进入 Wi-Fi 配网阶段默认静态 passkey 为 123456生产环境必须修改见 blufi_init.c。关键 sdkconfig 项sdkconfig.defaultsCONFIG_BT_ENABLEDy、CONFIG_BT_BLE_BLUFI_ENABLEy、CONFIG_MBEDTLS_HARDWARE_MPIy、CONFIG_PARTITION_TABLE_SINGLE_APP_LARGEy默认配置接近 1MB 应用分区需要 large 分区表容纳。该示例支持 Bluedroid 与 NimBLE 两种 host 栈blufi_init.c中按CONFIG_BT_BLUEDROID_ENABLED/CONFIG_BT_NIMBLE_ENABLED分别实现初始化路径从源码注释可见NimBLE 路径下 BLE 层采用 “Just Works” 级别的配对即可接受因为真正的机密性由 BluFi 应用层的 DH 密钥交换提供。八、小结与选型建议BluFi 的价值在于提供了一套完整的“BLE 通道 自定义安全层”的配网参考实现分片、序号防重放、可插拔的加密/校验回调以及覆盖 SSID/密码/SoftAP 参数/状态回传/错误码的完整帧协议。源码可深入阅读的路径协议实现 blufi_protocol.c 与 blufi_prf.c、公开 API esp_blufi_api.h、示例 blufi_example_main.c。选型上请遵循官方建议维护既有 BluFi 项目时按本文协议与回调接口演进新项目请直接评估network_provisioning组件BluFi 本身不再新增功能。【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号