一、安装 PlatformIO 插件
-
打开 VS Code ,点击左侧活动栏的 "扩展" 图标(或按
Ctrl+Shift+X)。 -
在搜索框中输入 "PlatformIO IDE"。
-
找到由 PlatformIO 官方发布的插件(蓝色蚂蚁头图标),点击 "安装"。
-
安装完成后,VS Code 底部状态栏会出现一个蚂蚁头图标,并自动开始初始化(下载约 200MB 核心组件)。请保持网络通畅,耐心等待(可能需要 10~30 分钟)。
💡 如果初始化过程卡住,可以尝试重启 VS Code 或使用代理。
二、创建 ESP32 项目
-
点击底部状态栏的 蚂蚁头图标 ,在打开的 "Home" 页面中,选择 "New Project"
-
填写项目信息:
-
Name :
esp32_dualcore_breath(不要有空格或中文) -
Board :搜索
esp32,选择Espressif ESP32 Dev Module(通用型号,适用于大多数开发板) -
Framework :选择
Arduino -
Location :使用默认位置或自定义文件夹,点击 Finish
-
-
首次创建 ESP32 项目时,PlatformIO 会自动下载 ESP32 开发工具链和库,请耐心等待(可能需 5~10 分钟)。
三、编写呼吸灯代码
项目创建完成后,VS Code 会自动打开项目文件夹。现在我们来编写双核呼吸灯代码。
-
在左侧 "资源管理器" 中展开项目,找到
src文件夹下的main.cpp。 -
删除原有的所有内容,然后复制以下代码并粘贴进去:
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>#define LED_CORE_0 2 // 核心0的LED (GPIO2,通常为板载LED)
#define LED_CORE_1 4 // 核心1的LED (GPIO4,需外接LED)#define PWM_FREQ 5000
#define PWM_RESOLUTION 8void breathTask(void *pvParameters) {
int ledPin = (int)pvParameters;
int pwmChannel = (ledPin == LED_CORE_0) ? 0 : 1;ledcSetup(pwmChannel, PWM_FREQ, PWM_RESOLUTION);
ledcAttachPin(ledPin, pwmChannel);bool dimming = false;
int brightness = 0;while (1) {
if (!dimming) {
brightness += 1;
if (brightness >= 255) {
brightness = 255;
dimming = true;
}
} else {
brightness -= 1;
if (brightness <= 0) {
brightness = 0;
dimming = false;
}
}
ledcWrite(pwmChannel, brightness);
vTaskDelay(4 / portTICK_PERIOD_MS); // 4ms 步长,完整呼吸周期约2秒
}
}void setup() {
Serial.begin(115200);
delay(100);
Serial.println("双核呼吸灯启动");xTaskCreatePinnedToCore(breathTask, "BreathCore0", 2048, (void*)LED_CORE_0, 1, NULL, 0);
xTaskCreatePinnedToCore(breathTask, "BreathCore1", 2048, (void*)LED_CORE_1, 1, NULL, 1);
}void loop() {
vTaskDelay(portMAX_DELAY);
} -
按
Ctrl+S保存文件。
四、连接硬件
你需要准备两个 LED(或一个板载 LED + 一个外接 LED):
-
LED1 :长脚(正极)接 ESP32 的 GPIO2,短脚(负极)接 GND(板载 LED 通常已集成,无需外接)。
-
LED2 :长脚(正极)接 ESP32 的 GPIO4 ,短脚(负极)经过一个 220Ω 电阻 接 GND。
-
默认的开发板只有蓝灯,也可以看效果
五、编译与上传
-
连接 ESP32:使用 USB 数据线将开发板连接到电脑。
-
编译 :点击 VS Code 底部状态栏的
√(打勾) 图标,或按快捷键Ctrl+Alt+B。- 等待终端输出
SUCCESS,表示编译通过。
- 等待终端输出
-
上传 :点击底部状态栏的
→(右箭头) 图标,或按快捷键Ctrl+Alt+U。- 上传过程中 ESP32 可能会进入下载模式(自动完成),等待终端显示
SUCCESS即成功。
- 上传过程中 ESP32 可能会进入下载模式(自动完成),等待终端显示
🐛 常见上传失败解决办法:
端口未识别 :在项目根目录的
platformio.ini文件中添加一行:upload_port = COM3(Windows)或upload_port = /dev/ttyUSB0(Linux/macOS),将 COM3 替换为实际端口号。驱动问题:安装 CH340/CP2102 驱动(根据你的开发板型号)。
上传超时 :按住 ESP32 板上的 BOOT 按钮,然后按一下 EN 按钮,再松开 BOOT,再尝试上传。
六、验证效果
目视观察效果
七、进阶提示
-
查看串口输出 :点击底部状态栏的 插头图标 (Serial Monitor),或按
Ctrl+Alt+S,可以看到双核呼吸灯启动的打印信息。 -
修改 PWM 频率 :改变
PWM_FREQ的值(如 1000),可以影响 LED 亮度变化的平滑度,但人眼不易察觉,通常保持 5000Hz 即可。 -
只用单颗 LED 演示双核:如果你只有一个 LED(板载),可以将两个任务都控制 GPIO2,但两个任务会同时控制同一个引脚,导致呼吸混乱。
八、可能遇到的问题及解决
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 编译时找不到 Arduino.h | PlatformIO 未正确安装或项目创建不完整 | 重新创建项目,确保 Framework 选择 Arduino |
| 上传时提示"Failed to connect" | 端口选错或驱动未安装 | 检查设备管理器(Windows)或 ls /dev/tty*(Mac/Linux),修改 platformio.ini 中的 upload_port |
| 外接 LED 不呼吸 | 引脚不支持 PWM 或接线错误 | GPIO4 支持 PWM,检查正负极和电阻;改用其他支持 PWM 的引脚(如 GPIO5, GPIO16, GPIO17 等) |
| 两个 LED 呼吸同步 | 巧合(启动时间相近) | 重新上电或复位,两个核心启动时间有微小差异,通常不会完全同步 |
现在你已经成功实现了 ESP32 双核呼吸灯效果! 可以在此基础上尝试修改呼吸曲线(如使用正弦波)、增加按键控制等。