问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于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);

参数说明

  1. gpio_num
  • 类型:gpio_num_t
  • 指定要设置电平的 GPIO 引脚。例如:GPIO_NUM_27
  • 有效范围:GPIO_NUM_0到硬件支持的最大 GPIO 编号(ESP32 的最大值通常为GPIO_NUM_39)。
  1. 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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号