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

news2024/11/26 4:36:25

前言

立创开发板之前出了个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》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue-devtools 不显示的问题

vue 项目中浏览器右上角可以显示出插件&#xff0c;但是控制台却没有显示。 项目中在main.js中添加设置devtools为trueVue.config.devtools true插件显示可以使使用&#xff0c;控制台没有显示VUE选项 项目使用了 externals 打包优化&#xff0c;使用了vue的压缩版本&#x…

Etcd 基本入门

1&#xff1a;什么是 Etcd ? Etcd 是 CoreOS 团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;Etcd基于 Go 语言实现。 名字由来&#xff0c;它源于两个方面&#xff0c;…

Intel Arc显卡安装Stable Diffusion

StableDiffusion是一种基于深度学习的文本到图像生成模型&#xff0c;于2022年发布。它主要用于根据文本描述生成详细图像&#xff0c;也可应用于其他任务&#xff0c;如内补绘制、外补绘制和在提示词指导下生成图像翻译。通过给定文本提示词&#xff0c;该模型会输出一张匹配提…

Nagios工具

一 nagios 相关概念 Nagios 是一款开源的免费网络监视工具&#xff0c;能有效监控 Windows、Linux 和 Unix 的主机状态&#xff0c;交换机路由器等网络设置&#xff0c;打印机等。在系统或服务状态异常时发出邮件或短信报警第 一时间通知网站运维人员&#xff0c;在状态恢复后…

不愧是字节出来的,真厉害...

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始…

互联网轻量级框架整合之JavaEE基础

不得不解释得几个概念 JavaEE SUN公司提出来的企业版Java开发中间件&#xff0c;主要用于企业级互联网系统的框架搭建&#xff0c;同时因为Java语言优质的平台无关性、可移植性、健壮性、支持多线程和安全性等优势&#xff0c;其迅速成为构建企业互联网平台的主流技术&#x…

4T第十四届省赛模拟2

一、Seg 温度读取&#xff1a; ①温度 温度读他读出来就是有精度的所以自带小数 我们读取的时候直接强制类型转换读它的各个位也不会丢失精度 ②电压 电压是你人为的/51.0了&#xff0c;从char->float->char所以会有精度丢失 所以要用原始数据来换算 在原始数据上多…

web布局——说清楚fixed布局

极限省流 想要fixed做导航页面&#xff1a;指定清楚top、left、right、bottom&#xff0c;没指定清楚布局位置就会采用默认的方式&#xff1a; 0&#xff09;父元素的padding&#xff1a;fixed元素相对位移 1&#xff09;同级元素是fixed元素&#xff1a;覆盖 2&#xff09…

.NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案

目录(结尾附加项目代码资源地址) 引言&#xff1a; 1. SAGA事务模式 2. 拆分为子事务 3. 失败回滚 4. 如何做补偿 4.1 失败的分支是否需要补偿 5. 异常 6. 异常与子事务屏障 6.1 NPC的挑战 6.2 现有方案的问题 6.3 子事务屏障 6.4 原理 7. 更多高级场景 7.1 部分…

Golang-Gorm-快速上手

Gorm文档 GORM文档地址 安装依赖 go get -u "gorm.io/driver/mysql"go get -u "gorm.io/gorm"连接数据库 默认连接方式 func main() {// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情dsn : "user:passtcp(127.0.0…

Django自动化测试平台项目前端框架设计

引言 在之前根据项目具体情况&#xff0c;开发了一套自动预报数据的平台&#xff0c;但是前端页面不耐看&#xff0c;久了就生厌。于是就想更换前端框架&#xff0c;顺便记录一下。 前端设计 原来的界面&#xff1a; 一键预报模块&#xff1a; 为了有更好的感官体验&#xf…

设计模式——结构型——外观模式Facade

处理器类 public class Cpu {public void start() {System.out.println("处理器启动了...");} } 内存类 public class Memory {public void start() {System.out.println("内存启动了...");} } 硬盘类 public class Disk {public void start() {Syste…

单目图像加单点测距,求解目标位姿

单目图像加单点测距&#xff0c;求解目标位 附赠自动驾驶学习资料和量产经验&#xff1a;链接 单目相机通过对极约束来求解相机运动的位姿。参考了ORBSLAM中单目实现的代码&#xff0c;这里用opencv来实现最简单的位姿估计。 对极约束的概念可以参考我的这篇 Visual SLAM –…

总结TCP各类知识点

前言 本篇博客博主将详细地介绍TCP有关知识点&#xff0c;坐好板凳发车啦~ 一.TCP特点 1.有连接 TCP传输的过程中类似于打电话的各个过程 2.可靠传输 通过TCP自身的多种机制来保证可靠传输 3.面向字节流 内容是以字节的方式来进行发送与接收 4.缓冲区 TCP有接收缓冲区…

谈一谈BEV和Transformer在自动驾驶中的应用

谈一谈BEV和Transformer在自动驾驶中的应用 BEV和Transformer都这么火&#xff0c;这次就聊一聊。 结尾有资料连接 一 BEV有什么用 首先&#xff0c;鸟瞰图并不能带来新的功能&#xff0c;对规控也没有什么额外的好处。 从鸟瞰图这个名词就可以看出来&#xff0c;本来摄像头…

使用启智OpenI平台体验Open-Sora笔记

OpenI准备部分 镜像代码仓 创建云脑任务 新建调试任务 镜像选择 如果不想体验整个安装配置过程的话&#xff0c;我准备了一个Open-Sora的环境镜像应该可以直接开箱即用 地址&#xff1a; 192.168.204.22:5000/default-workspace/99280a9940ae44ca8f5892134386fddb/image:Open…

【C++的奇迹之旅】C++关键字命名空间使用的三种方式C++输入输出命名空间std的使用惯例

文章目录 &#x1f4dd;前言&#x1f320; C关键字(C98)&#x1f309; 命名空间&#x1f320;命名空间定义&#x1f309;命名空间使用 &#x1f320;命名空间的使用有三种方式&#xff1a;&#x1f309;加命名空间名称及作用域限定符&#x1f320;使用using将命名空间中某个成员…

NSGA算法

先给自己叠甲&#xff0c;记录自己的学习过程&#xff0c;如有内容错误欢迎指正!!!。 1. NSGA算法简介&#xff08;Nondominated Sorting Genetic Algorithm&#xff09; 根据标题&#xff0c;NSGA算法分为两个要点&#xff0c;Nondominated Sorting&#xff08;非支配排序&a…

基本数据类型

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据类型是一种用于描述数据存储格式的结构。 PL/SQL 和其他编程语言一样也有多种数据类型&#xff0c;PL/SQL 语言中的常用数据类型和 Oracle 数据库中内置的数据类型基本…

基于JSP的母婴用品网站

背景 随着时代的飞速进步&#xff0c;计算机技术已经广泛而深刻地渗透到社会的各个层面。人们生活质量的持续提升&#xff0c;以及对母婴产品需求的日益增长&#xff0c;都推动了母婴用品网站开发的必要性和紧迫性。这类网站依托计算机技术&#xff0c;通过对相关产品信息的有…