摘要:本文更深入的讲述了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端口之前,必须要对端口进行必要的配置。需要配置的参数包括一下几个:
- GPIO的工作模式
- 设置是否需要上拉
- 设置是否需要下拉
- 设置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的工作原理和工作模式之后,还要再次的强调那些特殊的引脚,一定要确保安全再用,尽量不要使用:
- Strapping管脚:GPIO0、GPIO2、GPIO5、GPIO12(MTDI)和GPIO15 (MTDO)是Strapping管脚。
- SPI0/1:GPIO6-11和GPIO16-17通常连接到模组内集成的SPI flash和PSRAM,因此不能用于其他用途。
- JTAG:GPIO12-15通常用于在线调试。
- GPI:GPIO34-39只能设置为输入模式,不具备软件使能的上拉或下拉功能。
- 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 |
后边的开发都是依据这个表的配置来进行的。配置不一致的请在开发中做适当的调整。