目录

1.  环境搭建

2.  创建项目

3.  调试相关介绍

4.  代码编写

4.1  包含头文件

4.2  引脚配置

4.3  设置输出电平

4.4  延时函数

4.5  调试


1.  环境搭建

        默认已经搭建好环境,如果未搭建好可参考:

ESP32入门开发·Windows平台下开发环境的搭建-CSDN博客

2.  创建项目

        当我们配好环境后,左边会出现ESP-IDF的图标,点击图标找到新项目向导,选择框架,这里我只安装了5.2.3所以就一个:

        如果没汉化就找到New Project Wizard(新项目向导):


        当然除了上述方法,我们也可以按F1或者Shift+Ctrl+P唤醒上方搜索栏,搜索Nuw Project,效果是一样的:


        选择完框架后进入如下界面,①位项目名称,②是你所要保存的工程路径(注意ESP-IDF 编译系统不支持 ESP-IDF 路径或其工程路径中带有空格):

        ③是一些esp32的芯片型号,根据自己芯片进行选择,这里我使用的是esp32-s3的芯片:

        ④是一些目标芯片的选择,根据板子的不同这里的东西也不同,根据自己需求选择:

        ⑤是连接板子的COM口,看看哪个口和板子连接,这个后续可进行更改:

        设定完后点击“Choose Template”选择模版:

        选择ESP-IDF:

        下面都是一些官方示例模版,如果你想要新建一个空白的,直接如图所示找到sample_project点击,找到图示Creat project using template sample_project点击:

        此时我们发现新建好了一个空白工程:

        此时左侧的相关文件功能分别为:

文件名功能描述
.devcontainer和Docker相关的配置文件(系统自动生成,不需要用户修改)
.vscode和vscode相关的配置文件(系统自动生成,不需要用户修改)
build编译项目文件(编译项目后会自动生成,不需要用户修改)
main主程序目录,系统自动生成的代码
CMakeLists.txtCMake配合文件,用于构建项目编译环境
README.md项目说明文档
sdkconfigSDK配置,在这里可选择enable/disable某一个模块

        随便打一句话,编译一下看看是否成功:

#include <stdio.h>void app_main(void)
{printf("Hellow esp32!!!\n");
}

        点击构建,烧录和监视按键可以发现打印数据:

        空白项目创建完成。

3.  调试相关介绍

编号功能介绍
1当前项目
2当前版本
3选择烧录方式
4选择烧录口
5芯片设备
6SDK配置编辑器
7清理构建的项目
8构建项目
9烧录
10监听
11调试
12构建,烧录,监听
13打开ESP-IDF终端
14执行自定义任务
15问题提示

4.  代码编写

        在代码开始编写前,我们最好找到ESP32-IDF相关的编程指南,方便了解引脚功能,编写代码:

快速入门 - ESP32-S3 - — ESP-IDF 编程指南 v5.5 文档

        找打GPIO相关的章节:

        代码就用上面创建的工程在里面来添加把。

4.1  包含头文件

        想要调用GPIO口相关API函数需要将其头文件包含进来:

#include "driver/gpio.h"

4.2  引脚配置

        这里我们可以参考STM32的引脚配置方便理解一些,我们在使能STM32的引脚时需要将引脚挂载到对应总线上使能时钟,然后对GPIO口其中的一些数据进行配置,将配置好的变量传给相关参数:

	/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引脚,赋值为第0号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数//函数内部会自动根据结构体的参数配置相应寄存器//实现GPIOA的初始化

        ESP32的GPIO口使能大同小异,不过需要注意一点的是,STM32 采用的是传统的 ARM Cortex-M 系列架构,其外设(包括 GPIO)通常挂在不同的总线上,需要单独使能对应总线的时钟才能操作外设,这是为了降低功耗。但是ESP32 的外设时钟管理机制不同,其 GPIO 等常用外设的时钟在芯片上电后默认是使能的,不需要用户手动开启。

        因此这里我们只要定义结构体变量,并且赋值即可,这里我们需要调用 gpio_config_t 函数:

    // 配置GPIO引脚gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 设置要配置的引脚io_conf.mode = GPIO_MODE_OUTPUT;// 设置为输出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉电阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉电阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中断模式不使用式不使用

解释:

        第一行代码结构体声明没少好说的,引脚配置,在 ESP32-IDF 的gpio_config_t结构体中,pin_bit_mask采用位掩码(bitmask) 方式来指定需要配置的 GPIO 引脚,其中的位掩码设计思路:

  • 每个 bit 代表一个 GPIO 引脚,bit 位置与 GPIO 编号对应
  • 当某个 bit 被设置为 1 时,表示需要配置对应的 GPIO 引脚
  • 例如:1ULL << GPIO_NUM_0 表示只配置 GPIO0
  • 若要同时配置多个引脚,可以这样写:(1ULL << GPIO_NUM_0) | (1ULL << GPIO_NUM_2) | (1ULL << GPIO_NUM_4)

ULL表示无符号长整型(64 位),确保在移位操作时不会发生溢出。

如果要同时配置 GPIO0、GPIO2 和 GPIO4,代码可以写成:

io_conf.pin_bit_mask = (1ULL << GPIO_NUM_0) | (1ULL << GPIO_NUM_2) | (1ULL << GPIO_NUM_4);

        对于模式配置,根据需求,使能就是ENABLE,失能就是DISABLE,这里就配置一个输出其他都不要,因此全是DISABLE,可以自己跳转到定义查看:


        配置完后将参数写入,调用函数 gpio_config :

        其实除了缺了个使能这里和STM32差不多:

#include <stdio.h>
#include "driver/gpio.h"void app_main(void)
{// 配置GPIO引脚gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 设置要配置的引脚io_conf.mode = GPIO_MODE_OUTPUT;// 设置为输出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉电阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉电阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中断模式不使用// 配置GPIOgpio_config(&io_conf);
}

4.3  设置输出电平

        我们知道在STM32当中是通过 GPIO_ResetBits 和 GPIO_SetBits 来控制电平的高低的:

		GPIO_ResetBits(GPIOA, GPIO_Pin_0);					//将PA0引脚设置为低电平Delay_ms(500);										//延时500msGPIO_SetBits(GPIOA, GPIO_Pin_0);					//将PA0引脚设置为高电平Delay_ms(500);										//延时500ms

        在ESP32-IDF当中,是通过 gpio_set_level 来控制的:

    gpio_set_level(GPIO_NUM_1, 1); // 设置GPIO0为高电平

        此时的代码:

#include <stdio.h>
#include "driver/gpio.h"void app_main(void)
{// 配置GPIO引脚gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 设置要配置的引脚io_conf.mode = GPIO_MODE_OUTPUT;// 设置为输出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉电阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉电阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中断模式不使用// 配置GPIOgpio_config(&io_conf);gpio_set_level(GPIO_NUM_1, 1); // 设置GPIO0为高电平
}

4.4  延时函数

        这里我使用FreeRTOS的延时函数,因此需要将FreeRTOS头文件引入进来:

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

        调用延时函数 vTaskDelay 延时500ms:

 vTaskDelay(500/portTICK_PERIOD_MS); // 延时500毫秒,portTICK_PERIOD_MS是FreeRTOS的时间基数(通常为1ms)

        此时完整代码:

#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"void app_main(void)
{// 配置GPIO引脚gpio_config_t io_conf;io_conf.pin_bit_mask = (1ULL << GPIO_NUM_1); // 设置要配置的引脚io_conf.mode = GPIO_MODE_OUTPUT;// 设置为输出模式io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;// 禁用下拉电阻io_conf.pull_up_en = GPIO_PULLUP_DISABLE;// 禁用上拉电阻io_conf.intr_type = GPIO_INTR_DISABLE;// 中断模式不使用// 配置GPIOgpio_config(&io_conf);while (1){gpio_set_level(GPIO_NUM_1, 1); // 设置GPIO0为高电平  printf("LED_ON!!!\r\n");     vTaskDelay(500/portTICK_PERIOD_MS); // 延时500毫秒,portTICK_PERIOD_MS是FreeRTOS的时间基数(通常为1ms)gpio_set_level(GPIO_NUM_1, 0); // 设置GPIO0为高电平       printf("LED_OFF!!!\r\n");  vTaskDelay(500/portTICK_PERIOD_MS); // 延时500毫秒,portTICK_PERIOD_MS是FreeRTOS的时间基数(通常为1ms)}
}

4.5  调试

        下载调试看一下:

        可以看到灯闪烁,数据也交替打印:

        这里放不了视频,就只能通过Printf打印来看了,等之后研究研究,更多使用可以参考下方链接。

ESP32入门开发·Windows平台下开发环境的搭建-CSDN博客

ESP32学习笔记_时光の尘的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ONLYOFFICE AI 智能体上线!与编辑器、新的 AI 提供商等进行智能交互

ONLYOFFICE AI 插件​迎来重要更新&#xff0c;带来了新功能和更智能的交互体验。随着 AI 智能体&#xff08;现为测试版&#xff09;的上线、带来更多 AI 提供商支持以及其他新功能&#xff0c;AI 插件已经成为功能强大的文档智能助理。 关于 ONLYOFFICE ONLYOFFICE 文档是多…

【C++进阶学习】第十一弹——C++11(上)——右值引用和移动语义

前言&#xff1a; 前面我们已经将C的重点语法讲的大差不差了&#xff0c;但是在C11版本之后&#xff0c;又出来了很多新的语法&#xff0c;其中有一些作用还是非常大的&#xff0c;今天我们就先来学习其中一个很重要的点——右值引用以及它所扩展的移动定义 目录 一、左值引用和…

【IoTDB】363万点/秒写入!IoTDB凭何领跑工业时序数据库赛道?

【作者主页】Francek Chen 【专栏介绍】⌈⌈⌈大数据与数据库应用⌋⌋⌋ 大数据是规模庞大、类型多样且增长迅速的数据集合&#xff0c;需特殊技术处理分析以挖掘价值。数据库作为数据管理的关键工具&#xff0c;具备高效存储、精准查询与安全维护能力。二者紧密结合&#xff0…

IEEE 2025 | 重磅开源!SLAM框架用“法向量+LRU缓存”,将三维重建效率飙升72%!

一、前言 当前研究领域在基于扩散模型的文本到图像生成技术方面取得了显著进展&#xff0c;尤其在视觉条件控制方面。然而&#xff0c;现有方法&#xff08;如ControlNet&#xff09;在组合多个视觉条件时存在明显不足&#xff0c;主要表现为独立控制分支在去噪过程中容易引入…

无人机遥控器教练模式技术要点

一、技术要点1.控制权仲裁机制&#xff1a;核心功能&#xff1a;清晰定义主控权归属逻辑&#xff08;默认为学员&#xff0c;但教练随时可接管&#xff09;。切换方式&#xff1a;通常通过教练遥控器上的物理开关&#xff08;瞬时或锁定型&#xff09;或软件按钮触发。切换逻辑…

【跨服务器的数据自动化下载--安装公钥,免密下载】

跨服务器的数据自动化下载功能介绍&#xff1a;上代码&#xff1a;发现好久没写csdn了&#xff0c;说多了都是泪~~ 以后会更新一些自动化工作的脚本or 小tricks&#xff0c;欢迎交流。分享一个最近在业务上写的较为实用的自动化脚本&#xff0c;可以批量从远端服务器下载指定数…

C++-->stl: list的使用

前言list的认识list是可以在固定时间&#xff08;O&#xff08;1&#xff09;&#xff09;内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0…

本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕

1. 实现功能 M4-1 接入 whisper ollama qwen3:14b 总结字幕 自动下载视频元数据如果有字幕&#xff0c;只下载字幕使用 ollama 的 qwen3:14b 对字幕内容进行总结 2.运行效果 source /root/anaconda3/bin/activate ytdlp &#x1f50d; 正在提取视频元数据… &#x1f4dd; 正在…

《Linux运维总结:Shell脚本高级特性之变量间接调用》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、变量间接调用 在Shell脚本中&#xff0c;变量间接调用是一种高级特性&#xff0c;它允许你通过另一个变量的值来动态地访问…

ABP VNext + Akka.NET:高并发处理与分布式计算

ABP VNext Akka.NET&#xff1a;高并发处理与分布式计算 &#x1f680; 用 Actor 模型把高并发写入“分片→串行化”&#xff0c;把锁与竞态压力转回到代码层面的可控顺序处理&#xff1b;依托 Cluster.Sharding 横向扩容&#xff0c;Persistence 宕机可恢复&#xff0c;Strea…

[激光原理与应用-250]:理论 - 几何光学 - 透镜成像的优缺点,以及如克服缺点

透镜成像是光学系统中应用最广泛的技术&#xff0c;其通过折射原理将物体信息转换为图像&#xff0c;但存在像差、环境敏感等固有缺陷。以下是透镜成像的优缺点及针对性改进方案&#xff1a;一、透镜成像的核心优点高效集光能力透镜通过曲面设计将分散光线聚焦到一点&#xff0…

测试匠谈 | AI语音合成之大模型性能优化实践

「测试匠谈」是优测云服务平台倾心打造的内容专栏&#xff0c;汇集腾讯各大产品的顶尖技术大咖&#xff0c;为大家倾囊相授开发测试领域的知识技能与实践&#xff0c;让测试工作变得更加轻松高效。 本期嘉宾介绍 Soren&#xff0c;腾讯TEG技术事业群质量工程师&#xff0c;负责…

用天气预测理解分类算法-从出门看天气到逻辑回归

一、生活中的决策难题&#xff1a;周末郊游的「天气判断」 周末计划郊游时&#xff0c;你是不是总会打开天气预报反复确认&#xff1f;看到 "25℃、微风、无雨" 就兴奋收拾行李&#xff0c;看到 "35℃、暴雨" 就果断取消计划。这个判断过程&#xff0c;其…

HTTPS服务

HTTPS服务 一、常见的端口 http ------ 80 明文 https ------ 443 数据加密 dns ------ 53 ssh ------ 22 telent ------ 23 HTTPS http ssl或者tls &#xff08;安全模式&#xff09; 二、原理&#xff1a; c&#xff08;客户端…

【Android笔记】Android 自定义 TextView 实现垂直渐变字体颜色(支持 XML 配置)

Android 自定义 TextView 实现垂直渐变字体颜色&#xff08;支持 XML 配置&#xff09; 在 Android UI 设计中&#xff0c;字体颜色的渐变效果能让界面看起来更加精致与现代。常见的渐变有从左到右、从上到下等方向&#xff0c;但 Android 的 TextView 默认并不支持垂直渐变。…

CANopen Magic调试软件使用

一、软件安装与硬件连接1.1 系统要求操作系统&#xff1a;Windows 7/10/11 (64位)硬件接口&#xff1a;支持Vector/PEAK/IXXAT等主流CAN卡推荐配置&#xff1a;4GB内存&#xff0c;2GHz以上CPU1.2 安装步骤运行安装包CANopen_Magic_Setup.exe选择安装组件&#xff08;默认全选&…

前端css学习笔记3:伪类选择器与伪元素选择器

本文为个人学习总结&#xff0c;如有谬误欢迎指正。前端知识众多&#xff0c;后续将继续记录其他知识点&#xff01; 目录 前言 一、伪类选择器 1.概念 2.动态选择器&#xff08;用户交互&#xff09; 3.结构伪类 &#xff1a;first-child&#xff1a;选择所有兄弟元素的…

深入探索 PDF 数据提取:PyMuPDF 与 pdfplumber 的对比与实战

在数据处理和分析领域&#xff0c;PDF 文件常常包含丰富的文本、表格和图形信息。然而&#xff0c;从 PDF 中提取这些数据并非易事&#xff0c;尤其是当需要保留格式和颜色信息时。幸运的是&#xff0c;Python 社区提供了多个强大的库来帮助我们完成这项任务&#xff0c;其中最…

Springboot注册过滤器的三种方式(Order 排序)

一、使用 Component Order&#xff08;简单但不够灵活&#xff09; 适用于全局过滤器&#xff0c;无需手动注册&#xff0c;Spring Boot 会自动扫描并注册。 Component Order(1) // 数字越小&#xff0c;优先级越高 public class AuthFilter implements Filter {Autowired /…

电脑硬件详解

前几天我的风扇转的很快&#xff0c;而且cpu占用率很高&#xff0c;然后我在想怎么回事&#xff0c;然后就浅浅研究了一下电脑的硬件。 笔记本主板&#xff1a; 台式机主板&#xff1a; 图1&#xff1a; 图2&#xff1a; 电脑硬件详解 电脑的硬件是组成计算机系统的物理设…