基于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_mask | uint64_t | 指定要配置的 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); // 设置引脚为GPIO27io_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就成功点亮了:
相关文章:

基于ESP32-IDF驱动GPIO输出控制LED
基于ESP32-IDF驱动GPIO输出控制LED 文章目录 基于ESP32-IDF驱动GPIO输出控制LED一、点亮LED3.1 LED电路3.2 配置GPIO函数gpio_config()原型和头文件3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件3.4 代码实现并编译烧录 一、点亮LED 3.1 LED电路 可以看到&#x…...

【优选算法】9----长度最小的子数组
----------------------------------------begin-------------------------------------- 铁子们,前面的双指针算法篇就算告一段落啦~ 接下来是我们的滑动窗口篇,不过有一说一,算法题就跟数学题一样,只要掌握方法,多做…...

LabVIEW太阳能照明监控系统
在公共照明领域,传统的电力照明系统存在高能耗和维护不便等问题。利用LabVIEW开发太阳能照明监控系统,通过智能控制和实时监测,提高能源利用效率,降低维护成本,实现照明系统的可持续发展。 项目背景 随着能源危机…...
MongoDB中单对象大小超16M的存储方案
在 MongoDB 中,单个文档的大小限制为 16MB。如果某个对象(文档)的大小超过 16MB,可以通过以下几种方案解决: 1. 使用 GridFS 适用场景:需要存储大文件(如图像、视频、文档等)。 原…...

三维激光扫描-用智能检测系统提升效率
当下,企业对生产效率和质量控制的要求越来越高。传统的检测方法往往难以满足高精度、快速响应的需求。三维激光扫描技术结合智能检测系统,为工业检测带来了革命性的变革。 传统检测方法的局限性 传统检测方法主要依赖于人工测量和机械检测工具…...
css遇到的一些问题
1.vw单位,在PC端vw单位是包含右侧滚轮的宽度,而在移动端不会包含滚轮的长度,在PC端运用vw单位进行居中对齐,会比实际偏左盒子偏右一点,因为内容区域并不包含滚轮。 2.运用媒体查询进行响应式布局式,媒体查询…...

【langgraph】ubuntu安装:langgraph:未找到命令
langgraph 在ubuntu24.04 参考:langgraph运行:报错: (05_ep_dev) root@k8s-master-pfsrv:/home/zhangbin/perfwork/01_ai/05_ep_dev/expert# langgraph dev langgraph:未找到命令查看langraph的安装情况 pip show langgraph...

mysql 学习2 MYSQL数据模型,mysql内部可以创建多个数据库,一个数据库中有多个表;表是真正放数据的地方,关系型数据库 。
在第一章中安装 ,启动mysql80 服务后,连接上了mysql,那么就要 使用 SQL语句来 操作mysql数据库了。那么在学习 SQL语言操作 mysql 数据库 之前,要对于 mysql数据模型有一个了解。 MYSQL数据模型 在下图中 客户端 将 SQL语言&…...
小识JVM堆内存管理的优化机制TLAB
JVM(Java虚拟机)在堆内存分配空间时,TLAB(Thread Local Allocation Buffer,线程本地分配缓存区)是一种重要的内存管理优化技术。以下是对TLAB的详细解释: 一、TLAB的定义 TLAB是JVM堆内存管理…...

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档
一、云电脑:电竞新宠崛起 在电竞游戏不断发展的今天,硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度,玩家们往往需要投入大量资金购置高性能电脑。然而,云电脑技术的出现,为玩家们提供了一种…...

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证10)
基于Cookie传递token的主要思路是通过用户身份验证后,将生成的token保存到Response.Cookies返回客户端,后续客户端访问服务接口时会自动携带Cookie到服务端以便验证身份。之前一直搞不清楚的是服务端程序如何从Cookie读取token进行认证(一般都…...

vscode环境中用仓颉语言开发时调出覆盖率的方法
在vscode中仓颉语言想得到在idea中利用junit和jacoco的覆盖率,需要如下几个步骤: 1.在vscode中搭建仓颉语言开发环境; 2.在源代码中右键运行[cangjie]coverage. 思路1:编写了测试代码的情况(包管理工具) …...
OLED--软件I2C驱动__标准库和HAL库
一、标准库---版本一 OLED.c--标准库 #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) #define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x…...
【设计模式-行为型】观察者模式
一、什么是观察者模式 说起观察者模式,不得不说一位观察者模式的高级应用者,朱元璋。不知道大家有没有看过胡军演的电视剧《朱元璋》。这部剧背景是元朝末年,天下大乱,朱元璋自幼父母双亡,沦为乞丐,后遁入空…...
从理论到实践:Django 业务日志配置与优化指南
在现代 Web 开发中,日志记录是确保系统可维护性和可观测性的重要手段。通过合理的日志配置,我们可以快速定位问题、分析系统性能,并进行安全审计。本文将围绕 Django 框架,详细介绍如何配置和优化业务日志,确保开发环境和生产环境都能高效地记录和管理日志。 © ivwdc…...

Linux下php8安装phpredis扩展的方法
Linux下php8安装phpredis扩展的方法 下载redis扩展执行安装编辑php.ini文件重启php-fpmphpinfo 查看 下载redis扩展 前提是已经安装好redis服务了 php-redis下载地址 https://github.com/phpredis/phpredis 执行命令 git clone https://github.com/phpredis/phpredis.git执行…...

Flink运行时架构
一、系统架构 1)作业管理器(JobManager) JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的JobManager所控制执行。 JobManger又包含3个不同的组件。 &am…...

JupyterLab 安装以及部分相关配置
安装 JupyterLab pip install jupyter启动 JupyterLab jupyter lab [--port <指定的端口号>] [--no-browser] # --port 指定端口 # --no-browser 启动时不打开浏览器安装中文 首先安装中文包 pip install jupyterlab-language-pack-zh-CN安装完成后重启 JupyterLab 选…...
PC端实现PDF预览(支持后端返回文件流 || 返回文件URL)
一、使用插件 插件名称:vue-office/pdf 版本:2.0.2 安装插件:npm i vue-office/pdf^2.0.2 1、“vue-office/pdf”: “^2.0.2”, 2、 npm i vue-office/pdf^2.0.2 二、代码实现 // 引入组件 (在需要使用的页面中直接引入&#x…...

大模型 / 智能体在智能运维领域的应用总结与发展趋势概述
智能体 智能运维 ? 回顾大模型的发展 大模型的发展在过去两年间呈现出爆炸式的增长,成为推动人工智能领域快速进步的关键力量。 2023年3月:百度发布了其知识增强的大语言模型产品“文心一言”,这标志着国内AI大模型产业竞争的…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...