3. ESP8266/ESP32 平台介绍:芯片选型、开发环境搭建与基础外设
各位同学,欢迎来到第三章。从这一章开始,我们就要真正动手了。在开始写配网代码之前,你得先搞清楚手里的“家伙”是什么。ESP8266 和 ESP32,这两兄弟是物联网圈子里绕不开的存在。我个人习惯把它们比作“瑞士军刀”——便宜、够用、生态好。
今天我们就来聊聊:怎么选芯片,怎么搭环境,以及最基础的 GPIO 和 UART 该怎么玩。这些都是后面配网实战的基石。
3.1 芯片选型:ESP8266 vs ESP32
很多新手会纠结:我到底该用 8266 还是 32?其实没那么复杂。我当年第一次做智能插座项目,为了省几块钱选了 8266,结果发现需要蓝牙配网,硬生生加了个外挂模块。嗯,那叫一个后悔。
下面这张表,是我在实际项目中总结的选型参考:
| 对比项 | ESP8266 | ESP32 |
|---|---|---|
| 核心架构 | Tensilica L106 单核 32-bit | Tensilica LX6 双核 32-bit |
| 主频 | 80MHz (可超频至 160MHz) | 240MHz |
| SRAM | 约 50KB 可用 | 520KB |
| Flash | 通常 1MB ~ 4MB | 通常 4MB ~ 16MB |
| WiFi | 802.11 b/g/n (仅 Station + SoftAP) | 802.11 b/g/n (支持双模 + 蓝牙) |
| 蓝牙 | 无 | 经典蓝牙 + BLE 4.2/5.0 |
| GPIO 数量 | 最多 17 个 (实际可用约 11 个) | 最多 34 个 |
| 硬件外设 | 1x UART, 1x SPI, 1x I2C, 1x ADC | 3x UART, 3x SPI, 2x I2C, 2x ADC, 2x DAC |
| 典型价格 | 约 5-10 元 | 约 15-25 元 |
| 适用场景 | 纯 WiFi 传感器、简单开关控制 | 音视频、复杂协议、蓝牙配网、多任务 |
3.2 开发环境搭建
环境搭建这件事,说难不难,说简单也容易踩坑。我见过太多同学卡在驱动安装和编译工具链上。这里我给出两条路:Arduino IDE 和 ESP-IDF。你根据自己情况选。
3.2.1 方案一:Arduino IDE(快速上手)
如果你之前玩过 Arduino,这条路最顺。说白了,就是把 ESP8266/ESP32 当成一个带 WiFi 的 Arduino 来用。
步骤:
- 安装 Arduino IDE:从官网下载最新版(建议 2.x 版本,界面更清爽)。
- 添加开发板管理器 URL:
- 打开 文件 → 首选项,在“附加开发板管理器网址”中填入:
https://arduino.esp8266.com/stable/package_esp8266com_index.json https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - 安装开发板支持包:
- 打开 工具 → 开发板 → 开发板管理器,搜索
esp8266和esp32,点击安装。 - 这个过程会下载编译工具链,大概几百 MB,耐心等。
- 打开 工具 → 开发板 → 开发板管理器,搜索
- 选择开发板:
- 以 ESP32 DevKit V1 为例,选择 ESP32 Dev Module。
- 8266 选 NodeMCU 1.0 (ESP-12E Module)。
- 测试点亮 LED:
void setup() {
pinMode(2, OUTPUT); // ESP32 板载 LED 通常接 GPIO2
}
void loop() {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
3.2.2 方案二:ESP-IDF(专业开发)
如果你要做产品级开发,或者需要用到 FreeRTOS、蓝牙协议栈这些高级功能,我建议你直接上 ESP-IDF。虽然学习曲线陡一点,但后面会省很多事。
快速安装(以 Windows 为例):
- 去乐鑫官网下载 ESP-IDF 离线安装器(建议 v5.0 以上版本)。
- 双击运行,一路默认。它会自动安装 Python、Git、交叉编译工具链。
- 安装完成后,桌面上会出现 ESP-IDF 5.x CMD 的快捷方式。打开它。
- 进入一个示例工程:
cd %USERPROFILE%\esp\esp-idf\examples\get-started\hello_world
idf.py set-target esp32
idf.py menuconfig # 配置项目(默认即可)
idf.py build # 编译
idf.py -p COM3 flash monitor # 烧录并打开串口监视器
3.3 GPIO 基础:从点灯到按键
GPIO 是芯片和外界打交道的最基本方式。说白了,就是读高低电平、写高低电平。但这里有几个坑,我当年做智能灯控项目时全踩过。
3.3.1 数字输出与输入
先看一个最简单的按键控制 LED 的例子:
#define LED_PIN 2
#define BUTTON_PIN 0 // ESP32 开发板上的 BOOT 按键
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // 内部上拉,按键按下为 LOW
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}
3.3.2 避坑指南:GPIO 的“隐藏属性”
我曾经在一个项目中,用 GPIO12 作为输出控制继电器,结果死活拉不高。查了半天才发现,GPIO12 是 ESP32 的 MTDI 引脚,上电时的电平决定了 Flash 的工作电压(1.8V 还是 3.3V)。如果外部电路把它拉高了,芯片直接启动失败。
下面是我整理的 ESP32 高危 GPIO 列表:
| GPIO | 风险说明 | 建议 |
|---|---|---|
| GPIO0 | 下载模式引脚,低电平进入烧录模式 | 避免外部拉低,或加按键隔离 |
| GPIO2 | 上电时高电平,影响启动日志输出 | 避免外部拉低 |
| GPIO12 | MTDI,决定 Flash 电压 | 上电时保持浮空或下拉 |
| GPIO15 | MTDO,决定启动模式 | 上电时保持浮空或上拉 |
| GPIO34-39 | 纯输入,无内部上拉 | 必须外接上拉/下拉电阻 |
3.4 UART 通信:配网的生命线
UART 是串口通信的基础。在配网场景中,它承担着两个关键角色:日志输出 和 AT 指令交互。你想想看,如果 WiFi 连不上,你总得有个地方看错误信息吧?那就是 UART。
3.4.1 硬件连接
ESP32 有 3 个 UART 控制器。默认的 UART0 用于烧录和日志,通常连接到 USB 转串口芯片。硬件连接很简单:
- TX(发送)→ 对方的 RX
- RX(接收)→ 对方的 TX
- GND → 共地(这个经常被忽略,但必须接)
3.4.2 代码示例:串口打印与接收
void setup() {
Serial.begin(115200); // 初始化 UART0,波特率 115200
Serial.println("ESP32 启动成功!");
}
void loop() {
if (Serial.available()) {
String cmd = Serial.readStringUntil('\n');
cmd.trim();
if (cmd == "AT+SCAN") {
Serial.println("开始扫描 WiFi...");
// 这里可以调用 WiFi 扫描函数
} else {
Serial.print("未知指令: ");
Serial.println(cmd);
}
}
}
3.5 本章知识体系总览
下面这张图,把本章的核心知识点串了起来。你可以把它当成一张“地图”,后面做配网实战时随时回来对照。
3.6 小结
这一章我们干了三件事:
- 芯片选型:ESP8266 省钱但功能有限,ESP32 全能但贵一点。根据你的配网方案来选。
- 环境搭建:Arduino IDE 适合快速上手,ESP-IDF 适合深度开发。两条路都能走到终点。
- GPIO 与 UART:GPIO 要注意“隐藏属性”,UART 要注意波特率和共地。这些基础打牢了,后面写配网代码才不会莫名其妙地翻车。