2. BLE协议栈核心机制

做 WiFi 与 BLE 协同组网,第一步就是选芯片。我见过不少朋友一上来就追参数,结果开发到一半发现外设不够、文档不全,甚至工具链都装不上。嗯,这章咱们就踏踏实实把硬件选型和环境搭建捋清楚。

2.1 主流双模芯片对比:ESP32 vs NRF52840 等

目前市面上能同时跑 WiFi 和 BLE 的芯片,其实就那么几款。我个人用得最多的是 ESP32 和 NRF52840。它们各有各的脾气,选哪个得看你的具体场景。

芯片型号 WiFi 标准 BLE 版本 CPU 架构 最大主频 SRAM Flash 典型功耗(WiFi TX) 典型功耗(BLE 广播)
ESP32 802.11 b/g/n BLE 4.2 + BLE 5.0 Xtensa LX6 双核 240 MHz 520 KB 4 MB(外挂) ~180 mA ~10 mA
NRF52840 无(需外挂) BLE 5.3 + 802.15.4 ARM Cortex-M4F 64 MHz 256 KB 1 MB(内置) N/A ~5 mA
ESP32-S3 802.11 b/g/n BLE 5.0 Xtensa LX7 双核 240 MHz 512 KB 16 MB(外挂) ~160 mA ~8 mA
RTL8720DN 802.11 a/b/g/n BLE 5.0 ARM Cortex-M4 + M0 200 MHz 512 KB 2 MB(内置) ~150 mA ~6 mA

核心结论:如果你需要原生 WiFi + BLE 协同,且对成本敏感,ESP32 系列是首选。如果你更看重低功耗和 BLE 性能,且可以接受外挂 WiFi 芯片,NRF52840 更合适。

我在一个智能家居网关项目里用过 ESP32,当时需要同时处理 8 个 BLE 子设备的数据,还要通过 WiFi 上传到云端。ESP32 的双核架构帮了大忙——一个核跑 WiFi 协议栈,另一个核跑 BLE 和业务逻辑。不过要注意,它的 BLE 只到 4.2,虽然支持 5.0 的部分特性,但像长包和 2M PHY 这些就别想了。

NRF52840 呢?我有个做可穿戴设备的朋友,他选 NRF52840 就是因为 BLE 5.3 的功耗实在太香了。但如果你需要 WiFi,就得外挂一个 ESP8266 或类似芯片,组网复杂度会上升一个台阶。

2.2 开发板介绍:从入门到实战

选好芯片后,开发板就是你的试验田。我个人习惯是:先买官方板,再考虑第三方。官方板文档全、电路图公开,出了问题好排查。

2.2.1 ESP32 系列开发板

  • ESP32-DevKitC:乐鑫官方板,引出所有 GPIO,带 USB 转串口。适合初学者。
  • ESP32-WROOM-32:模组形态,直接焊在 PCB 上。适合做原型验证。
  • ESP32-S3-DevKitC-1:升级版,支持更多外设和更大的 Flash。我最近的项目都在用这个。

小技巧:买 ESP32 开发板时,注意看 USB 转串口芯片。CP2102 和 CH340 最常见,但 CH340 在 macOS 上偶尔会掉驱动。我踩过这个坑,后来都选 CP2102 的板子。

2.2.2 NRF52840 系列开发板

  • NRF52840 DK:Nordic 官方板,带 J-Link 调试器,支持 Arduino 和 Zephyr。价格稍贵,但物有所值。
  • Adafruit Feather NRF52840:第三方板,体积小,带 USB-C 和电池管理。适合做便携式设备原型。
  • MakerDiary NRF52840 MDK:国产板,性价比高,带 RGB LED 和麦克风。我用来做 BLE 音频实验。

2.3 SDK 与工具链安装

环境搭建这一步,说难不难,说简单也容易卡住。我建议你按下面的步骤来,别跳步。

2.3.1 ESP-IDF 安装(ESP32 系列)

乐鑫的官方 SDK 叫 ESP-IDF。我个人推荐用 v5.1 或 v5.2 版本,太老的版本不支持新特性,太新的可能不稳定。

  1. 安装依赖:Python 3.8+、Git、CMake、Ninja。
  2. 克隆 ESP-IDF:git clone -b v5.1 --recursive https://github.com/espressif/esp-idf.git
  3. 运行安装脚本:cd esp-idf && ./install.sh(Windows 用 install.bat)
  4. 设置环境变量:. ./export.sh(每次打开终端都要执行,或者加到 .bashrc 里)
  5. 验证安装:idf.py --version

注意:ESP-IDF 的 install.sh 会下载大量工具链和交叉编译器,网络不好的话容易失败。我曾经在公司内网卡了整整一下午,后来用手机热点才搞定。建议提前准备好代理或离线包。

2.3.2 nRF Connect SDK 安装(NRF52840 系列)

Nordic 的 SDK 叫 nRF Connect SDK(NCS),基于 Zephyr RTOS。说实话,它的安装比 ESP-IDF 复杂一些。

  1. 安装 nRF Command Line Tools:包含 J-Link 驱动和 nrfjprog。
  2. 安装 nRF Connect for Desktop:图形化工具,用来管理 SDK 版本和烧录。
  3. 安装 Toolchain Manager:在 nRF Connect 里安装 SDK v2.5.0 或更高版本。
  4. 安装 VS Code 扩展:nRF Connect Extension Pack,方便代码编辑和调试。
  5. 验证安装:编译一个示例项目,比如 blinky,烧录到开发板。

避坑指南:我曾经在 Windows 上装 NCS,结果 J-Link 驱动和 Zephyr 的 west 工具冲突,导致烧录失败。后来我改用 Ubuntu 虚拟机,一次性通过。如果你用 Windows,建议用 WSL2。

2.3.3 工具链对比总结

项目 ESP-IDF nRF Connect SDK
基础 RTOS FreeRTOS(定制版) Zephyr RTOS
构建系统 CMake + Ninja CMake + West
调试工具 OpenOCD + GDB J-Link + Ozone
包管理 idf.py + 组件注册表 West + 模块清单
学习曲线 中等 较陡
社区活跃度 非常高 高

说白了,ESP-IDF 更适合快速上手和原型验证,nRF Connect SDK 更适合对功耗和 BLE 性能有极致要求的项目。我个人两个都在用,但日常开发还是 ESP-IDF 多一些,毕竟社区资源太丰富了。

2.4 本章知识体系图

下面这张图帮你把本章的核心逻辑串起来。从芯片选型到开发板,再到 SDK 安装,每一步都环环相扣。

硬件选型与开发环境搭建知识体系 芯片选型 ESP32 系列 NRF52840 系列 其他(RTL8720等) 开发板选择 官方板(DK/DevKit) 第三方板(Feather等) 模组(WROOM等) SDK 与工具链安装 ESP-IDF nRF Connect SDK 工具链验证 选型 → 开发板 → SDK,每一步都影响后续开发效率,别跳步。

2.5 本章小结

嗯,到这章结束,你应该能回答这几个问题了:

  • ESP32 和 NRF52840 各自适合什么场景?
  • 开发板怎么选?官方板和第三方板有什么区别?
  • ESP-IDF 和 nRF Connect SDK 怎么装?

我个人觉得,硬件选型没有绝对的好坏,只有合不合适。你想想看,如果你的项目需要 WiFi 和 BLE 同时跑,而且预算有限,ESP32 就是最稳妥的选择。如果你做的是纽扣电池供电的传感器,NRF52840 的功耗优势就体现出来了。