- ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
- ❤️ 本篇创建记录 2025-08-24 ❤️
- ❤️ 本篇更新记录 2025-08-31 ❤️
- 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
- 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
1. 前言
今天直接来学习ESP32S3的点灯代码。主要分几个部分:
- 介绍一下ESP32S3开发板
- 编译运行Blink代码,分析使用API
注意:
- 后续如果不特别说明,都是基于ESP32S3开发板演示
- 建议单独一个目录去存储所编译过的所有示例代码,比如博主这里
2. ESP32S3板子介绍




注意:因为这个板子有两个USB口,别插错了!!!然后就是RGB灯对应的IO口是48.

3. 右键通过vscode打开Blink工程


/* Blink 示例代码
这段示例代码属于公共领域(或者根据你的选择采用CC0许可证)。
除非适用法律要求或书面同意,本软件按"原样"分发,不附带任何明示或暗示的担保或条件。
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "led_strip.h"
#include "sdkconfig.h"
// 定义日志标签
static const char *TAG = "example";
/* 使用项目配置菜单 (idf.py menuconfig) 选择要闪烁的GPIO,
或者你可以在下面这行编辑并设置一个数字。
*/
#define BLINK_GPIO CONFIG_BLINK_GPIO
// LED状态变量,0表示关闭,1表示打开
static uint8_t s_led_state = 0;
// 如果配置为使用LED灯带
#ifdef CONFIG_BLINK_LED_STRIP
static led_strip_handle_t led_strip; // LED灯带句柄
// LED闪烁函数
static void blink_led(void)
{
/* 如果LED状态为开启 */
if (s_led_state) {
/* 设置LED像素颜色,RGB值从0 (0%) 到 255 (100%) */
led_strip_set_pixel(led_strip, 0, 16, 16, 16);
/* 刷新灯带以发送数据 */
led_strip_refresh(led_strip);
} else {
/* 清除所有像素,关闭所有LED */
led_strip_clear(led_strip);
}
}
// 配置LED函数
static void configure_led(void)
{
ESP_LOGI(TAG, "Example configured to blink addressable LED!");
/* LED灯带初始化配置,设置GPIO和像素数量 */
led_strip_config_t strip_config = {
.strip_gpio_num = BLINK_GPIO, // 灯带数据引脚GPIO号
.max_leds = 1, // 板上至少一个LED
};
// 如果配置为使用RMT后端
#if CONFIG_BLINK_LED_STRIP_BACKEND_RMT
led_strip_rmt_config_t rmt_config = {
.resolution_hz = 10 * 1000 * 1000, // 10MHz分辨率
.flags.with_dma = false, // 不使用DMA
};
// 创建RMT设备LED灯带,ESP_ERROR_CHECK用于检查错误
ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip));
// 如果配置为使用SPI后端
#elif CONFIG_BLINK_LED_STRIP_BACKEND_SPI
led_strip_spi_config_t spi_config = {
.spi_bus = SPI2_HOST, // 使用SPI2主机
.flags.with_dma = true, // 使用DMA
};
// 创建SPI设备LED灯带
ESP_ERROR_CHECK(led_strip_new_spi_device(&strip_config, &spi_config, &led_strip));
#else
#error "不支持的LED灯带后端"
#endif
/* 清除所有像素,关闭所有LED */
led_strip_clear(led_strip);
}
// 如果配置为使用GPIO LED
#elif CONFIG_BLINK_LED_GPIO
// LED闪烁函数
static void blink_led(void)
{
/* 根据状态设置GPIO电平(低或高)*/
gpio_set_level(BLINK_GPIO, s_led_state);
}
// 配置LED函数
static void configure_led(void)
{
ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
// 重置GPIO引脚
gpio_reset_pin(BLINK_GPIO);
/* 将GPIO设置为推挽输出模式 */
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}
#else
#error "不支持的LED类型"
#endif
// 主应用程序入口函数
void app_main(void)
{
/* 根据LED类型配置外设 */
configure_led();
// 主循环
while (1) {
// 记录LED状态日志
ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF");
// 控制LED闪烁
blink_led();
/* 切换LED状态 */
s_led_state = !s_led_state;
// 延迟一段时间,portTICK_PERIOD_MS表示每个tick的毫秒数
vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
}
}
3.1 IDF方法说明
- ESP_LOGI(TAG, “message”):
- 用于输出信息级别日志
- TAG用于标识日志来源,便于过滤和调试
- 常用的一个方法
- gpio_reset_pin(gpio_num):
- 重置GPIO引脚到默认状态
- 解除引脚的其它功能配置
- gpio_set_direction(gpio_num, mode):
- 设置GPIO引脚方向
- GPIO_MODE_OUTPUT表示设置为输出模式
- gpio_set_level(gpio_num, level):
- 设置GPIO输出电平
- level为0输出低电平,1输出高电平
- vTaskDelay(ticks):
- FreeRTOS任务延迟函数
- 使当前任务进入
阻塞状态指定时间- portTICK_PERIOD_MS是系统时钟节拍周期(毫秒)
- ESP_ERROR_CHECK(expr):
- 检查ESP-IDF函数返回值
- 如果表达式返回错误码,会打印错误并中止程序
- led_strip_new_rmt_device()/led_strip_new_spi_device():
- 创建基于RMT或SPI的LED灯带设备
- 返回灯带句柄用于后续操作
- led_strip_set_pixel():
- 设置灯带上特定像素的RGB颜色值
- 红色: (255, 0, 0)
绿色: (0, 255, 0)
蓝色: (0, 0, 255)
白色: (255, 255, 255)
黄色: (255, 255, 0)
紫色: (255, 0, 255)
青色: (0, 255, 255)
- led_strip_refresh():
- 将像素数据发送到灯带,更新显示
- led_strip_clear():
- 清除灯带所有像素,关闭所有LED
4. 编译测试
-
步骤1:选择入口

-
步骤2:配置FlashMode、FlashSize

-
步骤3:配置IO口、间隔时间

-
步骤4:选择目标板子、com口、烧录方式

-
步骤5:编译、烧录、观察串口



后续当你熟悉这套流程之后,这个步骤基本上1分钟配置完成,剩下就是开发编译bin的事情了。

6511

被折叠的 条评论
为什么被折叠?



