一起玩儿物联网人工智能小车(ESP32)——13. 用ESP32的GPIO控制智能小车运动起来(一)

摘要:本文更深入的讲述了GPIO的相关知识,并完成了导线连接工作,为下一步的软件开发做好了准备。

通用输入输出端口(GPIO:General Purpose Input/Output Port),在前面已经有了初步的介绍,本篇将进行更详细的阐述,希望大家能够了解GPIO端口是如何工作的。

通用输入输出端口的基本功能是:当GPIO工作在输入状态时,可以读取外部设备电平信号的高低,从而获得外部设备的工作状态,当GPIO工作在输出状态时,可以对外输出高低电平,从而实现对外部设备的控制。GPIO接口作为一种被广泛应用于嵌入式系统的接口技术。通常有以下一些特点。

1.可配置性:GPIO可以配置为输入或输出模式,以适应不同的应用需求。

2.可编程性:GPIO可以通过特定的编程语言(如C语言、Python等)进行编程,实现对外部设备的控制和数据处理。

3.高可靠性:GPIO具有较低的故障率和较高的抗干扰能力,适用于各种恶劣环境下的应用。

4.易于扩展:GPIO可以根据需要扩展更多的输入输出通道,满足不同规模的系统需求。

总的来说,GPIO具有通用性、数字信号、多功能、可编程性等特点,在嵌入式系统中发挥着重要作用。

对于嵌入式系统来说,每个芯片引脚都非常的珍贵,因此大部分的引脚都采用了端口复用技术,也就是除了上面所列举的基本的GPIO功能外,还可以用作其他功能,这在前面的引脚功能图中已经看到过了。ESP32的多路复用器,使设计人员可以灵活地更改芯片内部的GPIO引脚连接并将其路由到任何信号,这样在硬件设计、布线上会方便的多。

ESP32为每个GPIO端口提供了多种工作模式,所以在使用GPIO端口之前,必须要对端口进行必要的配置。需要配置的参数包括一下几个:

  1. GPIO的工作模式
  2. 设置是否需要上拉
  3. 设置是否需要下拉
  4. 设置GPIO中断的类型

在这里我们重点的关注一下GPIO的工作模式,其他几个参数暂时不做讲解,后边遇到的时候再详细的说明。GPIO的工作模式包括以下几个:

  • GPIO_MODE_INPUT:输入模式
  • GPIO_MODE_OUTPUT:输出模式
  • GPIO_MODE_OUTPUT_OD:开漏输出模式(如果外部或者内部不上拉电阻则无法输出高电平)
  • GPIO_MODE_INPUT_OUTPUT_OD:开漏输入输出模式
  • GPIO_MODE_INPUT_OUTPUT:输入输出模式

我们用得最多的是输入模式和输出模式,这两种模式是对标准的数字信号进行读取和输出,输入用来获取外部设备的状态信号,输出则将自己的引脚设置成指定状态,是用来“通知”外部设备。输入模式可以用来检测按键是否按下,而输出模式则可以控制LED是否点亮,我们今天控制电动机是否旋转,以及旋转的方向,就是使用了GPIO最基本的输出模式。

在了解了GPIO的工作原理和工作模式之后,还要再次的强调那些特殊的引脚,一定要确保安全再用,尽量不要使用:

  1. Strapping管脚:GPIO0、GPIO2、GPIO5、GPIO12(MTDI)和GPIO15 (MTDO)是Strapping管脚。
  2. SPI0/1:GPIO6-11和GPIO16-17通常连接到模组内集成的SPI flash和PSRAM,因此不能用于其他用途。
  3. JTAG:GPIO12-15通常用于在线调试。
  4. GPI:GPIO34-39只能设置为输入模式,不具备软件使能的上拉或下拉功能。
  5. TXD & RXD:GPIO1和GPIO3通常用于烧录和调试。

接下来我们继续完成之前未完成的接线工作,然后再利用程序来控制小车的电动机运动起来。

我们首先要接的线就是从L298N模块引出的GND线,将其插入到ESP32扩展板上的GND排针上。因为在调试阶段,我们的L298N模块和电机使用的是锂电池供电,而ESP32开发板则直接使用USB供电,只有将这两种供电的地连接起来,我们ESP32的GPIO口输出的信号才有回路,才能够起到控制的作用。所以,这根导线千万不要忘记接,否则你的电动机是不会运动起来的。

然后,将IN1~IN8依次插入到ESP32模组可用GPIO对应的排针上。接好后的样子如下图所示。

我具体的连接方法如下表所示:

轮子

L298N(OUT)

L298N端口(IN)

ESP32引脚

左前轮

OUT3

IN3

P26

OUT4

IN4

P27

左后轮

OUT1

IN1

P32

OUT2

IN2

P33

右前轮

OUT5

IN5

P25

OUT6

IN6

P23

右后轮

OUT7

IN7

P22

OUT8

IN8

P21

后边的开发都是依据这个表的配置来进行的。配置不一致的请在开发中做适当的调整。

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

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

相关文章

韩国Neowine车规认证加密芯片ALPU-CV

由工采网代理的ALPU-CV是韩国Neowine(纽文微)推出的一款高性能车规级加密芯片;也是ALPU系列中的高端IC,该芯片通过《AEC-Q100》认证,目前已经在国产前装车辆配件量产使用,主要用于版权license保护、设备防伪…

2014年第三届数学建模国际赛小美赛B题全地形伪装解题全过程文档及程序

2014年第三届数学建模国际赛小美赛 B题 全地形伪装 原题再现: 破坏性着色在军事用途中很常见,用于军用车辆、士兵制服和装备。视觉是人类的主要方向感,伪装的主要功能是欺骗人眼。军事服装中存在大量的伪装图案,以适应作战服装与…

运动目标检测方法的概述

目录 ① 光流法 ② 帧差法 ③ 背景差分法 ④ 混合高斯模型法 ⑤ 总结 运动目标检测技术的应用十分的广泛,尤其是在智能视频监控领域。运动目标检测为后续的图像处理等操作提供了基础,在某种程度上,决定了整个系统的性能。运动目标检测&a…

三列布局 css

实现如下图的三列布局: .box {width:1400px;margin:0 auto;padding-bottom:40px;> .left {float:left;width:180px;margin-top:100px;text-align:center;}> .center {float:left;margin-top:100px;margin-left:130px;item-box {float:left;text-align:left;…

自动化网络故障修复管理

什么是故障管理 故障管理是网络管理的组成部分,涉及检测、隔离和解决问题。如果实施得当,网络故障管理可以使连接、应用程序和服务保持在最佳水平,提供容错能力并最大限度地减少停机时间。专门为此目的设计的平台或工具称为故障管理系统。 …

鸿蒙系列--组件介绍之其他基础组件(上)

上回介绍了基础组件中最常用的组件常用的基础组件,接下来还有其他基础组件 一、Blank 描述:空白填充组件 功能:在容器主轴方向上,具有自动填充容器空余部分的能力。只有当父组件为Row/Column时生效 子组件:无 Blan…

nodejs微信小程序+python+PHP的物流快递管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

win11 如何在自己的电脑上配置本地服务器,让你可以通过http的方式访问文件和图片

首先,打开控制面板,找到"程序和功能"点击打开。 找到“Internet Information Services”(Internet信息服务),将它的子项及子项的子项全部勾选,点击确定。 回到控制面板,将查看方式改为“大图标”或者“小图…

从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry() 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警,当时…

【Unity地形】使用地形工具创建场景环境-Terrain

如上图Unity的地形工具可以让我们实现创建复杂、丰富的3D室外环境。 我们创建地形很简单,在层级面板中右键-3Dobject-Terrain 就可以创建一个默认的地形模型!这个模型是Unity内置的。 接下来的地形编辑功能全部集中在这个地形的组件上 主要功能如下&…

SpringBoot 项目中常用的注解

每一层对应每个包,包名中应全为小写。 一、Common 层(实体类) 前提:导入 Lombok 依赖 Data:生成 get 和 set 方法以及 toString 方法 Getter:只生成 get 方法,避免对类中的成员变量修改。 …

AVL树(超详解)

文章目录 前言AVL树的概念AVL树的实现定义AVL树insert 单旋左单旋右单旋左单旋代码右单旋代码 双旋左右双旋右左双旋 测试AVL树的性能 前言 AVL树是怎么来的呢? 我们知道搜索二叉树会存在退化问题,退化以后就变成单支或者接近单支。 它的效率就变成O(N)…

Matplotlib找不到Times New Roman的解决方案

问题背景 在使用seaborn或者matplotlib进行论文画图的时候,一般都会用Times New Roman这个字体,但是在Linux系统里,经常会遇到以下的问题: findfont: Font family [Times New Roman] not found. Falling back to DejaVu Sans. 也就是说找不…

零代码也能玩出花:Mugeda在H5设计中的魔法力量

文章目录 一、Mugeda零代码可视化H5设计工具简介二、Mugeda零代码可视化H5设计实战案例1. 注册并登录Mugeda账号2. 选择模板3. 编辑页面内容4. 添加动画效果5. 预览和发布 三、Mugeda零代码可视化H5设计的优势《Mugeda零代码可视化H5设计实战》内容简介作者简介目录前言/序言 随…

【人工智能Ⅰ】实验9:BP神经网络

实验9 BP神经网络 一、实验目的 1:掌握BP神经网络的原理。 2:了解BP神经网络的结构,以及前向传播和反向传播的过程。 3:学会利用BP神经网络建立训练模型,并对模型进行评估。即学习如何调用Sklearn中的BP神经网络。…

基于openGauss5.0.0全密态数据库等值查询小案例

基于openGauss5.0.0全密态数据库等值查询小案例 一、全密态数据库简介二、环境说明三、测试步骤四、使用约束 一、全密态数据库简介 价值体现: 密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传…

【经验分享】日常开发中的故障排查经验分享(一)

目录 简介CPU飙高问题1、使用JVM命令排查CPU飙升100%问题2、使用Arthas的方式定位CPU飙升问题3、Java项目导致CPU飙升的原因有哪些?如何解决? OOM问题(内存溢出)1、如何定位OOM问题?2、OOM问题产生原因 死锁问题的定位…

利用html2Canvas将表格下载为html

给到我的需求是点击按钮时请求后端接口,根据后端返回的数据,生成表格,并将表格的内容直接下载为html,如下图。 平常做的下载都是后端返回二进制流,这次前端做下载那就必须把页面先画出来,因为下载下来的表格在页面上是不显示的&a…

[RoarCTF2019] TankGame

不多说,用dnspy反编译data文件夹中的Assembly-CSharp文件 使用分析器分析一下可疑的FlagText 发现其在WinGame中被调用,跟进WinGame函数 public static void WinGame(){if (!MapManager.winGame && (MapManager.nDestroyNum 4 || MapManager.n…

1.DQL查询数据(超重点)以及distinct(去重)

DQL(Data Query Language:数据查询语言) 1.所有查询操作都用 SELECT 2.无论是简单的查询还是复杂的查询它都能做 3.数据库中最核心的语言,最重要的语句 4.使用频率最高的语句 语法: SELECT 字段1,字段2,……FROM 表 有时候…