基于ESP32-IDF驱动GPIO输出控制LED

基于ESP32-IDF驱动GPIO输出控制LED

文章目录

  • 基于ESP32-IDF驱动GPIO输出控制LED
    • 一、点亮LED
      • 3.1 LED电路
      • 3.2 配置GPIO函数`gpio_config`()原型和头文件
      • 3.3 设置GPIO引脚电平状态函数`gpio_set_level`()原型和头文件
      • 3.4 代码实现并编译烧录

一、点亮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_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_maskuint64_t指定要配置的 GPIO 引脚的位掩码。例如,配置 GPIO27 为 (1ULL << 27)
modegpio_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_engpio_pullup_t是否启用上拉电阻:
- GPIO_PULLUP_ENABLE:启用上拉
- GPIO_PULLUP_DISABLE:禁用上拉
pull_down_engpio_pulldown_t是否启用下拉电阻:
- GPIO_PULLDOWN_ENABLE:启用下拉
- GPIO_PULLDOWN_DISABLE:禁用下拉
intr_typegpio_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)。
  2. 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就成功点亮了:

框架,使用 FreeRTOS 创建了一个任务,用来控制 GPIO27 引脚点亮一个 LED。

idf.py create-project led	// 创建工程
idf.py build				// 编译程序
idf.py flash				// 烧录程序
idf.py monitor				// 日志输出

最终我们开发板上的LED就成功点亮了:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958534.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5训练自己的数据及rknn部署

YOLOv5训练自己的数据及rknn部署 一、下载源码二、准备自己的数据集2.1 标注图像2.2 数据集结构 三、配置YOLOv5训练3.1 修改配置文件3.2 模型选择 四、训练五、测试六、部署6.1 pt转onnx6.2 onnx转rknn 七、常见错误7.1 训练过程中的错误7.1.1 cuda: out of memory7.1.2 train…

MATLAB 如何避免复杂shp文件对inpolygon的影响

**任务描述&#xff1a;**当我想用inpolygon函数将属于非洲的pixel选出来时&#xff0c;发现因为周边小岛的影响&#xff0c;pixel选取有问题&#xff0c;如下图。 第一种解决办法&#xff1a; 首先将复杂shp文件查分成简单的shp文件&#xff0c;即将不相交的元素分离开 [QGIS…

2025.01春节可用两个带源的TV直播软件

电视直播pro 2.612 论坛的分享: https://tieba.baidu.com/p/9183010315 我的网盘 http://pan.ezdial.cn/nasone/tvbox/%E7%94%B5%E8%A7%86%E7%9B%B4-pro.apk 这个软件挺牛逼的,因为虽然有直播购物,但是里面的频道是真好,有电影解说有电视剧, 最后还能自定义播放源. 唯一不足找…

Ubuntu24.04初始化MySQL报错 error while loading shared libraries libaio.so.1

Ubuntu24.04初始化MySQL报错 error while loading shared libraries: libaio.so.1 问题一&#xff1a;libaio1不存在 # 提示libaio1不存在 [rootzabbix-mysql-master.example.com x86_64-linux-gnu]#apt install numactl libaio1 Reading package lists... Done Building depe…

【Linux】其他备选高级IO模型

其他高级 I/O 模型 以上基本介绍的都是同步IO相关知识点&#xff0c;即在同步I/O模型中&#xff0c;程序发起I/O操作后会等待I/O操作完成&#xff0c;即程序会被阻塞&#xff0c;直到I/O完成。整个I/O过程在同一个线程中进行&#xff0c;程序在等待期间不能执行其他任务。下面…

RV1126+FFMPEG推流项目源码

源码在我的gitee上面&#xff0c;感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-projecthttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project

VMware虚拟机克隆或复制linux后无法上网的解决方案

1.首先转移虚拟机到另一台电脑 【虚拟机转移】超详细的将虚拟机&#xff08;ubuntu&#xff09;从一台电脑复制到另一台电脑教程_虚拟机复制到另一台电脑-CSDN博客 1.先把虚拟机整个文件拷贝到另一台电脑 2。打开vmware&#xff0c;选择打开虚拟机&#xff0c;选择 .vmx 就可…

具有CLI命令和Web界面的WOL

简介 什么是 wol &#xff1f; wol 是一个命令行工具&#xff0c;用于发送唤醒网络上设备的 Wake-On-LAN&#xff08;WOL&#xff09;魔法包。具有命令行界面和网页界面两种功能。本文只介绍了网页界面。 主要特点 功能&#xff1a;通过发送 Wake-On-LAN&#xff08;WOL&…

Vue2:使用sortablejs实现el-table中行拖拽调整顺序

如图,实现拖拽表格中的行来调整行顺序,但是其中的编号仍然是1、2、3、4的顺序,不跟着变化。 实现如下: 一、导入sortablejs import Sortable from "sortablejs";export default { components: {Sortable},data() {return {//数据中的id很重要,拖拽行重新排序…

分布式光纤应变监测是一种高精度、分布式的监测技术

一、土木工程领域 桥梁结构健康监测 主跨应变监测&#xff1a;在大跨度桥梁的主跨部分&#xff0c;如悬索桥的主缆、斜拉桥的斜拉索和主梁&#xff0c;分布式光纤应变传感器可以沿着这些关键结构部件进行铺设。通过实时监测应变情况&#xff0c;能够精确捕捉到车辆荷载、风荷…

智能手机“混战”2025:谁将倒下而谁又将突围?

【潮汐商业评论原创】 “去年做手机比较艰难&#xff0c;几乎每个品牌都在调价、压货&#xff0c;像华为这种以前都不给我们分货的厂商&#xff0c;也开始成为我的主要库存。不过今年开头比较好&#xff0c;20号国补一开始&#xff0c;店里的人流和手机销量就明显涨了不少&…

OpenCV文字绘制支持中文显示

OpenCV版本&#xff1a;4.4 IDE&#xff1a;VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示&#xff0c;网上很多方法推荐的都是使用FreeType来支持&#xff0c;FreeType是什么呢&#xff1f;FreeType的官网上有介绍 FreeType官网 https://www.freetype.or…

MyBatis-Plus的条件构造器和常用接口

一、wrapper介绍 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 ​ AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 ​ QueryWrapper &#xff1a; 查询条件封装 ​ UpdateWrapper &#xff1a; Update 条件封装 ​ Abst…

结合实例分析A2DP SBC帧结构和编解码算法

SBC也就是Sub band codec&#xff0c;俗称子带编码&#xff0c;是蓝牙A2DP必须支持的唯一编码。下面结合实例看看SBC编码数据在蓝牙传输中帧结构以及SBC的编解码算法流程&#xff1a; AVDTP Frame 首先AVDTP Frame是基于L2CAP协议&#xff0c;所以会包含有4个字节的L2CAP头部&…

接口(3)

大家好&#xff0c;今天我们接着上一篇的内容继续往下来看看&#xff0c;了解一下如何实现多个接口&#xff0c;与继承父类不同&#xff0c;一个类可以实现接口&#xff0c;那么话不多说&#xff0c;来看。 2.5实现多个接口. 在Java中,类和类之间是单继承的,一个类只能有一个…

MATLAB提供的颜色映射表colormap——伪彩色

图像处理领域的一个习惯&#xff1a;不是真实的颜色&#xff0c;一般用伪彩色。一是说明不是物体本身的颜色&#xff0c;二是彩色更容易分辨。 MATLAB陆续提供了16种颜色映射表colormap。 之前的都很丑&#xff0c;近5年新增的4种还可以。总的说来还是丑。 这是一种鸟的名字。…

网络安全 | 入侵检测系统(IDS)与入侵防御系统(IPS):如何识别并阻止威胁

网络安全 | 入侵检测系统&#xff08;IDS&#xff09;与入侵防御系统&#xff08;IPS&#xff09;&#xff1a;如何识别并阻止威胁 一、前言二、入侵检测系统&#xff08;IDS&#xff09;2.1 IDS 的工作原理2.2 IDS 的技术类型2.3 IDS 的部署方式 三、入侵防御系统&#xff08;…

工业“MCU+AI”

随着工业4.0的推进&#xff0c;传统工业设备正向智能化和自动化方向转型。这要求设备具备更高的算力、更强的实时处理能力以及支持AI算法的能力&#xff0c;以应对工业机器人、电机控制、预测性维护等复杂应用场景。 近年来越来越多的芯片厂商纷纷推出工业“MCUAI”产品&#…

【统计的思想】假设检验(二)

假设检验是根据人为设定的显著水平&#xff0c;对被测对象的总体质量特性进行统计推断的方法。 如果我们通过假设检验否定了零假设&#xff0c;只是说明在设定的显著水平下&#xff0c;零假设成立的概率比较小&#xff0c;并不是说零假设就肯定不成立。如果零假设事实上是成立…

[云讷科技]Kerloud Falcon四旋翼飞车虚拟仿真空间发布

虚拟仿真环境作为一个独立的专有软件包提供给我们的客户&#xff0c;用于帮助用户在实际测试之前验证自身的代码&#xff0c;并通过在仿真引擎中添加新的场景来探索新的飞行驾驶功能。 环境要求 由于环境依赖关系&#xff0c;虚拟仿真只能运行在装有Ubuntu 18.04的Intel-64位…