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

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

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

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

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

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

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

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

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

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

接下来就可以将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引脚,让剩下的几个轮子也转起来吧!

你可能感兴趣的:(开发工具软件,ESP32,物联网,单片机,嵌入式硬件)