第二章 ESP32硬件基础:芯片介绍、开发板选型、引脚功能与电源管理
各位同学,欢迎来到实战课程的第二讲。今天咱们聊聊ESP32的硬件底子。说实话,搞物联网开发,软件写得再花哨,硬件选型一旦翻车,全白搭。我见过太多项目因为电源没处理好、引脚复用冲突,最后在产线上哭都来不及。所以这一章,咱们把ESP32的“骨架”摸透。
2.1 ESP32芯片介绍:这颗芯片凭什么这么火?
ESP32是乐鑫科技推出的双核Wi-Fi+蓝牙芯片。你想想看,一颗芯片集成了两个处理器、Wi-Fi、蓝牙、各种外设,价格还压到十几块钱——这在五年前简直不敢想。
核心参数速览:
- CPU:双核Xtensa LX6,主频最高240MHz。我习惯把其中一个核跑协议栈,另一个跑业务逻辑,互不干扰。
- 内存:520KB SRAM + 4MB Flash(常见配置)。注意,SRAM里有一部分被Wi-Fi和蓝牙占用了,实际可用大概300KB出头。
- 无线:2.4GHz Wi-Fi 802.11 b/g/n + 蓝牙4.2 BR/EDR + BLE。Mesh组网主要用Wi-Fi的Station和SoftAP模式。
- 外设:34个GPIO、12位ADC、2个DAC、3个UART、2个I2C、2个SPI、CAN 2.0、以太网MAC……嗯,基本够用了。
我个人最看重的特性:ESP32支持OTA升级和深度睡眠模式。做Mesh节点时,电池供电的设备必须能睡,否则换电池换到你怀疑人生。
我在项目中遇到过一个问题:某批次芯片的Wi-Fi灵敏度比标称值低了3dB。排查了半天,发现是PCB天线匹配电路焊错了电容。所以啊,芯片本身没问题,但外围电路设计一定要按参考设计来,别自己瞎改。
2.2 ESP32开发板选型:别买错了,浪费钱还耽误事
市面上的ESP32开发板五花八门,我帮你理一理最常见的几款,以及它们适合干什么。
| 开发板型号 | Flash大小 | PSRAM | 典型用途 | 我的建议 |
|---|---|---|---|---|
| ESP32-DevKitC V4 | 4MB | 无 | 通用开发、原型验证 | 入门首选,便宜够用 |
| ESP32-WROOM-32 | 4MB/8MB | 无 | 量产模块、小体积产品 | 做产品就用这个,带屏蔽罩 |
| ESP32-WROVER | 4MB/8MB | 8MB | 需要大量内存的场景(如摄像头) | 跑LVGL图形界面时必选 |
| ESP32-S3-DevKitC | 16MB | 8MB | AI、边缘计算、复杂Mesh | 新项目建议直接上S3 |
避坑指南:我曾经贪便宜买过某宝上9块9的“ESP32兼容板”,结果引脚间距不对,插不进面包板,而且USB转串口芯片是CH340G的冒牌货,烧录时断时续。后来我学乖了,开发阶段一律用乐鑫官方的DevKitC,或者安信可、合宙这些大厂的板子。
做Mesh网络时,我建议你至少准备3块开发板。一块当根节点(连接路由器),两块当中继节点。如果预算允许,再买两块当叶子节点。这样你才能模拟出真实的多跳场景。
2.3 ESP32引脚功能:哪些能用,哪些是坑?
ESP32虽然有34个GPIO,但并不是每个都能随便用。我整理了一张常用引脚功能表,你最好保存下来。
| 引脚编号 | 主要功能 | 注意事项 |
|---|---|---|
| GPIO0 | 下载模式选择 | 低电平进入下载模式,不能直接接GND |
| GPIO1 | UART0 TX | 默认串口输出,别乱接 |
| GPIO2 | 普通IO、ADC | 上电时拉低会进入测试模式,慎用 |
| GPIO3 | UART0 RX | 默认串口输入 |
| GPIO4 | 普通IO、ADC | 比较安全,常用 |
| GPIO5 | 普通IO、ADC | 上电时输出高电平,可能影响外设 |
| GPIO12 | 普通IO、ADC | 大坑!上电时电平决定Flash电压,必须拉低 |
| GPIO13 | 普通IO、ADC | 比较安全 |
| GPIO14 | 普通IO、ADC | 比较安全 |
| GPIO15 | 普通IO、ADC | 上电时输出高电平,注意 |
| GPIO16/17 | 普通IO | 常用于RTC唤醒 |
| GPIO18/19/21/22/23 | SPI/I2C | 标准外设引脚,尽量保留 |
| GPIO25/26/27 | DAC/ADC | 模拟信号专用 |
| GPIO32/33 | 普通IO、ADC | 比较安全,常用 |
| GPIO34-39 | 输入专用 | 只能输入,不能输出! |
警告:GPIO12这个引脚,我吃过一次大亏。当时做的一个温湿度传感器节点,GPIO12接了DHT22的数据线。结果上电后一半的板子无法启动,查了两天才发现是GPIO12在上电瞬间的电平决定了Flash的工作电压。从那以后,我所有设计里GPIO12都只接下拉电阻,或者干脆悬空。
做Mesh节点时,我建议你保留以下引脚分配:
- UART0(GPIO1/3):调试日志输出,别动它
- SPI(GPIO18/19/23):接LoRa模块或以太网芯片
- I2C(GPIO21/22):接传感器(如BME280、SHT30)
- GPIO4/16/17:接按键或LED指示灯
- GPIO32/33:接电池电压检测(ADC)
2.4 ESP32电源管理:让节点活得更久
Mesh网络里,大部分节点是电池供电的。如果电源管理没做好,三天两头换电池,这项目就废了。ESP32的电源管理其实挺灵活的,关键看你会不会用。
几种工作模式对比:
| 模式 | 典型电流 | 唤醒时间 | 适用场景 |
|---|---|---|---|
| Active(活跃) | 80~260mA | — | Wi-Fi收发、数据处理 |
| Modem-sleep | 3~20mA | 2ms | 保持Wi-Fi连接,间歇收发 |
| Light-sleep | 0.8~1.5mA | 3ms | CPU暂停,外设保持 |
| Deep-sleep | 5~10μA | 10ms | 长时间休眠,定时唤醒 |
| Hibernation | 2.5μA | 100ms | 极低功耗,RTC唤醒 |
我个人的经验是:Mesh中继节点用Modem-sleep模式,因为需要随时转发数据。叶子节点用Deep-sleep,每隔几分钟醒来发一次数据就行。
电源设计要点:
- ESP32的工作电压是2.3V~3.6V,推荐用3.3V供电
- 瞬间电流峰值可达500mA(Wi-Fi发射时),所以LDO要选能输出800mA以上的
- AMS1117-3.3虽然便宜,但压差大、效率低。电池供电建议用RT9013或XC6206
- 如果使用锂电池,记得加一个DW01保护板,防止过放
我曾经帮一个客户优化Mesh节点功耗。原始设计用AMS1117供电,待机电流1.2mA。我换成RT9013后,待机降到0.3mA。再配合Deep-sleep和定时唤醒,一节18650电池从撑3天变成了撑45天。嗯,这就是电源管理的价值。
小技巧:在Deep-sleep模式下,GPIO的电平会保持。如果你在休眠前把某个GPIO拉低,它就一直低。这可以用来控制外设的电源,比如用MOS管切断传感器的供电,进一步省电。
好了,这一章的内容就到这里。ESP32的硬件基础是后面所有实战的根基。下一章咱们开始搭建开发环境,然后直接上手写第一个Mesh节点程序。记住,硬件选型时多花十分钟思考,后面能省十个小时的调试时间。