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

news/2024/10/18 14:16:56/

【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.ppmy.cn/news/1185617.html

相关文章

MyBatis-Plus 与 Druid 结合 Dynamic-datasource 实现多数据源操作数据库

MyBatis-Plus 官网&#xff1a;https://baomidou.com/ MyBatis-Plus 官方文档&#xff1a;https://baomidou.com/pages/24112f/ dynamic-datasource 文档&#xff08;付费&#xff09;&#xff1a;https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611 创建数据库…

2023年中国牙钻机优点、产量及市场规模分析[图]

牙钻机&#xff0c;又称为牙科钻机或牙科设备&#xff0c;是一种专用于牙科诊所和牙科医院的医疗设备。它被用来进行牙齿修复、治疗和牙科手术等操作。牙钻机通常由电动马达驱动&#xff0c;带有不同类型的钻头、磨头和其他附件&#xff0c;用于在牙齿上进行各种不同的操作&…

基于SpringBoot的工厂车间管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 人员管理 看板信息管理 设备信息管理 生产开立管理 人员功能实现 生产开立管理 生产工序管理 生产流程管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 社会发展日新月异&#xff0c;用计…

剑指offer --- 二维数组中的元素查找

目录 一、读懂题目 二、思路分析 三、代码呈现 总结 一、读懂题目 题目&#xff1a; 在一个二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的个二维数组和一个整数&#…

Golang Web3钱包开发指南

简介 以太坊&#xff08;Ethereum&#xff09;是目前最受欢迎的区块链平台之一&#xff0c;它提供了智能合约功能和去中心化应用&#xff08;DApps&#xff09;的开发能力。在以太坊生态系统中&#xff0c;Web3钱包扮演着关键角色&#xff0c;允许用户管理账户和密钥、发送交易…

如何将SAP数据集成到任意云平台

十年前就在使用SAP的客户询问我当时突然出现的新事物&#xff1a;大数据。五年前&#xff0c;变成了数据湖和机器学习。现在一切都是关于数据集成&#xff0c;当然还有人工智能。有时处理数据的基本方法已经改变或者发展。有时只是名字的改变。例如&#xff0c;在过去十年中&am…

【Python机器学习】零基础掌握AdditiveChi2Sampler内核近似特征

如何在海量数据中快速且准确地进行分类? 考虑到现今互联网用户生成的大量图像数据,以图像识别为例。想象一个电子商务平台,需要根据商品图片自动对商品进行分类。由于数据量巨大,传统的方法可能会运算缓慢。这时,如何有效地提高分类速度和准确度成了一个关键问题。 解决…

TensorFlow学习笔记(未完待续)

文章目录 tf.Graph().as_default()sessiontensorflow.placeholder()tf.summary tf.Graph().as_default() with tf.Graph().as_default():with tf.device(/gpu:str(GPU_INDEX)):TensorFlow中所有计算都会被转化为计算图上的节点。是一个通过计算图的形式来表述计算的编程系统&a…