基于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大模型产业竞争的…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
OPENCV图形计算面积、弧长API讲解(1)
一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...
SQLSERVER-DB操作记录
在SQL Server中,将查询结果放入一张新表可以通过几种方法实现。 方法1:使用SELECT INTO语句 SELECT INTO 语句可以直接将查询结果作为一个新表创建出来。这个新表的结构(包括列名和数据类型)将与查询结果匹配。 SELECT * INTO 新…...
【自然语言处理】大模型时代的数据标注(主动学习)
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构D 实验设计E 个人总结 A 论文出处 论文题目:FreeAL: Towards Human-Free Active Learning in the Era of Large Language Models发表情况:2023-EMNLP作者单位:浙江大…...
