基于ESP32-IDF驱动GPIO输出控制LED
创作时间:
作者:
@小白创作中心
基于ESP32-IDF驱动GPIO输出控制LED
引用
CSDN
1.
https://blog.csdn.net/weixin_54859557/article/details/145308343
本文将详细介绍如何使用ESP32-IDF驱动GPIO输出控制LED。通过配置GPIO引脚和设置电平状态,实现LED的点亮。文章内容包括LED电路连接、GPIO配置函数的使用方法以及完整的代码实现和编译烧录步骤。
一、点亮LED
3.1 LED电路
可以看到,LED灯连接到了我们开发板上的GPIO27引脚。
3.2 配置GPIO函数gpio_config()原型和头文件
在ESP-IDF中,配置 GPIO 的函数是gpio_config(),它的函数原型如下:
esp_err_t gpio_config(const gpio_config_t *pGPIOConfig);
参数说明:
pGPIOConfig:指向gpio_config_t类型结构体的指针,用于配置 GPIO 的各项属性。
gpio_config_t是一个结构体,用于设置 GPIO 的各种参数。它的定义如下:
typedef struct {
uint64_t pin_bit_mask; // GPIO 引脚的位掩码
gpio_mode_t mode; // GPIO 模式(输入/输出等)
gpio_pullup_t pull_up_en; // 是否启用上拉
gpio_pulldown_t pull_down_en; // 是否启用下拉
gpio_int_type_t intr_type; // GPIO 中断类型
} gpio_config_t;
gpio_config_t各成员详细说明:
成员 | 类型 | 描述 |
|---|---|---|
pin_bit_mask | uint66t | 指定要配置的 GPIO 引脚的位掩码。例如,配置 GPIO27 为(1ULL << 27)。 |
mode | gpio_mode_t | 设置 GPIO 的工作模式,取值如下: |
-GPIO_MODE_DISABLE:禁用 GPIO | ||
-GPIO_MODE_INPUT:设置为输入模式 | ||
-GPIO_MODE_OUTPUT:设置为输出模式 | ||
-GPIO_MODE_OUTPUT_OD:设置为开漏输出模式 | ||
-GPIO_MODE_INPUT_OUTPUT:设置为输入输出模式 | ||
-GPIO_MODE_INPUT_OUTPUT_OD:设置为输入开漏输出模式 | ||
pull_up_en | gpio_pullup_t | 是否启用上拉电阻: |
-GPIO_PULLUP_ENABLE:启用上拉 | ||
-GPIO_PULLUP_DISABLE:禁用上拉 | ||
pull_down_en | gpio_pulldown_t | 是否启用下拉电阻: |
-GPIO_PULLDOWN_ENABLE:启用下拉 | ||
-GPIO_PULLDOWN_DISABLE:禁用下拉 | ||
intr_type | gpio_int_type_t | 设置 GPIO 中断触发类型,取值如下: |
-GPIO_INTR_DISABLE:禁用中断 | ||
-GPIO_INTR_POSEDGE:上升沿触发中断 | ||
-GPIO_INTR_NEGEDGE:下降沿触发中断 | ||
-GPIO_INTR_ANYEDGE:任意边沿触发中断 | ||
-GPIO_INTR_LOW_LEVEL:低电平触发中断 | ||
-GPIO_INTR_HIGH_LEVEL:高电平触发中断 |
返回值:gpio_config()函数的返回值是esp_err_t类型,用于指示函数的执行结果:
ESP_OK:配置成功。- 其他错误代码:配置失败。
头文件
要使用gpio_config函数,需要包含以下头文件:
#include "driver/gpio.h"
示例代码:
以下代码展示如何配置 GPIO27 为输出模式,同时禁用上下拉电阻:
gpio_config_t io_conf;
io_conf.pin_bit_mask = (1ULL << GPIO_NUM_27); // 配置 GPIO27
io_conf.mode = GPIO_MODE_OUTPUT; // 设置为输出模式
io_conf.pull_up_en = GPIO_PULLUP_DISABLE; // 禁用上拉
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE; // 禁用下拉
io_conf.intr_type = GPIO_INTR_DISABLE; // 禁用中断
gpio_config(&io_conf); // 应用配置
通过gpio_config()函数,可以灵活地配置 GPIO 引脚的各种属性,适用于多种应用场景(如 LED 控制、按键输入、中断处理等)。
3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件
在 ESP-IDF 中,gpio_set_level用于设置指定 GPIO 引脚的电平状态,其原型定义如下:
esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level);
参数说明:
gpio_num:
- 类型:
gpio_num_t - 指定要设置电平的 GPIO 引脚。例如:
GPIO_NUM_27。 - 有效范围:
GPIO_NUM_0到硬件支持的最大 GPIO 编号(ESP32 的最大值通常为GPIO_NUM_39)。
level:
- 类型:
uint32_t - 指定电平值:
0表示设置为低电平。1表示设置为高电平。
返回值:
- 返回值类型为
esp_err_t表示函数执行的结果: ESP_OK:设置成功。ESP_ERR_INVALID_ARG:如果指定的 GPIO 编号无效或未配置为输出模式。
头文件:
要使用gpio_set_level函数,需要包含以下头文件:
#include "driver/gpio.h"
3.4 代码实现并编译烧录
#include "freertos/FreeRTOS.h" // 包含FreeRTOS头文件
#include "freertos/task.h" // 包含任务管理头文件
#include "driver/gpio.h" // 包含GPIO驱动头文件
#define LED_GPIO GPIO_NUM_27 // 定义GPIO27为LED引脚
void LED_RUN(void *arg)
{
while(1){
gpio_set_level(GPIO_NUM_27, 1); // 点亮LED
}
}
void app_main(void)
{
gpio_config_t io_conf;
io_conf.pin_bit_mask = (1ULL << LED_GPIO); // 设置引脚为GPIO27
io_conf.mode = GPIO_MODE_OUTPUT; // 设置引脚模式为输出模式
io_conf.pull_up_en = GPIO_PULLUP_DISABLE; // 禁止上拉电阻
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE; // 禁止下拉电阻
io_conf.intr_type = GPIO_INTR_DISABLE; // 禁止中断
gpio_config(&io_conf);
xTaskCreatePinnedToCore(LED_RUN, "LED_RUN", 2048, NULL, 3, NULL, 1); // 创建任务LED_RUN,栈大小2048,优先级3,运行在核心1上
}
这段代码通过ESP-IDF框架,使用 FreeRTOS 创建了一个任务,用来控制 GPIO27 引脚点亮一个 LED。
idf.py create-project led // 创建工程
idf.py build // 编译程序
idf.py flash // 烧录程序
idf.py monitor // 日志输出
最终我们开发板上的LED就成功点亮了:
本文原文来自CSDN
热门推荐
长平之战:廉颇与赵括的军事对决
表示论:现代数学的核心与桥梁
巴黎奥运会前夕 埃菲尔铁塔票价将上涨20%
健康生活:跆拳道培养意志力与自律性格!
油茶树繁殖技术哪家强?一文读懂三种主流繁殖方法
欧罗巴焦点战:阿贾克斯大战拉齐奥
黄磊"神厨"人设崩塌:从"料理大师"到"样样松"
纪念丨1990年,琼瑶的电视剧时代开始了
秋游北京正当时:故宫金黄、香山火红、颐和园碧绿
新型高分辨率DAC融合多项创新,为数字化转型注入新动力
《学龄前儿童膳食指南》教你科学喂养
吉林省养老金调整最新消息:2024年或延续3.8%涨幅
伤残鉴定标准大不同:一个案例揭示关键差异
嵌甲防治必读:从日常护理到专业治疗方案
沪深300指数五大解析:市场风向标的投资价值与机遇
<我的世界>15周年:跨平台1.5亿月活,持续创新引领游戏界
五步轻松去除衣物油渍,从预处理到清洗全攻略
从平台游戏到文化符号:马里奥系列40年发展回顾
游戏行业50年:移动平台崛起,掌机时代终结
炖牛腩时,只需3个小窍门,牛肉软烂易嚼,小孩老人吃都特方便
警惕!肝囊肿快速增大可能是囊腺瘤,这些预防措施要记牢
大连老虎滩极地馆游玩攻略:与极地动物亲密接触的奇妙之旅
打造个性化穿搭:从基础选择到配饰搭配的实用指南
浏览器卡顿?教你几招秒变流畅
从3年到7年:中国乒坛五位大满贯得主的夺冠之路
炸药库管理制度:确保C-4炸药安全的关键
调车5万钩零差错,佟德鑫摘得“国家能源杯”桂冠
缺木的男孩名字 五行缺木男孩宜用字
养护知识 | 足球场天然草主要选种的是什么品种?有什么讲究呢?
热继电器整定电流,电机保护神器