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

news2024/9/26 5:22:49

摘要:本文主要讲解如何使用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引脚,让剩下的几个轮子也转起来吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java内存区域与内存溢出异常

Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 2.1 概述 对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的“皇帝”,又是从事最基础工作的劳动人民——即拥有每一个对象的“所有权”,又…

ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the gazebo tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了: Toggle navigation SpecificationAPIDocumentationDownload Back Edit Version: 1.6 Table of C…

DRF之初识

目录 一、序列化和反序列化 【1】序列化 【2】反序列化 【3】小结 二、DRF的安装和快速使用 (1) 安装DRF: (2) 配置DRF: (3) 创建序列化器(Serializer): (4) 创建视图(View): (5) 配置URL路由: 【补充】下载…

使用Open3D实现3D激光雷达可视化:以自动驾驶的2DKITTI深度框架为例(下篇)

原创 | 文 BFT机器人 【原文链接】使用Open3D实现3D激光雷达可视化:以自动驾驶的2DKITTI深度框架为例(上篇) 05 Open3D可视化工具 多功能且高效的3D数据处理:Open3D是一个全面的开源库,为3D数据处理提供强大的解决方…

【LeetCode】链表精选12题

目录 快慢指针: 1. 相交链表(简单) 2. 环形链表(简单) 3. 快乐数(简单) 4. 环形链表 II(中等) 5. 删除链表的倒数第 N 个节点(中等) 递归迭…

WPF中数据绑定转换器Converter

使用场景:ViewModel中的数据如果跟View中的数据类型不匹配。 下面是以int类型调控是否可见为例子 步骤一:创建转换器类 在xaml中查看Converter的定义可以知道Converter是一个接口类型,因此转换器的类定义需要使用这个接口 internal class Vi…

【UML】第13篇 序列图(2/2)——建模的方法

目录 三、序列图建模 3.1 概述 3.2 建模的步骤 3.3 举例说明步骤 1.确定主要场景和流程 2.确定参与的对象 3.绘制序列图 4.注意事项 3.4 特殊的情况 序列图是我个人认为,UML中最重要的图之一。 而且序列图,对于业务建模,也有非常好…

echarts 柱状图

注意点 1.y轴显示的序号和名称需要在数据中拼接,而不是在y轴data中拼接, 数据过多会导致下拉的时候,触发y轴formatter,更新序号,序号会重新排列,不准确。 2.需用到堆叠效果,三个柱子。如果想…

PyTorch官网demo解读——第一个神经网络(3)

上一篇:PyTorch官网demo解读——第一个神经网络(2)-CSDN博客 上一篇文章我们讲解了第一个神经网络的模型,这一篇我们来聊聊梯度下降。 大佬说梯度下降是深度学习的灵魂;梯度是损失函数(代价函数&#xff…

百度百科词条编辑需要提供参考资料,那么如何找参考资料呢。

百度百科相信大家都不陌生,在查询一个概念、新事物,或者我们想要了解的企业和人物时,我们一般都会求助百度百科,因为百度百科上面的信息相较于其他平台更值得我们相信。从词条所属主体来说,百度百科平台也是向其他用户…

20231224解决outcommit_id.xml1 parser error Document is empty的问题

20231224解决outcommit_id.xml1 parser error Document is empty的问题 2023/12/24 18:13 在开发RK3399的Android10的时候,出现:rootrootrootroot-X99-Turbo:~/3TB/Rockchip_Android10.0_SDK_Release$ make installclean PLATFORM_VERSION_CODENAMEREL…

Ubuntu18.04安装GTSAM库(亲测可用)

在SLAM(Simultaneous Localization and Mapping)和SFM(Structure from Motion)这些复杂的估计问题中,因子图算法以其高效和灵活性而脱颖而出,成为图模型领域的核心技术。GTSAM(Georgia Tech Smo…

不用再找了,这就是 NLP 方向最全面试题库

大家好,本篇文章总结了自然语言处理(NLP)面试需要准备的学习笔记与资料,该资料目前包含自然语言处理各领域的面试题积累。 热门面试题(校招、社招)、公司级专项真题、大厂常考题等,在我们社群具有总结,喜欢…

DevC++ easyx实现视口编辑,在超过屏幕大小的地图上画点,与解决刮刮乐bug效果中理解C语言指针的意义

继上篇文案, DevC easyx实现地图拖动,超过屏幕大小的巨大地图的局部显示在屏幕的方法——用悬浮窗的原理来的实现一个视口-CSDN博客 实现了大地图拖动,但是当时野心不止,就想着一气能搓啥就继续搓啥,看着地图移动都搓…

转录组无参比对教程

写在前面 2023年将结束,小杜的生信笔记分享个人学习笔记也有2年的时间。在这2年的时间中,分享算是成为工作、学习和生活中的一部分。自己为了运行和维护社群也算花费大量的时间和精力,自己认为还算满意吧。对于个人来说,自己一直…

Docker介绍、常用命令与操作

Docker介绍、常用命令与操作 学习前言为什么要学习DockerDocker里的必要基础概念常用命令与操作1、基础操作a、查看docker相关信息b、启动或者关闭docker 2、容器操作a、启动一个镜像i、后台运行ii、前台运行 b、容器运行情况查看c、日志查看d、容器删除 3、镜像操作a、镜像拉取…

使用 Docker 部署企业培训系统 PlayEdu

1)PlayEdu 介绍 官网:https://www.playedu.xyz/ GitHub:https://github.com/PlayEdu/PlayEdu PlayEdu 是一款适用于搭建内部培训平台的开源系统,旨在为企业/机构打造自己品牌的内部培训平台。PlayEdu 基于 Java MySQL 开发&…

C语言--直接插入排序【排序算法|图文详解】

一.直接插入排序介绍🍗 直接插入排序又叫简单插入排序,是一种简单直观的排序算法,它通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法描述: 假设要排序…

Golang实现JAVA虚拟机-运行时数据区

一、运行时数据区概述 JVM学习: JVM-运行时数据区 运行时数据区可以分为两类:一类是多线程共享的,另一类则是线程私有的。 多线程共享的运行时数据区需要在Java虚拟机启动时创建好,在Java虚拟机退出时销毁。对象实例存储在堆区类信…

2023.12.22 关于 Redis 数据类型 String 常用命令

目录 引言 String 类型基本概念 SET & GET SET 命令 GET 命令 MSET & MGET MSET 命令 MGET 命令 SETNX & SETEX & PSETEX SETNX 命令 SETEX 命令 PSETEX 命令 计数命令 INCR 命令 INCRBY 命令 DECR 命令 DECRBY 命令 INCRBYFLOAT 命令 总结…