1. ESP32开发环境搭建:Arduino IDE与ESP-IDF双平台配置

做嵌入式开发这么多年,我始终觉得环境搭建是入门的第一道坎。ESP32 的开发环境其实不复杂,但选错工具链、装错驱动,能让你折腾一整天。今天咱们就把 Arduino IDE 和 ESP-IDF 两个平台都搭起来,再跑个 Hello World 验证一下。

本章目标: 完成双平台开发环境搭建,确保串口通信正常,跑通第一个程序。

1.1 开发环境选型:Arduino IDE vs ESP-IDF

很多新手会纠结到底学哪个。我的建议是:两个都要装。Arduino IDE 适合快速验证、原型开发;ESP-IDF 适合做产品级项目,资源调度更精细。

对比项 Arduino IDE ESP-IDF
上手难度 低,5分钟跑通 中高,需要熟悉 CMake
编译速度 快 较慢(全量编译)
FreeRTOS 支持 封装后使用 原生完整支持
OTA 升级 需第三方库 原生组件支持
适用场景 原型、教学、简单采集 产品、多任务、低功耗

我个人习惯用 Arduino IDE 做快速验证,等逻辑稳定了再迁移到 ESP-IDF 做优化。你想想看,如果每次改个引脚定义都要等两分钟编译,那效率得多低?

1.2 硬件准备与驱动安装

先确认你手上的 ESP32 开发板。市面上常见的有 ESP32-DevKitC、NodeMCU-32S、以及各种合宙、安信可的模组。不管哪种,核心都是 ESP32 芯片,开发流程一样。

1.2.1 驱动安装(CP2102 / CH340)

大部分 ESP32 开发板用的串口芯片是 CP2102 或 CH340。插上 USB 线后,如果电脑没识别到串口,那就是驱动没装。

  • CP2102:去 Silicon Labs 官网下载驱动,Windows 一般自动更新能装上
  • CH340:国内板子常用,去 WCH 官网下载,注意区分 32/64 位
我曾经遇到过一个问题:CH340 驱动装好后,设备管理器里显示黄色感叹号。后来发现是 USB 线只能充电不能传数据。换根数据线就好了。所以,先换线试试,别急着重装系统。

1.2.2 确认串口编号

Windows 下打开设备管理器,展开「端口 (COM 和 LPT)」,看到类似 Silicon Labs CP210x USB to UART Bridge (COM3) 就对了。记下这个 COM 号,后面烧录要用。

Linux/Mac 下用 ls /dev/ttyUSB* 或 ls /dev/tty.* 查看。

1.3 Arduino IDE 环境搭建

这是最快捷的路径。我个人很喜欢 Arduino IDE 2.x 版本,界面清爽,还自带串口监视器。

1.3.1 安装步骤

  1. 从 arduino.cc 下载 Arduino IDE(推荐 2.x 版本)
  2. 安装后打开,进入 文件 > 首选项
  3. 在「附加开发板管理器网址」里填入:https://espressif.github.io/arduino-esp32/package_esp32_index.json
  4. 打开 工具 > 开发板 > 开发板管理器,搜索 esp32,点击安装
小技巧: 安装过程会下载工具链和库,大概 200MB 左右。如果下载慢,可以挂个代理,或者用国内镜像源。我一般用 https://mirrors.tuna.tsinghua.edu.cn/ 替换默认地址。

1.3.2 选择开发板

安装完成后,在 工具 > 开发板 > ESP32 Arduino 下找到你的板型。如果找不到完全匹配的,选 ESP32 Dev Module 基本都能用。

关键参数设置:

  • Flash Size:4MB(大部分板子默认)
  • Partition Scheme:Huge APP (3MB No OTA) 或 Default 4MB
  • Upload Speed:921600(如果下载失败,降到 115200)

1.4 ESP-IDF 环境搭建

说实话,ESP-IDF 的安装比 Arduino IDE 复杂不少。但它是乐鑫官方推荐的开发框架,OTA、WiFi 配网、低功耗这些功能支持得最好。

1.4.1 安装方式选择

方式 适用系统 难度 说明
VSCode + ESP-IDF 插件 Win/Mac/Linux 低 一键安装,推荐新手
命令行手动安装 Linux/Mac 中 灵活,适合 CI/CD
Docker 镜像 全平台 中 隔离环境,团队统一

我建议 Windows 用户直接用 VSCode 插件。打开 VSCode,搜索 ESP-IDF,安装后按 Ctrl+Shift+P,输入 ESP-IDF: Configure,跟着向导走就行。

1.4.2 验证安装

打开终端,运行:

idf.py --version

如果看到类似 ESP-IDF v5.1.2 的输出,说明安装成功。

注意: ESP-IDF v5.x 开始移除了对 Python 2 的支持,必须用 Python 3.8+。我遇到过有人装了 v5.0 但系统 Python 还是 2.7,结果编译报错。检查一下 python --version。

1.5 第一个 Hello World 程序

环境搭好了,咱们跑个程序验证一下。这里分别给出 Arduino IDE 和 ESP-IDF 的版本。

1.5.1 Arduino IDE 版本

新建一个 Arduino 项目,粘贴以下代码:

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("Hello World from ESP32!");
  Serial.printf("Chip model: %s\n", ESP.getChipModel());
  Serial.printf("Flash size: %d bytes\n", ESP.getFlashChipSize());
}

void loop() {
  Serial.printf("Uptime: %lu ms\n", millis());
  delay(2000);
}

点击上传按钮,等待编译和烧录。打开串口监视器(波特率 115200),你应该能看到 Hello World 和芯片信息。

1.5.2 ESP-IDF 版本

创建一个新项目:

idf.py create-project hello_world
cd hello_world

编辑 main/hello_world_main.c:

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"

void app_main(void)
{
    printf("Hello World from ESP-IDF!\n");

    esp_chip_info_t chip_info;
    esp_chip_info(&chip_info);
    printf("Chip model: %d cores, WiFi%s%s\n",
           chip_info.cores,
           (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
           (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

    unsigned flash_size;
    esp_flash_get_size(NULL, &flash_size);
    printf("Flash size: %d MB\n", flash_size / (1024 * 1024));

    int64_t uptime = 0;
    while (1) {
        printf("Uptime: %lld s\n", uptime / 1000);
        vTaskDelay(2000 / portTICK_PERIOD_MS);
        uptime += 2000;
    }
}

编译烧录:

idf.py set-target esp32
idf.py build
idf.py -p COM3 flash monitor

按 Ctrl+] 退出监视器。

1.6 开发环境全景图

下面这张图展示了整个开发环境的组件关系和流程。我画这张图的时候,特意把驱动层、工具链、应用层分开了,方便你理解每一层的作用。

ESP32 开发环境全景图 ESP32 开发板(硬件) USB 串口驱动(CP2102 / CH340) 工具链:编译器、链接器、烧录工具、Python 环境 Arduino IDE + 库 ESP-IDF + CMake 用户应用程序(Hello World) 串口输出 / 日志监视器 说明:双平台共享同一套硬件和驱动,区别在于开发框架和工具链

1.7 常见问题与避坑指南

环境搭建过程中,我遇到过不少坑。这里列几个最常见的,你遇到了可以直接翻到这里查。

问题1:上传失败,提示 "A fatal error occurred: Failed to connect to ESP32"
原因:ESP32 没有进入下载模式。
解决:按住开发板上的 BOOT 键,再按一下 EN 键(复位),然后松开 BOOT 键。或者检查串口线是否接触不良。
问题2:编译时报错 "Python 2.7 is not supported"
原因:系统默认 Python 版本太低。
解决:安装 Python 3.8+,并将 python3 软链接到 python,或者设置环境变量 ESP_IDF_PYTHON=python3。
问题3:串口监视器显示乱码
原因:波特率不匹配,或者串口被其他程序占用。
解决:检查代码里的 Serial.begin(115200) 和监视器右下角的波特率是否一致。关闭其他串口工具(如 Putty、串口助手)。

1.8 验证清单

环境搭完,别急着往下走。花两分钟确认一下这些项都通过了:

  • ✅ 设备管理器能识别到串口(COM 号已知)
  • ✅ Arduino IDE 能编译并上传 Hello World
  • ✅ 串口监视器能正常显示输出
  • ✅ ESP-IDF 能编译并烧录 Hello World
  • ✅ 两个平台都能读取芯片信息和 Flash 大小

如果以上都通过了,恭喜你,开发环境已经就绪。后面咱们就可以正式开始数据采集和 OTA 升级的实战了。