2、硬件平台选型:ESP32开发板介绍、外设引脚功能、开发环境搭建

做物联网混合组网,选对硬件是第一步。我个人习惯把ESP32称为“瑞士军刀”——便宜、够用、生态好。这一章咱们就把它掰开揉碎了讲清楚。

2.1 ESP32开发板:为什么选它?

市面上能同时跑WiFi和BLE的芯片不少,但ESP32几乎是入门到量产的通吃选择。我最早用ESP8266做项目,那会儿还得外挂一颗MCU处理蓝牙,折腾得够呛。后来ESP32一出来,双核、WiFi+BLE、价格还不到20块,我就知道这芯片要火。

核心参数我列个表,你一看就明白:

参数 ESP32规格 我的评价
处理器 双核 Xtensa LX6,主频240MHz 跑协议栈+应用绰绰有余
无线 WiFi 802.11 b/g/n + BLE 4.2/5.0 双模同时工作,这才是核心
内存 520KB SRAM + 4MB Flash 做GATT服务端够用,别开太多任务就行
GPIO 34个可编程引脚 大部分有复用功能,得仔细看手册
价格 模块15-25元,开发板30-50元 坏了不心疼,适合批量验证

关键点:ESP32的WiFi和BLE可以同时运行,但共享同一根天线。我做过压力测试——WiFi持续吞吐2Mbps时,BLE广播间隔会抖动。实际项目中建议错开关键时序。

2.2 外设引脚功能:哪些引脚能干什么?

ESP32的引脚复用很灵活,但坑也不少。我曾经因为没注意某个引脚的上电状态,导致继电器误动作,差点把实验室的示波器烧了。嗯,这里得好好说说。

2.2.1 常用功能引脚速查

引脚 默认功能 可复用功能 注意事项
GPIO2 普通IO ADC2_CH2, TOUCH2 上电时拉低会进入下载模式,别乱接
GPIO4 普通IO ADC2_CH0, TOUCH0 我常用它做LED指示,安全
GPIO12 普通IO ADC2_CH5, TOUCH5 上电时电平决定Flash电压,千万别拉高!
GPIO16/17 普通IO PSRAM控制 如果板子带PSRAM,这俩别碰
UART0 TX: GPIO1, RX: GPIO3 — 默认串口,别挪作他用,否则烧录会出问题

避坑指南:我曾经在GPIO12上接了一个按键,结果每次上电Flash电压都不对,程序跑不起来。查了两天才发现是GPIO12的Strapping功能在作怪。记住:GPIO0、GPIO2、GPIO12、GPIO15这四个引脚的上电状态会影响启动模式,设计电路时务必避开。

2.2.2 外设接口速览

  • ADC:2个SAR ADC,共18个通道。但ADC2在WiFi开启时会被占用,我一般只用ADC1(GPIO32-39)。
  • DAC:2路8位,GPIO25和GPIO26。精度一般,做音频输出勉强能用。
  • I2C:任意GPIO都可配置,我习惯用GPIO21(SDA)和GPIO22(SCL)。
  • SPI:3个SPI控制器,VSPI默认用GPIO18-23,HSPI用GPIO12-15。
  • PWM:任意GPIO都可输出,通过LEDC控制器实现,最多16路。

2.3 开发环境搭建:Arduino IDE vs ESP-IDF

说到开发环境,我经常被问到“到底该用哪个?”我的回答是:看你的项目阶段。原型验证用Arduino,产品化用ESP-IDF。下面我分别讲。

2.3.1 方案一:Arduino IDE(快速上手)

如果你只是想快速验证WiFi和BLE的混合通信,Arduino IDE是最省心的。我第一个ESP32的BLE项目就是用Arduino搭的,从拆包装到手机连上GATT服务,只花了两个小时。

安装步骤:

  1. 下载并安装Arduino IDE(建议1.8.19或2.x版本)。
  2. 打开“文件” → “首选项”,在“附加开发板管理器网址”中添加:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  3. 打开“工具” → “开发板” → “开发板管理器”,搜索“ESP32”并安装。
  4. 选择开发板:工具 → 开发板 → ESP32 Arduino → “ESP32 Dev Module”。
  5. 选择端口,点击上传——搞定。

小技巧:我第一次装的时候卡在下载包上,因为国内网络慢。后来我手动下载了esp32包放到C:\Users\用户名\AppData\Local\Arduino15\staging\packages目录下,再安装就秒过了。

一个简单的WiFi+BLE共存示例:

#include <WiFi.h>
#include <BLEDevice.h>
#include <BLEServer.h>

void setup() {
  Serial.begin(115200);
  
  // 启动WiFi
  WiFi.begin("你的SSID", "你的密码");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi已连接");
  
  // 启动BLE
  BLEDevice::init("ESP32_Mixed");
  BLEServer *pServer = BLEDevice::createServer();
  Serial.println("BLE已启动,等待连接...");
}

void loop() {
  // 这里可以同时处理WiFi和BLE事件
  delay(1000);
}

2.3.2 方案二:ESP-IDF(专业级开发)

当项目进入量产阶段,或者你需要精细控制内存、功耗、协议栈参数时,就得用ESP-IDF了。说实话,我第一次用IDF时也被它的CMake构建系统搞懵过,但习惯之后会发现,它才是真正发挥ESP32性能的途径。

安装要点:

  • Windows:下载ESP-IDF离线安装器,它会自动装好Python、Git、工具链。我建议选v5.0以上版本,对BLE 5.0支持更好。
  • Linux/macOS:用终端执行install.sh和export.sh。记得每次打开新终端都要source一下环境变量。
  • VS Code插件:装Espressif IDF插件,可以图形化配置menuconfig,省去敲命令的麻烦。

我的建议:如果你要做WiFi与BLE GATT的混合组网,至少用ESP-IDF把协议栈部分跑通。Arduino封装得太厚,很多底层回调你根本拿不到。比如BLE的MTU大小、连接间隔这些参数,在IDF里可以直接调,Arduino里就得绕弯路。

2.4 本章知识体系总览

下面这张图是我自己梳理的,把本章的核心逻辑串起来了。你看一眼,心里就有谱了。

第2章:硬件平台选型知识体系 ESP32芯片选型 外设引脚功能 开发环境搭建 双核240MHz WiFi + BLE 共存 520KB SRAM GPIO复用功能 Strapping引脚避坑 I2C/SPI/UART分配 Arduino IDE ESP-IDF v5.0+ VS Code插件 核心结论 原型验证用Arduino,产品开发用ESP-IDF;引脚设计先查Strapping表

2.5 开发环境验证:跑通第一个程序

环境搭好之后,我建议你先跑一个“WiFi扫描+BLE广播”的混合程序,验证硬件和工具链是否正常。下面这个代码在Arduino IDE里直接复制就能用:

#include <WiFi.h>
#include <BLEDevice.h>
#include <BLEServer.h>

void setup() {
  Serial.begin(115200);
  Serial.println("ESP32混合组网验证程序");
  
  // 1. 扫描WiFi热点
  Serial.println("开始扫描WiFi...");
  int n = WiFi.scanNetworks();
  Serial.print("找到 ");
  Serial.print(n);
  Serial.println(" 个WiFi网络");
  
  // 2. 启动BLE广播
  BLEDevice::init("ESP32_Mixed_Demo");
  BLEServer *pServer = BLEDevice::createServer();
  Serial.println("BLE广播已启动,设备名: ESP32_Mixed_Demo");
}

void loop() {
  // 每5秒打印一次状态
  static unsigned long lastPrint = 0;
  if (millis() - lastPrint > 5000) {
    Serial.print("WiFi状态: ");
    Serial.print(WiFi.status());
    Serial.print(" | BLE已广播: 是");
    Serial.println();
    lastPrint = millis();
  }
}

验证结果:打开串口监视器,如果看到WiFi扫描结果和BLE广播信息交替出现,说明你的ESP32硬件、Arduino环境、WiFi和BLE协议栈全部正常工作。这时候你就可以放心进入下一章了。

嗯,硬件平台这块就讲这么多。记住:选型看需求,引脚看手册,环境看项目阶段。这三句话是我做了几十个物联网项目后总结出来的,你品品。