ESP32 使用 PlatformIO 编译点灯程序

一、安装 PlatformIO 插件

  1. 打开 VS Code ,点击左侧活动栏的 "扩展" 图标(或按 Ctrl+Shift+X)。

  2. 在搜索框中输入 "PlatformIO IDE"。

  3. 找到由 PlatformIO 官方发布的插件(蓝色蚂蚁头图标),点击 "安装"。

  4. 安装完成后,VS Code 底部状态栏会出现一个蚂蚁头图标,并自动开始初始化(下载约 200MB 核心组件)。请保持网络通畅,耐心等待(可能需要 10~30 分钟)。

💡 如果初始化过程卡住,可以尝试重启 VS Code 或使用代理。


二、创建 ESP32 项目

  1. 点击底部状态栏的 蚂蚁头图标 ,在打开的 "Home" 页面中,选择 "New Project"

  2. 填写项目信息:

    • Name :esp32_dualcore_breath(不要有空格或中文)

    • Board :搜索 esp32,选择 Espressif ESP32 Dev Module(通用型号,适用于大多数开发板)

    • Framework :选择 Arduino

    • Location :使用默认位置或自定义文件夹,点击 Finish

  3. 首次创建 ESP32 项目时,PlatformIO 会自动下载 ESP32 开发工具链和库,请耐心等待(可能需 5~10 分钟)。


三、编写呼吸灯代码

项目创建完成后,VS Code 会自动打开项目文件夹。现在我们来编写双核呼吸灯代码。

  1. 在左侧 "资源管理器" 中展开项目,找到 src 文件夹下的 main.cpp。

  2. 删除原有的所有内容,然后复制以下代码并粘贴进去:

    #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 8

    void 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);
    }

  3. 按 Ctrl+S 保存文件。


四、连接硬件

你需要准备两个 LED(或一个板载 LED + 一个外接 LED):

  • LED1 :长脚(正极)接 ESP32 的 GPIO2,短脚(负极)接 GND(板载 LED 通常已集成,无需外接)。

  • LED2 :长脚(正极)接 ESP32 的 GPIO4 ,短脚(负极)经过一个 220Ω 电阻 接 GND。

  • 默认的开发板只有蓝灯,也可以看效果


五、编译与上传

  1. 连接 ESP32:使用 USB 数据线将开发板连接到电脑。

  2. 编译 :点击 VS Code 底部状态栏的 √(打勾) 图标,或按快捷键 Ctrl+Alt+B。

    • 等待终端输出 SUCCESS,表示编译通过。
  3. 上传 :点击底部状态栏的 →(右箭头) 图标,或按快捷键 Ctrl+Alt+U。

    • 上传过程中 ESP32 可能会进入下载模式(自动完成),等待终端显示 SUCCESS 即成功。

🐛 常见上传失败解决办法:

  • 端口未识别 :在项目根目录的 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 双核呼吸灯效果! 可以在此基础上尝试修改呼吸曲线(如使用正弦波)、增加按键控制等。

相关推荐
fly_sunnn2 小时前
STM32-GPIO
stm32·单片机·嵌入式硬件
宵时待雨5 小时前
STM32基础1:嵌入式历史与生态
stm32·单片机·嵌入式硬件
zhangzhangkeji5 小时前
stm32 14-1 WDG 看门狗:理论部分
stm32
不会代码的小猴6 小时前
启动文件
stm32·嵌入式硬件
深圳老胡6 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
逐光者9337 小时前
STM32通信协议——I2C
stm32·单片机·嵌入式硬件
夏虫不可与之言冰8 小时前
Windows WSL2 (Ubuntu) 搭建 ESP‑IDF 6.1 开发环境全过程演示
linux·windows·ubuntu·esp32·乐鑫科技·乐鑫eim·乐鑫代理商
李日华大战鸡红8 小时前
FOC SVPWM过调制(学习记录)
stm32·单片机·学习
千里马029 小时前
STM32读取AD7606-4(HAL库)
stm32·单片机·嵌入式硬件
糖糖单片机设计11 小时前
基于STM32的空气污染检测与报警系统设计与实现
stm32·单片机·嵌入式硬件