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

摘要:本文主要讲解如何使用Mixly实现对单一车轮的运动控制。

下面就该用程序控制我们的小车轮子转起来了。打开Mixly软件,然后单击顶部"文件"菜单中的"新建"功能,我们来开启一个新程序的开发工作。

我们的工作同样是先从最简单的开始,初期只控制一个轮子,实现轮子的正转3秒钟、停止3秒钟、反转3秒钟、停止3秒钟,然后再正转......,依次循环。

在进行具体开发之前,再回忆一下使用GPIO的步骤有哪些吧(以后会看到大部分的硬件功能都是这个模式)。

首先是设置工作模式和参数,对设备进行初始化工作。其次是控制GPIO端口输出高电平或者低电平。第一步设置GPIO工作模式的工作由Mixly自动完成了,我们不需要做什么事情。我们只需要将所使用的GPIO引脚初始化为低电平,却把初始状态,车轮子是不动的。

在Mixly软件的左侧功能模块区点击"控制"然后找到"初始化"功能,将其拖拽到右侧工作区的空白位置。这个"初始化"功能所生成的代码,在将来程序运行的时候,只执行依次,因此它的作用就是做一些一次性的准备工作。然后在"输入/输出"功能模块区,找到"数字输出"功能,将其拖拽到"初始化"内部,"数字输出"有两个参数,一个是使用那个GPIO引脚,一个是输出高电平还是低电平。在这里,我们设置一个电机的2个GPIO引脚为低电平。设置好后,如下图所示:

接下来该控制这两个GPIO引脚输出高低电平了。先拖拽到工作区空白一个"数字输出功能",设置相应的引脚输出为高电平。之后需要延迟3秒钟。"延时"功能,在"控制"功能区,默认延时的单位是毫秒,所以将延时时间值设置为3000,这样延时时间就设置好了。之后,是需要将电动机停下来,那么就把刚刚输出高电平的引脚恢复成低电平就可以了。之后又是延时,然后再同样的方法,控制另外一个引脚输出高低电平,整个完成的程序如下图所示:

接下来就可以将ESP32开发板连接到电脑上,下载程序进行测试了。你的智能小车的轮子转起来了没有?如果没有成功,可以从以下几个步骤查找一下问题出在了哪里:

  1. 程序编译和上传都没问题把?要确保这个过程没有出错。
  2. 先查一下程序,看看有没有不小心设置错误的地方。
  3. L298N模块的电源开了没有?红色LED电源指示灯亮了吗?
  4. L298N模块的GND与ESP32扩展版的GND连接到一起了吗?
  5. 检查一下接线是否牢固正确,对应的GPIO引脚正确吗?看看杜邦线有没有虚接,有没有插错位置?

接下来我们来看一下Mixly为我们生成了哪些代码吧?点开侧边栏,程序的代码如下所示:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| void setup(){ pinMode(32, OUTPUT); //将32引脚设置为输出模式 pinMode(33, OUTPUT); //将33引脚设置为输出模式 digitalWrite(32,LOW); //将32引脚设置输出低电平 digitalWrite(33,LOW); //将33引脚设置输出低电平 } void loop(){ digitalWrite(32,HIGH); //将32引脚设置输出高电平,车轮开始转动 delay(3000); //延时3秒钟 digitalWrite(32,LOW); //将32引脚设置输出低电平,车轮停止转动 delay(3000); //延时3秒钟 digitalWrite(33,HIGH); //将33引脚设置输出高电平,车轮开始反向转动 delay(3000); //延时3秒钟 digitalWrite(33,LOW); //将33引脚设置输出低电平,车轮停止转动 delay(3000); //延时3秒钟 } |

我们可以看到,整个代码包含了两个函数:setup()函数和loop()函数。从名字上就可以看出setup()函数是用来进行初始设置的,在机器启动的时候会自动的调用这个函数。loop()函数包含了ESP32芯片在运行期间所要进行的工作,这个函数会被循环多次调用。

在setup()函数中,调用了2个关于GPIO的函数,pinMode()函数用来设置GPIO端口的工作模式,这个函数由2个参数,第一个参数是GPIO引脚的索引,表明了要设置的是哪个引脚,第二个参数是要将前面指定的引脚设置成什么工作模式。关于GPIO的工作模式在前面已经讲解过了。digitalWrite()函数则用来指定某个引脚的输出电平为高还是低。这个函数也是两个参数,应该一看就明白了,在这里就不解释了。

在loop()函数中,就是改变GPIO输出的状态,然后延时。delay()就是延时函数,这个函数的参数就是延时时间,单位是毫秒。

这个程序应该很容易看懂。希望那些初学者可以跟着我,从看懂代码开始,逐步过渡到能够自己编写代码。嵌入式系统的代码相对于那些应用程序来说,无论从规模还是复杂程度上,都比应用程序要简单很多。Mixly虽然已经是一个功能完善的图形化开发工具了,但其功能还是很有限,只适用于初始的学习使用,后边还是要过渡到直接编写代码的开发工具中去。

好了,一个轮子的转动控制我们就学会了,大家有时间可以改变一下控制的GPIO引脚,让剩下的几个轮子也转起来吧!

相关推荐
WKJay_6 小时前
深入理解 Cortex-M3 特殊寄存器
stm32·单片机·嵌入式硬件
Linux嵌入式木子8 小时前
# 2-STM32F103-复位和时钟控制RCC
stm32·单片机·嵌入式硬件
小智学长 | 嵌入式9 小时前
单片机-STM32部分:13-1、编码器
单片机·嵌入式硬件
暗碳10 小时前
WF24 wifi/蓝牙模块串口与手机蓝牙通信
嵌入式硬件
程序猫A建仔10 小时前
【物联网】基于树莓派的物联网开发【4】——WIFI+SSH远程登录树莓派
运维·物联网·ssh
#金毛12 小时前
一、HAL库的设计理念详解:从架构到实践
stm32·嵌入式硬件·架构
alive90312 小时前
STM32移植LVGL8.3 (保姆级图文教程)
stm32·单片机·嵌入式硬件·stm32f407·lvgl8.3·lvgl移植
Camellia031114 小时前
嵌入式学习--江协51单片机day6
嵌入式硬件·学习·51单片机
外星猪猪14 小时前
嵌入式调试新宠!J-Scope:免费+实时数据可视化,让MCU调试效率飙升!
单片机·嵌入式硬件·信息可视化
霖0014 小时前
PCIe数据采集系统
数据结构·经验分享·单片机·嵌入式硬件·fpga开发·信号处理