【快速上手ESP32(基于ESP-IDFVSCode)】01-环境配置GPIO口延时函数(先点个灯)

前言

立创开发板之前出了个ESP32S3R8N8的开发板,当时嫖了个优惠券,九块九拿下了。

现在不仅是35.9一个,而且还没货。

如果真的想要的小伙伴可以自己去打板焊一个,人家开源了(目测难度较大,反正我是焊不上去的)。

立创·ESP32S3R8N8开发板 - 嘉立创EDA开源硬件平台立创·ESP32S3R8N8开发板 - 嘉立创EDA开源硬件平台,开源广场汇集了多种类型的电路设计工程,快速实现资源共享!icon-default.png?t=N7T8https://oshwhub.com/li-chuang-kai-fa-ban/li-chuang-esp32s3r8n8-kai-fa-ban前阵子在忙别的事,然后这块板子一直在吃灰,最近没啥事就拿了起来。跟着人家立创官方的文档学一学。

之前出了Arduino的快速上手ESP8266(其实ESP32也差不多,基本通用,就是提供给ESP32的库函数更丰富一些,比较ESP32比ESP8266强大太多了嘛),前阵子还出了MicroPython的快速上手ESP32,那么今天就来出个基于ESP-IDF的快速上手ESP32。

不过这次就不能是一文速通了,因为这个ESP-IDF有点像STM32的固件库,值得说一说的地方还挺多的。

ESP-IDF

我们先问问文心一言,这个ESP-IDF是个什么东西。

总而言之,ESP-IDF就是帮助我们开发ESP系列芯片的一个框架,我们使用它,即可发挥出ESP32的全部威力(没错,我的意思就是Arduino和MicroPython都不如ESP-IDF,但是Arduino和MicroPython会相对而言简单很多)

我们需要先配置好ESP-IDF的环境。

配置环境

首先先下载安装VSCode,这个下载安装直接一路next即可,记得更换默认安装路径。

接着下载ESP-IDF离线安装包。

https://dl.espressif.cn/dl/esp-idf/icon-default.png?t=N7T8https://dl.espressif.cn/dl/esp-idf/选择第二个下载,或者关注我的公众号“折途想要敲代码”回复关键词“ESP32”即可免费下载关于ESP32的所有我打包好的资料。

下载之后直接执行正常安装即可,在选择组件的界面的时候,取消勾选开发集成(因为我们不需要)。安装的时候记得关闭VSCode。

安装完毕之后打开VSCode,去拓展那边下载好ESP-IDF的插件。

然后进入命令面板。

输入

configure esp-idf extension

等待一会进入到下面的这个界面,选择最下面的选项。

接着安装ESP-IDF,一般是会直接显示出来我们之前安装过的,如果没显示出来,那么手动配置一下路径,接着等待安装完毕即可。

GPIO

关于ESP-IDF中如何使用GPIO,可以查阅文档(有时候可能需要魔法)

GPIO & RTC GPIO - ESP32 - — ESP-IDF 编程指南 v5.2.1 文档icon-default.png?t=N7T8https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/gpio.html

ESP32中关于GPIO最屌的就是交换矩阵,通过交换矩阵,我们的GPIO可以任意分配到我们想要用的外设上,例如STM32中的UART的引脚是固定的,但是ESP32中UART的引脚却可以通过交换矩阵任意指定,这是非常厉害的地方,我单方面宣布在这个地方ESP32完胜STM32。

上面是官方的技术文档中的特性介绍。

有一个有些矛盾的地方,就是ESP-IDF编程指南和ESP32S3的技术手册中关于GPIO口数量的描述。

技术手册中是说有45个通用GPIO管脚,其中0~21,26~48既可输入也可输出。

而在编程指南中描述又变了,当然也可能是我理解错了。

刚刚把交换矩阵捧上天了,但实际上我们分配GPIO口的时候并不能完全的随心所欲。

 

同上所说,我们有些管脚并不能随意分配。例如34~39引脚只能配置为输入模式,且不具备软件使能上拉或下拉功能。

以及使用WiFi的时候不能使用ADC。

另外需要提一下的是,我用的这款立创开发板出的ESP32S3R8N8把UART0给充公拿去用作烧录程序用了,因此用这款开发板的时候最好就不要使用UART0了。

使用函数

#include "driver/gpio.h"

首先先是包含上面的头文件。

我开头说过,ESP-IDF跟STM32的固件库还是有点像的,使用GPIO口首先我们就需要先配置GPIO口。

同样是传入一个结构体变量的指针,通过传入的结构体的成员参数来配置GPIO。

这个结构体类型的成员参数有以下几个。

我们来看看应该如何填写这些参数。

上表的说明应该已经很详细了,那我就打个样,看看我们点个灯应该如何配置。

#include "driver/gpio.h"

void initGPIO(){
    gpio_config_t init;
    init.intr_type=GPIO_INTR_DISABLE;             //失能中断;
    init.mode=GPIO_MODE_OUTPUT;                   //输出模式
    init.pin_bit_mask=(1ULL<<18);                 //GPIO18
    init.pull_down_en=GPIO_PULLDOWN_DISABLE;      //失能下拉模式
    init.pull_up_en=GPIO_PULLUP_ENABLE;           //使能上拉模式

    gpio_config(&init);
}

配置完之后我们就可以使其输出高电平或者是低电平了。

以上函数是输出或者是获取输入的函数,都比较简单,编程指南中说的也比较清楚。

那么至此我们就可以点灯了,但是我们想要让它闪烁起来,那么还需要看看延时函数怎么使用。

延时函数

这个我们包含一个头文件。

#include <unistd.h>

然后使用usleep函数,参数写入要延时的微秒即可延时。

知道怎么延时之后,那么我们就直接开始让LED闪烁。

#include "driver/gpio.h"
#include <unistd.h>

void initGPIO(){
    gpio_config_t init={
        .intr_type=GPIO_INTR_DISABLE,             //失能中断;
        .mode=GPIO_MODE_OUTPUT,                   //输出模式
        .pin_bit_mask=(1ULL<<18),                 //GPIO18
        .pull_down_en=GPIO_PULLDOWN_DISABLE,      //失能下拉模式
        .pull_up_en=GPIO_PULLUP_ENABLE,           //使能上拉模式
    };

    gpio_config(&init);
}

void app_main(void){
    initGPIO();
    while(1){
        gpio_set_level(18,0);
        usleep(500*1000);       //1000us是一个ms,延时500个ms,可以另外封装成毫秒延时函数
        gpio_set_level(18,1);
        usleep(500*1000);
    }
}

那么我们通过上面的代码就成功地让LED闪烁了起来。

参考

Docsicon-default.png?t=N7T8https://lceda001.feishu.cn/wiki/GOIlwwfbIi1SC3k8594cDeFVn8gGPIO & RTC GPIO - ESP32 - — ESP-IDF 编程指南 v5.2.1 文档icon-default.png?t=N7T8https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/gpio.html《esp32-s3_datasheet_cn.pdf》

《esp32-s3_technical_reference_manual_cn.pdf》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/500103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink CDC 同步数据到Doris

Flink CDC 同步数据到Doris Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持了全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合 Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量…

如何在Win10部署Oracle数据库并实现无公网IP使用PL SQL远程访问

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

[RAM] 图解 RAM 结构原理

主页&#xff1a; 元存储博客 文章目录 前言1. Channel2. Dimm3. Rank4. Bank5. Row6. Column7. Beat8. Burst Length总结 前言 从CPU至DRAM晶粒之间依据层级由大至小为channel>DIMM>rank>chip>bank>row/column。 图片来源&#xff1a; 电脑王 DRAM层级关系 DR…

第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯

【问题描述】 小蓝要上一个楼梯&#xff0c;楼梯共有 n 级台阶&#xff08;即小蓝总共要走 n 级&#xff09;。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端&#xff1f;【输入格式】 输入的第一行包含一个整数 n 。 第二行包含三个整…

go发布包到github

1. 首先&#xff0c;我们在github上创建一个公有仓库并clone到本地 git clone https://github.com/kmust-why/gdmp-token.git cd gdmp-token/ 2. 在gdmp-token工程中初始化go.mod&#xff0c;其中后面的链接要跟github上创建的仓库和你的用户名对应 go mod init github.com…

python 字典练习

# 字典练习1 import time def main():month_income{1月: 8000, 2月: 8200, 3月: 7900, 4月: 6900, 5月: 8900, 6月: 12000, 7月: 8900, 8月: 6000,9月: 8900, 10月: 9200, 11月: 6200, 12月: 7000}year_income0for k,v in month_income.items():print(月份→,k,工资→,v)time.s…

4.模板-数组类封装

文章目录 功能代码运行结果 功能 利用模板进行数组类封装&#xff0c;在代码实现过程中&#xff0c;使用了 1.operator重载&#xff0c;利用深拷贝防止浅拷贝问题&#xff1b; 2.operator[]重载&#xff0c;确保可以使用[]来仿真数组元素&#xff1b; 3.尾插法、尾删法、返回数…

基于主成分分析的机器学习分类代码

前言 本文内容主要实现基于主成分分析的数据降维和四种经典的机器学习分类算法&#xff0c;包括&#xff1a;支持向量机、随机森林、XGBoost分类器、scikit-learn的梯度提升分类器和Histogram-based Gradient Boosting分类器 1.数据准备 import pickle import pandas as pd …

消息队列RocketMQ环境搭建

消息队列RocketMQ环境搭建 1.下载:配置环境变量启动NameServer启动Broker发送和接收消息测试模拟发送消息模拟接收消息 控制台安装与启动 软硬件需求: 系统要求是 64 位的&#xff0c;JDK要求是1.8及其以上版本的 1.下载: https://rocketmq.apache.org/download/ 2.解压到指…

fast_bev学习笔记

目录 一. 简述二. 输入输出三. github资源四. 复现推理过程4.1 cuda tensorrt 版 一. 简述 原文:Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline FAST BEV是一种高性能、快速推理和部署友好的解决方案&#xff0c;专为自动驾驶车载芯片设计。该框架主要包…

数学逆元计算

定义&#xff0c;即是有&#xff08;在mod p 的意义下&#xff09;&#xff0c;也就是求倒数 根据定义&#xff0c;则有&#xff0c;b的逆元就是 所以得出第一个计算式 求&#xff0c;可以快速计算较大情况&#xff1a; 表示的逆元的值&#xff0c;则有&#xff1a; fac[0]…

基于STM32的汽车防窒息系统

文章目录 基于STM32的汽车防窒息系统系统简介材料展示视频制作硬件连接原理图PCB实物图GSM模块使用GSM模块代码 SGP30模块SGP30模块代码 步进电机驱动步进电机代码 其他模块主逻辑代码 总结 基于STM32的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行&#xff0c;汽车大…

骨传导耳机哪个品牌最好?精选五大热销产品深度测评!

作为一个经验丰富的数码测评师&#xff0c;我经常在生活中使用各类数码产品&#xff0c;骨传导耳机就是其中之一&#xff0c;但在之前&#xff0c;选购骨传导耳机的时候也踩到过不少的坑&#xff0c;因为随着骨传导耳机逐渐热门&#xff0c;一些劣质品牌逐渐进入市场中&#xf…

京东云4核16G服务器优惠价格26元1个月、658元1年、三年3098元

京东云4核16G服务器优惠价格26元1个月、80元3个月、658元1年、3098元三年&#xff0c;配置为&#xff1a;轻量云主机4C16G-220G SSD系统盘-5M带宽-500G月流量&#xff0c;京东云优惠活动 atengyun.com/go/jd 可以查看京东云服务器详细配置和精准报价单&#xff0c;活动打开如下…

代码随想录训练营Day37:● 738.单调递增的数字 ● 968.监控二叉树 ● 总结

738.单调递增的数字 题目链接 https://leetcode.cn/problems/monotone-increasing-digits/description/ 题目描述 思路 从后往前遍历数字的每一位&#xff0c;如果前一位大于后一位&#xff0c;则将其减一&#xff0c;后边的一位取 i-9 中最大的 解答的两点疑惑&#xff1a;…

【Java多线程】5——Lock底层原理

5 Lock底层原理 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&…

错误:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+

错误现象 解决方法&#xff1a; 将urllib3 降级 pip install urllib31.25.11

震惊!AI生成真人视频毫无瑕疵,台词随意变!HeyGen硬核升级数字人

2024年3月21日&#xff0c;HeyGen 5.0 正式发布&#xff01;这款革命性的AIGC产品将AI数字人的魔力融入视频创作&#xff0c;以其简洁易用的特性&#xff0c;让视频制作变得轻而易举。 只需几次点击&#xff0c;即可打造出令人惊叹的高品质视频作品&#xff01; 不仅如此&…

HarmonyOS入门--页面和自定义组件生命周期

文章目录 页面和自定义组件生命周期页面生命周期组件生命周期生命周期的调用时机 页面和自定义组件生命周期 生命周期流程如下图所示&#xff0c;下图展示的是被Entry装饰的组件&#xff08;首页&#xff09;生命周期。 自定义组件和页面的关系&#xff1a; 自定义组件&…

学习【Redis实战篇】这一篇就够了

目录 1. 短信登录1-1. 技术点redis存储token拦截器刷新token有效期 1-2. 业务登录注册 2. 商户查询缓存1-1. 技术点缓存更新策略缓存穿透缓存雪崩缓存击穿 1-2. 业务查询缓存的商铺信息 3. 优惠卷秒杀3-1. 技术点全局唯一ID乐观锁基于Redis实现分布式锁基于Redisson实现分布式锁…