1. ESP32 开发环境搭建:工欲善其事,必先利其器
说实话,做嵌入式开发这么多年,我见过太多人在环境搭建这一步就卡住了。不是装不上驱动,就是 IDE 报错,折腾半天连个 LED 都点不亮。这一章,咱们就把 ESP32 的开发环境彻底捋顺。
我会带你走两条路:一条是 Arduino IDE,适合快速验证、原型开发;另一条是 PlatformIO,适合工程化、多平台管理。两条路我都会讲清楚,你根据自己的习惯选就行。
1.1 开发工具选型:Arduino IDE vs PlatformIO
先说说这两个工具的区别。我个人的习惯是:小项目用 Arduino IDE,大项目用 PlatformIO。为什么?你看下面这个表就明白了。
| 对比项 | Arduino IDE | PlatformIO |
|---|---|---|
| 上手难度 | 极低,开箱即用 | 中等,需要了解 VS Code |
| 项目管理 | 单个 .ino 文件 | 多文件、多库、多环境 |
| 库管理 | 内置库管理器 | pio lib 命令行 + 图形化 |
| 调试支持 | 串口打印 | 原生调试器 + 串口监视器 |
| 多平台 | 需手动切换板型 | 自动识别,一键切换 |
| 编译速度 | 较慢(单线程) | 较快(多线程) |
你看,Arduino IDE 的优势就是简单。你下载、安装、选板子、写代码、上传,完事。但如果你要做 WebSocket 优化、前端交互这种稍微复杂点的项目,我建议你直接上 PlatformIO。我在做 ESP32 的 MQTT 网关项目时,就是因为用了 PlatformIO 的多环境配置,才没被不同板子的引脚定义搞疯。
1.2 Arduino IDE 环境搭建
好,咱们先从 Arduino IDE 开始。这是最基础的路子,也是很多人的入门选择。
1.2.1 下载与安装
- 去 Arduino 官网下载最新版 IDE(我写这章时是 2.x 版本)。
- Windows 用户直接运行安装包,macOS 用户拖到 Applications 文件夹,Linux 用户解压后运行
install.sh。 - 安装完成后,打开 IDE,你会看到一个简洁的界面——嗯,确实有点简陋,但够用。
1.2.2 安装 ESP32 板级支持包
Arduino IDE 默认不支持 ESP32,需要手动添加板级支持包。步骤如下:
- 打开 文件 > 首选项(Windows)或 Arduino IDE > 设置(macOS)。
- 在“附加开发板管理器网址”里填入:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - 点击 工具 > 开发板 > 开发板管理器,搜索
esp32。 - 找到 esp32 by Espressif Systems,点击安装(大约 200MB,需要等一会儿)。
安装完成后,你会在开发板列表里看到一大串 ESP32 型号。选你手头的那块就行,比如 ESP32 Dev Module 或 NodeMCU-32S。
%LOCALAPPDATA%/Arduino15/staging/packages 目录下。
1.2.3 串口驱动安装
ESP32 开发板通常使用 CP2102 或 CH340 串口芯片。插上板子后,如果电脑没识别到串口,就需要手动装驱动。
- CP2102 驱动: 去 Silicon Labs 官网下载。
- CH340 驱动: 去 WCH 官网下载,或者直接用驱动精灵。
装好驱动后,打开设备管理器(Windows)或 ls /dev/tty.*(macOS/Linux),你应该能看到类似 COM3 或 /dev/ttyUSB0 的设备。
1.3 PlatformIO 环境搭建
如果你打算认真做项目,我强烈推荐 PlatformIO。它基于 VS Code,功能强大得多。
1.3.1 安装 VS Code 与 PlatformIO 插件
- 下载并安装 Visual Studio Code。
- 打开 VS Code,点击左侧扩展图标,搜索 PlatformIO IDE。
- 点击安装,等待完成(第一次安装会下载核心工具,大约 300MB)。
安装完成后,VS Code 底部会出现一个 蚂蚁头图标——那就是 PlatformIO 的入口。
1.3.2 创建第一个 ESP32 项目
- 点击蚂蚁头图标,选择 Open > New Project。
- 输入项目名称,比如
esp32_websocket_demo。 - 在 Board 里搜索 ESP32 Dev Module,选中它。
- Framework 选择 Arduino(当然你也可以选 ESP-IDF,但咱们这课程用 Arduino 框架)。
- 点击 Finish,PlatformIO 会自动创建项目结构并下载依赖。
项目结构长这样:
esp32_websocket_demo/
├── .pio/ # 编译缓存,不用管
├── .vscode/ # VS Code 配置
├── include/ # 头文件
├── lib/ # 第三方库
├── src/ # 源代码
│ └── main.cpp # 主程序
├── test/ # 测试文件
├── platformio.ini # 项目配置文件
└── README.md
嗯,比 Arduino IDE 那种单文件结构清晰多了吧?
1.3.3 配置 platformio.ini
这个文件是 PlatformIO 的灵魂。我一般会这样配置:
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
bblanchon/ArduinoJson @ ^6.21.0
links2004/WebSockets @ ^2.4.0
这里 monitor_speed 设置串口波特率,lib_deps 声明依赖库。PlatformIO 会自动下载这些库,不用你手动去翻 GitHub。
monitor_speed 设成 115200,因为 ESP32 默认就是这个波特率。如果你用 9600,串口打印会乱码——别问我怎么知道的。
1.4 串口调试工具链搭建
环境搭好了,怎么确认板子能正常工作?串口调试是第一步。
1.4.1 串口监视器
Arduino IDE 自带串口监视器,在 工具 > 串口监视器 里打开。PlatformIO 也有内置的串口监视器,点击底部 Serial Monitor 按钮就行。
我个人更喜欢用 PuTTY(Windows)或 screen(macOS/Linux),因为它们更稳定,不会丢数据。
# macOS/Linux 下用 screen 连接串口
screen /dev/ttyUSB0 115200
# 退出 screen:Ctrl+A,然后按 K
1.4.2 测试代码:点亮板载 LED
来,写个最简单的程序,验证环境是否正常。
// Arduino IDE 版本
void setup() {
Serial.begin(115200);
pinMode(2, OUTPUT); // ESP32 板载 LED 通常接 GPIO2
}
void loop() {
digitalWrite(2, HIGH);
Serial.println("LED ON");
delay(1000);
digitalWrite(2, LOW);
Serial.println("LED OFF");
delay(1000);
}
上传后,如果板载 LED 开始闪烁,串口监视器里打印出 "LED ON" 和 "LED OFF",恭喜你,环境搭建成功了。
A fatal error occurred: Failed to connect to ESP32,多半是没按住 BOOT 按钮。ESP32 需要在上传时进入下载模式。具体操作:按住 BOOT,按一下 EN,松开 BOOT。嗯,我刚开始玩 ESP32 时,这个操作练了十几次才形成肌肉记忆。
1.5 知识体系总览
下面这张图,把本章的知识结构串起来了。你可以把它当成一张地图,随时回来对照。
1.6 常见问题与避坑指南
最后,我把这些年遇到过的坑整理一下,你遇到了可以直接翻这里。
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 上传失败:Failed to connect | 未进入下载模式 | 按住 BOOT,按 EN,松开 BOOT |
| 串口打印乱码 | 波特率不匹配 | 检查 Serial.begin() 和监视器波特率是否一致 |
| 编译报错:esp32 未找到 | 板级支持包未安装 | 重新安装 ESP32 包,检查 JSON 地址 |
| PlatformIO 下载库失败 | 网络问题或库名错误 | 检查 lib_deps 格式,或手动下载放到 lib/ 目录 |
| Windows 不识别串口 | 驱动未安装 | 安装 CP2102 或 CH340 驱动 |
ls /dev/tty.* 看看有没有新设备。有时候系统会把它识别成 /dev/tty.wchusbserial*,而不是 ttyUSB0。