基于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大模型产业竞争的…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
