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. 填写项目信息:

    • Nameesp32_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 双核呼吸灯效果! 可以在此基础上尝试修改呼吸曲线(如使用正弦波)、增加按键控制等。

相关推荐
恶魔泡泡糖2 小时前
stm32F103C8T6标准库串口发送之发送字节2
stm32·单片机·嵌入式硬件
嵌入式小站2 小时前
STM32 零基础可移植教程 22:SPI 入门,先读一个外部 Flash
stm32·单片机·嵌入式硬件
IT_阿水12 小时前
STM32 HAL库输入捕获配置
stm32·单片机·嵌入式硬件
破晓单片机16 小时前
030、STM32项目分享:计时充电桩系统
stm32·单片机·嵌入式硬件
kebidaixu17 小时前
FreeRTOS 移植到 STM32F407VETX 记录
stm32·单片机
qq_4112624217 小时前
硬件是ESP32-P4连接LAN8720A,正常初始化之后,设备DHCP失败
stm32·单片机·fpga开发
嵌入式ZYXC21 小时前
第1篇:《面试题:画一个STM32最小系统电路,每个元件的作用》
stm32·单片机·嵌入式硬件·面试·职场和发展
振南的单片机世界21 小时前
printf重定向:一句fputc,串口打印任意变量
stm32·单片机·嵌入式硬件
嵌入式ZYXC1 天前
第2篇:《面试题:LDO和DC-DC的区别?分别用在什么场景?》
stm32·单片机·嵌入式硬件·面试·职场和发展