当前位置: 首页 > 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大模型产业竞争的…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...