当前位置: 首页 > news >正文

基于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);          // 设置引脚为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-------------------------------------- 铁子们&#xff0c;前面的双指针算法篇就算告一段落啦~ 接下来是我们的滑动窗口篇&#xff0c;不过有一说一&#xff0c;算法题就跟数学题一样&#xff0c;只要掌握方法&#xff0c;多做…...

LabVIEW太阳能照明监控系统

在公共照明领域&#xff0c;传统的电力照明系统存在高能耗和维护不便等问题。利用LabVIEW开发太阳能照明监控系统&#xff0c;通过智能控制和实时监测&#xff0c;提高能源利用效率&#xff0c;降低维护成本&#xff0c;实现照明系统的可持续发展。 ​ 项目背景 随着能源危机…...

MongoDB中单对象大小超16M的存储方案

在 MongoDB 中&#xff0c;单个文档的大小限制为 16MB。如果某个对象&#xff08;文档&#xff09;的大小超过 16MB&#xff0c;可以通过以下几种方案解决&#xff1a; 1. 使用 GridFS 适用场景&#xff1a;需要存储大文件&#xff08;如图像、视频、文档等&#xff09;。 原…...

三维激光扫描-用智能检测系统提升效率

当下&#xff0c;企业对生产效率和质量控制的要求越来越高。传统的检测方法往往难以满足高精度、快速响应的需求。三维激光扫描技术结合智能检测系统&#xff0c;为工业检测带来了革命性的变革。 传统检测方法的局限性 传统检测方法主要依赖于人工测量和机械检测工具&#xf…...

css遇到的一些问题

1.vw单位&#xff0c;在PC端vw单位是包含右侧滚轮的宽度&#xff0c;而在移动端不会包含滚轮的长度&#xff0c;在PC端运用vw单位进行居中对齐&#xff0c;会比实际偏左盒子偏右一点&#xff0c;因为内容区域并不包含滚轮。 2.运用媒体查询进行响应式布局式&#xff0c;媒体查询…...

【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内部可以创建多个数据库,一个数据库中有多个表;表是真正放数据的地方,关系型数据库 。

在第一章中安装 &#xff0c;启动mysql80 服务后&#xff0c;连接上了mysql&#xff0c;那么就要 使用 SQL语句来 操作mysql数据库了。那么在学习 SQL语言操作 mysql 数据库 之前&#xff0c;要对于 mysql数据模型有一个了解。 MYSQL数据模型 在下图中 客户端 将 SQL语言&…...

小识JVM堆内存管理的优化机制TLAB

JVM&#xff08;Java虚拟机&#xff09;在堆内存分配空间时&#xff0c;TLAB&#xff08;Thread Local Allocation Buffer&#xff0c;线程本地分配缓存区&#xff09;是一种重要的内存管理优化技术。以下是对TLAB的详细解释&#xff1a; 一、TLAB的定义 TLAB是JVM堆内存管理…...

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

一、云电脑&#xff1a;电竞新宠崛起 在电竞游戏不断发展的今天&#xff0c;硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度&#xff0c;玩家们往往需要投入大量资金购置高性能电脑。然而&#xff0c;云电脑技术的出现&#xff0c;为玩家们提供了一种…...

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证10)

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

vscode环境中用仓颉语言开发时调出覆盖率的方法

在vscode中仓颉语言想得到在idea中利用junit和jacoco的覆盖率&#xff0c;需要如下几个步骤&#xff1a; 1.在vscode中搭建仓颉语言开发环境&#xff1b; 2.在源代码中右键运行[cangjie]coverage. 思路1&#xff1a;编写了测试代码的情况&#xff08;包管理工具&#xff09; …...

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…...

【设计模式-行为型】观察者模式

一、什么是观察者模式 说起观察者模式&#xff0c;不得不说一位观察者模式的高级应用者&#xff0c;朱元璋。不知道大家有没有看过胡军演的电视剧《朱元璋》。这部剧背景是元朝末年&#xff0c;天下大乱&#xff0c;朱元璋自幼父母双亡&#xff0c;沦为乞丐&#xff0c;后遁入空…...

从理论到实践: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&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager是一个Flink集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。也就是说&#xff0c;每个应用都应该被唯一的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)

一、使用插件 插件名称&#xff1a;vue-office/pdf 版本&#xff1a;2.0.2 安装插件&#xff1a;npm i vue-office/pdf^2.0.2 1、“vue-office/pdf”: “^2.0.2”, 2、 npm i vue-office/pdf^2.0.2 二、代码实现 // 引入组件 &#xff08;在需要使用的页面中直接引入&#x…...

大模型 / 智能体在智能运维领域的应用总结与发展趋势概述

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

Windows系统优化工具WinUtil:从新手到专家的完整使用指南

Windows系统优化工具WinUtil&#xff1a;从新手到专家的完整使用指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌倦了Windows系统…...

Pixel Language Portal 集成 Visual Studio Code:智能代码补全插件开发实战

Pixel Language Portal 集成 Visual Studio Code&#xff1a;智能代码补全插件开发实战 1. 为什么开发者需要智能代码补全 想象一下这样的场景&#xff1a;凌晨两点&#xff0c;你正在赶一个紧急项目&#xff0c;手指在键盘上飞舞&#xff0c;但突然卡在一个复杂的函数实现上…...

在AirSim里用Python实现LQR控制:让无人机自动跟踪预设轨迹(附完整代码)

用Python实现AirSim无人机LQR轨迹跟踪&#xff1a;从理论到代码落地 1. 环境准备与基础概念 在开始编写代码之前&#xff0c;我们需要先搭建好开发环境并理解几个核心概念。AirSim是微软开源的无人机/车辆仿真平台&#xff0c;基于Unreal Engine构建&#xff0c;提供了高度逼真…...

使用AIVideo实现LaTeX学术报告自动转视频教程

使用AIVideo实现LaTeX学术报告自动转视频教程 1. 引言 作为一名科研工作者&#xff0c;你是否曾经为了准备学术会议的视频报告而头疼&#xff1f;传统的视频制作需要录制、剪辑、配音等多个繁琐步骤&#xff0c;耗时耗力。现在&#xff0c;通过AIVideo这个强大的AI视频创作平…...

ThingsBoard生产环境部署选型指南:安装包 vs 源码,内存队列 vs RabbitMQ,如何根据项目规模做选择?

ThingsBoard生产环境部署架构选型实战指南 当技术团队准备将ThingsBoard投入实际生产环境时&#xff0c;面临的第一个关键决策往往不是"如何安装"&#xff0c;而是"以什么架构安装"。这个选择将直接影响未来三年的系统稳定性、扩展性和运维成本。作为经历过…...

windows java jar 包后台运行

使用 javaw 实现后台运行&#xff08;简单场景&#xff09;这是最简单的方法。Java 自带的 javaw.exe 是 java.exe 的变体&#xff0c;它运行程序时不会打开任何控制台窗口。操作步骤&#xff1a;创建一个新的文本文件&#xff0c;命名为 start.bat。在文件中写入以下内容&…...

Unity Shader UV 坐标与纹理平铺Tiling Offset 深度解析

从 UV 空间的数学本质出发&#xff0c;理解 URP 中纹理坐标的缩放&#xff08;Tiling&#xff09;与偏移&#xff08;Offset&#xff09;控制原理&#xff0c; 并掌握 Shader Graph、HLSL、C# 三种维度的实践技巧。UV 坐标系基础在实时渲染中&#xff0c;UV 坐标是将二维纹理贴…...

Qwen3-0.6B-FP8详细步骤:WebUI中max_new_tokens参数设置避坑指南

Qwen3-0.6B-FP8详细步骤&#xff1a;WebUI中max_new_tokens参数设置避坑指南 1. 引言&#xff1a;一个参数引发的“血案” 最近在折腾Qwen3-0.6B-FP8这个轻量级模型时&#xff0c;我遇到了一个挺有意思的问题。当时我正在测试它的“思考模式”——就是那个能展示模型内部推理…...

Windows加域必看:如何用PowerShell一键指定OU路径(附完整代码)

Windows域管理自动化&#xff1a;PowerShell指定OU路径的终极指南 在大型企业IT环境中&#xff0c;计算机加域操作从来不是单次事件&#xff0c;而是需要批量执行的常规运维任务。传统手动操作不仅效率低下&#xff0c;还容易因人为失误导致计算机被放入错误的组织单元(OU)。想…...

Qwen3-8B镜像站新手教程:如何选择模型并进行首次提问

Qwen3-8B镜像站新手教程&#xff1a;如何选择模型并进行首次提问 1. 认识Qwen3-8B&#xff1a;你的智能AI助手 Qwen3-8B是Qwen系列最新一代大型语言模型&#xff0c;拥有80亿参数&#xff0c;在推理能力、指令执行和多语言支持方面表现出色。这个模型特别适合个人开发者和小型…...