描述
该项目展示了如何连接到 WiFi 网络、打开 Web 浏览器、连接到服务器并从一个简单的界面控制您的汽车。
UNO R3 + WIFI ESP8266 + CH340G Arduino和WIFI单板
该项目的核心是 Arduino ESP8266 WiFi 开发板。该板在单一平台上结合了 ATMega328 微控制器和 ESP8266 WiFi 芯片,两者之间具有串行通信。
有关如何配置和编程该板的详细说明,请参阅我之前的一篇帖子。
控制流程框图
下面是一个高级框图:
流程图
ESP8266 能够配置为软接入点并启动自己的无线网络。用户设备连接到该网络,然后可以使用 ESP8266 提供的网页通过 ESP8266 和 ATMega328 向汽车发送命令。
这篇文章的其余部分将详细介绍这些步骤。
第一——汽车
该项目使用两轮汽车。这些汽车的套件可从多个来源获得。这是高级物料清单:
两轮驱动套件,包括电机、底盘、各种螺丝和螺母、车轮和车轮编码器。
UNO R3 + WIFI ESP8266 + CH340G Arduino和WIFI单板
L298N电机驱动桥板
2 x HC-020K 编码器模块
4 x ICR16340 锂离子电池和电池座
切换开/关开关
无线天线
连接线
本文不包括如何制造汽车的描述;互联网上有很多资源可以解释所需的步骤。
成品车如下:
1号车
车2
整车电路图如下:
原理图
配置上只需要注意几点:
该车采用并联/串联配置的四节 ICR16340 700 mAh 锂离子电池。这些串联的两个电池在充满电时提供大约 8 V 的电压,这足以驱动电机和并联的 wifi/控制器电池可能会出现问题(您可以获得循环电流),作为替代方案,ICR16340 电池的容量为 2800 mAh版本——其中两个串联应该足以为汽车提供动力。
电机控制由 L298N 桥驱动器模块执行。同样,有大量资源可以解释它们的运行方式以及如何连接电机和控件。
该电路使用数字引脚 5 和 6 将 PWM 输出到 L298N 板以控制电机速度。它们连接到 L298N 板的 ENa 和 ENb。引脚 4、7、8 和 9 用于打开和关闭电机。
该电路包括两个 HC-020K 编码器模块。这些未在代码中专门使用,但可用于提供速度或距离反馈。
根据您的具体接线方式,可能需要调换电机引线以获得一致的方向。此外,HC-020K 编码器模块必须与软件中的正确电机配对(如果使用)。这可以通过交换中断 2 和 3 或调整软件来实现。
ESP8266 作为接入点和 Web 服务器
ESP8266 可配置为无线接入点和网络服务器。此外,它还可以设置为DNS 服务器。这允许客户端使用本地 URL 访问 Web 服务器。
在对 ESP8266 进行编程之前,您必须确保您使用的 Arduino IDE 已配置为执行此类编程。Internet 上有许多文章解释了如何执行此操作。搜索“来自 Arduino IDE 的程序 ESP8266”将提供许多结果。
基本步骤如下:
在 File → Preferences 中,将 url 添加到 Additional Boards Manager:http ://arduino.esp8266.com/stable/package_esp8266com_index.json
在 Tools → Boards → Boards Manager 下,搜索 ESP8266 并安装最新版本的“ESP8266 by ESP8266 Community”
完成此操作后,您应该在 Tools→Board 下为 ESP8266 Boards 提供一个选项。选择通用 ESP8266 模块。
用于设置 Wifi、Web 服务器和 DNS 的相关 Arduino 库是:
ESP8266WiFi.h
ESP8266WebServer.h
ESP8266mDNS.h
这些是作为设置 IDE 以对上述 ESP8266 进行编程的一部分安装的。
以下是将 ESP8266 配置为软接入点的相关代码片段。
#include const char *ssid = "ESP8266Network"; // The name of the Wi-Fi network that will be created const char *password = "1234567890"; // Password for WiFi network. Must be more than 8 characters void setup() { WiFi.softAP(ssid, password); // Start the access point {
上面的代码会将 ESP8266 设置为接入点,客户端可以连接到它,但不会发生其他任何事情。首先,让我们配置 mDNS 服务器以允许更轻松的 URL 访问。
下面的代码片段:
#includeMDNS.begin("esp8266"); void loop() { MDNS.update(); }
一旦客户端连接到 ESP8266 接入点,Web 浏览器就可以使用 URL http://esp8266.local/ 来访问 ESP8266。更改 begin() 指令中的参数“esp8266”将更改 URL。
设置网络服务器的相关代码片段如下:
#includeESP8266WebServer server(80); void setup() { server.onNotFound(handlerRoutine); server.on(“URL”, handlerRoutine); server.begin(); } void loop() { server.handleClient(); }
其中 handlerRoutine 是一个子例程,当从客户端收到请求时执行各种操作。
ESP8266 板载文件系统
ESP8266 的另一个特点是它有一个板载文件系统,串行外设接口闪存文件系统 (SPIFFS),可用于存储文件。在我们的例子中,我们可以使用它来存储提供给连接的客户端的 html 文件。此功能的相关库是:
FS.h
要在 Arduino IDE 中启用此功能,需要一个插件:Filesystem uploader。
首先,确保安装了最新的 Arduino IDE,并且如前所述,您有用于 Arduino IDE 的 ESP8266 插件。
然后按照以下任一链接中的说明进行操作:
https://randomnerdtutorials.com/install-esp8266-filesystem-uploader-arduino-ide/
https://github.com/esp8266/arduino-esp8266fs-plugin
这两个链接都显示了安装插件后如何使用文件系统上传器。
现在——HTML 代码
一旦将 ESP8266 设置为 Web 服务器,相关的 html 页面必须在连接后提供给客户端。按照惯例,此文件标记为 index.html。要理解此文件,需要了解 html 代码。
一些解释:
该文件定义了一个页面,由四个按钮(FWD、RIGHT、LEFT、BACK)和一个速度滑块组成。
按下按钮会导致它改变颜色并向 ESP8266 网络服务器发送 GET 请求
Web 服务器将处理 GET 请求并使用它与 ATMega328 通信以控制汽车
更改速度滑块将启动 POST 请求,该请求将用于设置速度值。
完整文件(带注释)可以在本文的代码部分找到。最终页面如下:
ESP8266与ATMega328通信
如前所示,ESP8266 和 ATMega328 之间的通信是通过串口进行的。要启用此通信,板载 DIP 开关必须设置如下:
将 dip 开关设置为模式 4(SW1 和 SW2 打开,所有其他关闭)
ESP8266 将 1 到 8 之间的单个字符发送到 ATMega328 以指定电机动作。完整代码如下:
// FWD Activate case '1': forwardOn(); break; // FWD Stop case '2': motorsOff(); break; // LEFT Activate case '3': leftOn(); break; // LEFT Stop case '4': motorsOff(); break; // RIGHT Activate case '5': rightOn(); break; //RIGHT Stop case '6': motorsOff(); break; // BACK Activate case '7': backOn(); break; // BACK Stop case '8': motorsOff();
速度值作为第一个字符为“s”的字符串发送。然后代码从字符串中去除 s 并进行字符串到整数的转换以设置电机速度。
把它们放在一起
以下是构建完整项目的简要说明:
造车
使用 Arduino IDE 中的 Boards Manager 选择 Generic ESP8266 模块
将 index.html 文件上传到 ESP8266(DIP 开关 5、6、7 上所有其他关闭),然后重置处理器
上传ESP8266程序
断开电源并将 DIP 开关设置为 ATMega328(所有其他的 DIP 开关 3、4 关闭)
上传Arduino程序(在Boards manager中选择Arduino UNO后)
断开电源并将 DIP 开关设置为内部通信(DIP 开关 1、2 在所有其他关闭)
启动汽车
将平板电脑、智能手机或笔记本电脑无线连接到“ESP8266Network”
从连接的平板电脑、智能手机或笔记本电脑,打开 URL http://esp8266.local/
使用界面驾驶汽车
最后的话
这个项目汇集了一些不同的技能。希望它具有挑战性。
可以使用像 Node MCU 这样的单个 ESP8266 板来实现所有这些功能,但这将是一个单独的项目。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !