【PC电脑windows-学习样例generic_gpio-ESP32的GPIO程序-基础样例学习】

【PC电脑windows-学习样例generic_gpio-ESP32的GPIO程序-基础样例学习】

  • 1、概述
  • 2、实验环境
  • 3、 物品说明
  • 4、自我总结
  • 5、本次实验说明
  • 6、实验过程
      • (1)复制目录到桌面
      • (2)手动敲写
      • (3)反复改错
      • (4)串口验证
      • (5)逻辑分析仪验证
  • 7-1、代码解读
  • 7-2、代码连接
  • 8、相关细节
      • (1)编译环境配置
      • (2)逻辑错误
      • (3)样例代码目录
      • (4)IO定义
      • (5)打印连续输出
      • (6)报错:包含文件
      • (7)输入IO 4 和 5 有点差异
  • 9、总结

1、概述

最为新手,想要快速入门相关设备,比如ESP32,可能最好的方式就是直接手动去敲一遍代码,而控制IO上下拉和输入捕获,算是基础了,官方已有相关样例代码,今天我们就是学习这个样例。

2、实验环境

硬件信息:开发板 ESP32-S3-DevKitM-1(EPS32-S3-wroom-1模块)
在这里插入图片描述

其它硬件:杜邦线,两个usb-type-c连接线。

3、 物品说明

ESP32对自己来说还是比较新的,最近也是刚刚接触,这里对自己使用ESP32进行简单说明。
博文链接:【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】
在这里插入图片描述

另外如果对ESP32相关型号比较感兴趣,可以去官网查看,或者找些资。
官网文档:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitm-1.html
在这里插入图片描述

4、自我总结

(1)练习代码是你更快入门
练习代码比实际看代码要快些,这属于个人见解了,练习敲写代码过程汇总,就是帮助你熟悉相关代码结构,当你从一个固有套路结构代码中,切换到另一套方式时,可能直接手敲,更能让你理解。

(2)IO相关测试,手动更改
自己练习的代码,手动敲完,可能会报错,可能会有逻辑错误,在改的过程中,其实也是熟悉。

5、本次实验说明

本次实验是使用样例generic_gpio,直接复制一份在桌面,然后手动敲写一遍。

这个样例,是使用ESP32的GPIO 18,GPIO 19 , GPIO 4 GPIO 5.
其中 GPIO18,和GPIO19是输出, GPIO 4和GPIO 5是输入.如下,代码中也说明了,但是开始的时候,自己作为新手,可不敢说自己就和知道了,试过之后才能准确确定的。

在这里插入图片描述

6、实验过程

(1)复制目录到桌面

在这里插入图片描述

(2)手动敲写

我们只是删除如下文件内容,
在这里插入图片描述
然后自己手都敲写一遍。
在这里插入图片描述

(3)反复改错

可以看到,首次编译还是有很多错误的,拼写错误,都还好,逻辑错误有点难找。
在这里插入图片描述
就是根据原版,反复对照,可以看到原版有很多注释的,我们可以不用打。
在这里插入图片描述

(4)串口验证

在这里插入图片描述
下载成功后验证

在这里插入图片描述

(5)逻辑分析仪验证

在这里插入图片描述

7-1、代码解读

一般来说你要是自己敲写一遍,基本就明白了。按照自己理解写了一点解读,样例已有,只不过是英文的。

/* GPIO ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES ORCONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <inttypes.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"/*** Brief:* This test code shows how to configure gpio and how to use gpio interrupt.** GPIO status:* GPIO18: output (ESP32C2/ESP32H2 uses GPIO8 as the second output pin)* GPIO19: output (ESP32C2/ESP32H2 uses GPIO9 as the second output pin)* GPIO4:  input, pulled up, interrupt from rising edge and falling edge* GPIO5:  input, pulled up, interrupt from rising edge.** Note. These are the default GPIO pins to be used in the example. You can* change IO pins in menuconfig.** Test:* Connect GPIO18(8) with GPIO4* Connect GPIO19(9) with GPIO5* Generate pulses on GPIO18(8)/19(9), that triggers interrupt on GPIO4/5**/#define GPIO_OUTPUT_IO_0 CONFIG_GPIO_OUTPUT_0
#define GPIO_OUTPUT_IO_1 CONFIG_GPIO_OUTPUT_1
#define GPIO_OUTPUT_PIN_SEL ((1ULL<<GPIO_OUTPUT_IO_0)|(1ULL<<GPIO_OUTPUT_IO_1))#define GPIO_INPUT_IO_0 CONFIG_GPIO_INPUT_0
#define GPIO_INPUT_IO_1 CONFIG_GPIO_INPUT_1
#define GPIO_INPUT_PIN_SEL ((1ULL<<GPIO_INPUT_IO_0) | (1ULL<<GPIO_INPUT_IO_1))#define ESP_INTR_FLAG_DEFAULT 0
static QueueHandle_t gpio_evt_queue=NULL;static void IRAM_ATTR gpio_isr_handler(void* arg){uint32_t gpio_num=(uint32_t) arg;xQueueSendFromISR(gpio_evt_queue,&gpio_num,NULL);
}static void gpio_task_example(void* arg)
{uint32_t io_num;for(;;){if(xQueueReceive(gpio_evt_queue,&io_num,portMAX_DELAY)){printf("my_DATA_GPIO[%"PRIu32"] intr,val:%d\n",io_num,gpio_get_level(io_num));}}
}void app_main(void)
{//IO初始化配置 gpio_config_t io_conf={};io_conf.intr_type=GPIO_INTR_DISABLE;io_conf.mode=GPIO_MODE_OUTPUT;io_conf.pin_bit_mask=GPIO_OUTPUT_PIN_SEL;io_conf.pull_down_en=0;io_conf.pull_up_en=0;gpio_config(&io_conf);io_conf.intr_type=GPIO_INTR_POSEDGE;io_conf.pin_bit_mask=GPIO_INPUT_PIN_SEL;io_conf.mode=GPIO_MODE_INPUT;io_conf.pull_up_en=1;gpio_config(&io_conf);//初始化gpio_set_intr_type(GPIO_INPUT_IO_0,GPIO_INTR_ANYEDGE);gpio_evt_queue=xQueueCreate(10,sizeof(uint32_t));//开一个任务xTaskCreate(gpio_task_example,"gpio_task_example",2048,NULL,10,NULL);//输出中断gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);gpio_isr_handler_add(GPIO_INPUT_IO_0,gpio_isr_handler,(void * )GPIO_INPUT_IO_0);//gpio_isr_handler_remove(GPIO_INPUT_IO_0);gpio_isr_handler_add(GPIO_INPUT_IO_1,gpio_isr_handler,(void * )GPIO_INPUT_IO_1);gpio_isr_handler_remove(GPIO_INPUT_IO_0);gpio_isr_handler_add(GPIO_INPUT_IO_0,gpio_isr_handler,(void * )GPIO_INPUT_IO_0);printf("Minmu free heap_size:%"PRIu32" bytes\n",esp_get_minimum_free_heap_size());int cnt=0;while (1){printf("<<<my_learing_GPIO_cnt:%d>>>\n",cnt++);vTaskDelay(1000/portTICK_PERIOD_MS);gpio_set_level(GPIO_OUTPUT_IO_0,cnt%2);gpio_set_level(GPIO_OUTPUT_IO_1,cnt%2);}}

7-2、代码连接

代码链接:https://download.csdn.net/download/qq_22146161/88483114

8、相关细节

(1)编译环境配置

相关配置情况自己的其他文章:【ESP32-PC电脑windows-环境搭建-记录-hello-world-运行基础样例学习】

(2)逻辑错误

一般来说逻辑错误比较难以发现。
在这里插入图片描述

(3)样例代码目录

如果是默认安装,找如下目录

C:\Espressif\frameworks\esp-idf-v5.0.2\examples\peripherals\gpio

在这里插入图片描述

(4)IO定义

自己打代码的时候,比较疑惑,没有看到GPIO18相关的信息,怎么就是GPIO19,GPIO4,等等,后来看到配置文件。
在这里插入图片描述

(5)打印连续输出

如下图,可以开电脑有一串1,那是因为手抖了,没有去除抖动。
在这里插入图片描述

(6)报错:包含文件

开始的时候是在Linux环境
在这里插入图片描述
在windows环境后,知道了原因
在这里插入图片描述

(7)输入IO 4 和 5 有点差异

实验过程中,发现4是可以检验高低的,但是5只能检测高。一直以为自己敲代码敲错了,后来,拿样例对比才知道,5就只检测高。

如下,如果不是抖动的话,5一直检测高
在这里插入图片描述
如下,如果不是抖动的话,GPIO4高低都检测
在这里插入图片描述

9、总结

一步一步

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

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

相关文章

时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Python实现ARIM…

SOLIDWORKS PDM 2024数据管理5大新功能

1. 改进的视觉内容 • 通过装配体可视化功能&#xff0c;在 SOLIDWORKS 中以图形方式查看零部件数据&#xff0c;如工作流程状态。• 使用特定图标迅速识别焊件切割清单零部件。 优点&#xff1a;重要数据和系统信息一目了然。 2.增强的数据保护和跟踪功能 •保护“包含”和…

代码随想录算法训练营第4天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II

JAVA语言编写 24. 两两交换链表中的节点 谷歌、亚马逊、字节、奥多比、百度 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。…

Openssl数据安全传输平台010:jasoncpp 1.9.5编译及常用API- Windows/Centos8-含测试代码

文章目录 0. 代码仓库1 安装注意版本问题1.1 windows 下的安装1.1.1 使用cmake生成sln工程1.1.2 使用sln工程生成静态库 -Debug 1.2 Linux 下的安装1.2.1 安装jsoncpp1.2.2 旧版本0.10.x版本相关环境配置问题 2 Winsows环境下编译 c 测试文件&#xff1a; json-test.cpp2.1 配置…

nginx请求时找路径问题

nginx请求时找路径问题 你是否遇到过这样的情况&#xff1a; 当你安装了nginx的时候&#xff0c;为nginx配置了如下的location&#xff0c;想要去访问路径下面的内容&#xff0c;可是总是出现404&#xff0c;找不到文件&#xff0c;这是什么原因呢&#xff0c;今天我们就来解…

服务器数据恢复—nas硬盘故障导致raid6失效、存储无法访问的数据恢复案例

服务器故障&分析&#xff1a; 一台nas存储中有一组由十几块硬盘组建的raid6磁盘阵列。 nas存储中的raid6阵列成员盘出现故障离线&#xff0c;磁盘阵列崩溃&#xff0c;nas存储无法正常访问。 北亚企安数据恢复工程师将nas存储内的所有硬盘编号后取出&#xff0c;经过硬件工…

MGRE环境下的OSPF

实验拓扑 需求 1 R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2 R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c;R1为中心站点 3 所有私有网段可以互相通讯&#xff0c;私有网段使用OSPF完成。 IP规划 配置IP R1 # interface GigabitEt…

Kitex踩坑 [Error] KITEX: processing request error,i/o timeout

报错问题 2023/010/28 17:20:10.250768 default_server_handler.go:234: [Error] KITEX: processing request error, remoteService, remoteAddr127.0.0.1:65425, errordefault codec read failed: read tcp 127.0.0.1:8888->127.0.0.1:65425: i/o timeout 分析原因 Hert…

Ps:对象选择工具

对象选择工具 Object Selection Tool是 Photoshop 2020 版以后新增的选区工具&#xff0c;可用于自动选择图像中的对象或区域&#xff0c;如人物、汽车、宠物、天空、水、建筑物和山脉等。 快捷键&#xff1a;W 让对象选择工具自动检测并选择图像内的对象或区域&#xff0c;或者…

3.7 移动端TB(D)R架构基础

一、各类电子设备功耗对比 桌面级主流性能平台&#xff0c;功耗一般为300W&#xff08;R7/I7X60级别显卡&#xff09;&#xff0c;游戏主机150-200W入门和旗舰游戏本平台功耗为100W主流笔记本为50-60W&#xff0c;超极本为15-25W&#xff0c;旗舰平板为8-15W旗舰手机为5-8W&am…

【Linux】部署单体项目以及前后端分离项目(项目部署)

一、简介 以下就是Linux部署单机项目和前后端分离项目的优缺点&#xff0c;希望对你有所帮助。 1、Linux部署单机项目&#xff1a; 优点&#xff1a; 1.简化了系统管理&#xff1a;由于所有服务都在同一台机器上运行&#xff0c;因此可以简化系统管理和维护。 2.提高了性能&a…

Linux mv命令:移动文件或改名

mv 命令&#xff08;move 的缩写&#xff09;&#xff0c;既可以在不同的目录之间移动文件或目录&#xff0c;也可以对文件和目录进行重命名。该命令的基本格式如下&#xff1a; [rootlocalhost ~]# mv 【选项】 源文件 目标文件 -f&#xff1a;强制覆盖&#xff0c;如果目标文…

在Spring boot中 使用JWT和过滤器实现登录认证

在Spring boot中 使用JWT和过滤器实现登录认证 一、登录获得JWT 在navicat中运行如下sql,准备一张user表 -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS t_user; CREATE TABLE t_user (id int(11) …

matlab simulink 直线一级倒立摆控制(自起摆和稳态控制)

1、内容简介 略 6-可以交流、咨询、答疑 2、内容说明 控制器设计 自起摆建模 规定正方向&#xff1a;顺时针为角度&#xff08;力矩&#xff09;正方向&#xff0c;向右为位移正方向。 在规定的正方向条件下&#xff0c;图 1 所示摆杆的角度φ为正值&#xff0c; 下车向右加…

NetSuite数据备份办法

本周有同学问有啥办法可以实现NetSuite的数据备份&#xff1f;这是个常见问题&#xff0c;今天总结一下。 我们认为可以选择的技术路线有下面几个&#xff1a; 从技术可行性、数据可利用角度&#xff0c;毫无疑问我们将推荐第三种办法。所以&#xff0c;今朝就介绍一下。 Ana…

[2021]不确定成本下的处理分配

英文题目&#xff1a;Treatment Allocation under Uncertain Costs 中文题目&#xff1a;不确定成本下的处理分配 单位&#xff1a;swager、uber 时间&#xff1a;2021 论文链接&#xff1a;https://arxiv.org/pdf/2103.11066.pdf 代码&#xff1a; 摘要&#xff1a; 我…

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

1 bug描述 使用vscode执行npm run dev指令时出现 “npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次 “ 的错误提示&#xff0c;原因是系统里没有安装n…

独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 网络结构实验结果…

数据结构时间复杂度(补充)和空间复杂度

Hello&#xff0c;今天事10月27日&#xff0c;距离刚开始写博客已经过去挺久了&#xff0c;我也不知道是什么让我坚持这么久&#xff0c;但是学校的课真的很多&#xff0c;很少有时间多出来再学习&#xff0c;有些科目马上要考试了&#xff0c;我还不知道我呢不能过哈哈哈&…

DAMNets

方法 体会 实验充分&#xff0c;不愧是ICLR&#xff0c;但作者未提供代码