MIRO是一个开放的室内机器人平台。 第3部分-软件组件:ESP8266

图片

我们开始拆卸MIRO平台的软件组件。 让我们看看如何使用ESP8266来“烹饪” ARDUINO UNO,以进行固件和无线通信。

目录: 第1部分第2 部分第3 部分第4 部分第5部分

我不希望我们为ESP8266开发任何东西。 我确信很长一段时间以来,我一直在使用具有所需功能的交钥匙解决方案。 对于MIRO,此功能非常简单:

  1. 该软件必须具有用于网络配置的Web界面。
  2. 该软件应实现ATMEGA328无线固件;
  3. 该软件必须具有WiFi-UART桥接功能才能进行无线调试和管理。

图片 对于大多数这些功能,可能都有众所周知的ESP-LINK 。 他真的很强大。 我们在其他几个项目中使用它作为不同接口之间的桥梁-非常方便。 但是几个月前,当我们坐下来密切处理这个问题时,事实证明,他并没有在闪动ARDUINO UNO。 他们到处写道,他们在闪烁,但他没有闪烁。 在那一刻,我什至没有深入了解为什么以及什么是标准程序。 我和我的同志们只是在主机上的特定ESP IP地址上配置了一个虚拟COM端口,在ESP-LINK本身中指示了复位行,并试图对其进行刷新。 ATMEGA328已成功重置,但固件未充满。 此外,在使用ESP-LINK来组织这种固件方面,网络上有很多教训。 但是,如果您阅读了他们的问题,那么他们那里总会有些东西没有闪烁。

失望的他开始寻找替代品。 我发现它是GitHub上原始Arduino WiFi的一个分支,昵称是jandrassy。
早在当年2月,README中就有一条可怕的指令来配置从固件到开发环境的所有内容,但是现在它已经大大简化了。 但是,设置环境仍然需要一些努力。 但是,ARDUINO固件非常完美。 可从Windows和Linux进行检查(在MacOS上,我们似乎从未进行过任何测试-在项目的直接环境中没有人对此进行过测试)。

这里准备环境的顺序如下:

  1. 从此处下载并安装dfu库;
  2. 默认情况下,在此库中(在esp8266-serial-arduinouno-hacked.cpp文件中),声明ATMEGA328芯片的Reset线已连接到GPIO5 ESP8266线。 对于MIRO,您需要在此处进行更改-更改为GPIO2。

到底要改变什么
那是:

esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(5, OUTPUT); digitalWrite(5, 0); delay(1); digitalWrite(5, 1); delay(200); return 0; } 

它变成了:

 esp8266_serial_arduinouno_hacked_target_reset(struct dfu_interface *iface) { pinMode(2, OUTPUT); digitalWrite(2, 0); delay(1); digitalWrite(2, 1); delay(200); return 0; } 


jandrassy的作者指出,其实现仅适用于目标芯片和引导加载程序(带有Optiboot的ATMEGA328P)的这种配置。

我相信仍然有解决方案,甚至可能更好。 如果有人确定知道工作选项,请告诉我。 因为,尽管有大量现成的代码,除了ESP-LINK之外,我们还测试了2或3个项目-它们无法正常工作。 在某些情况下,固件只能运行一次,在某些情况下它根本无法工作。

找到的解决方案的主要优势之一可能是项目的代码库相对较小,以及为Arduino Core开发的固件这一事实。

在jandrassy项目中没有的是WiFi-UART无线网桥。 在原始的Arduino.org WiFi Link固件中,已经剪切了带有终端窗口的页面,从而允许通过浏览器与UART芯片ATMEGA328一起使用。 就像可以在ESP-LINK中完成此操作一样。 而且,如果我们转向有关Arduino UNO WiFi的第一本出版物(例如, 此处 ),则很明显,在固件的第一版中,窗口和相应的菜单项(“ WiFi控制台”)都是。 即使在归档文件的1.0.0版中,也存在console.js文件(仅在此页面上实现),但实际上,它不以任何方式参与服务器(我们已经检查过)。 为什么以及为什么他们看到了这一点尚不清楚。

我必须完成一些事情。 现在,固件中还有另一个服务器-明显位于端口23的TELNET,许多终端程序都可以使用该服务器正常工作。

但是,此刻,为了使一切正常,我不得不从jandrassy代码中删除负责ESP本身的无线固件的部分。 在最初的需求中,我没有此功能,所以还可以。 但是,如果评论中的读者可以肯定地告诉我,是否可以在一个固件中实现ESP8266本身和“外部” MCU(在这种情况下为ATMEGA328)的无线固件的可能性,那么我将考虑将此功能恢复为ESP固件。 间接地,在准备本文时,我在这份加拿大人草案中看到了对此的确认。 但是没有检查。

同时,ESP仅通过有线方式进行刷新,但是ARDUINO能够通过WiFi-UART桥接器进行无线固件和TELNET通信。 而且非常方便! 我的目标实现了。

嗯,在项目中,与原始项目一样,有一个用于设置的WEB界面(可单击图片)。





我们为项目更改了WEB界面样式的CSS文件,并引入了一个小的“拐杖”-现在ESP始终处于AP + STA模式。 制作此拐杖是为了排除将ESP切换为“仅STA”模式的可能性,在这种模式下,将机器人传输到其他子网时,用户将失去在新网络中配置机器人的能力-机器人无法连接到新网络,但是也没有外部访问权限-我必须重新刷写ESP。 在AP + STA模式下,用户始终可以连接到机器人的接入点并配置与新WiFi网络的连接。

关于如何使用此“怪物”刷新ESP8266。 通常,对于ESP8266芯片上的任意模块,顺序如下:

  1. 打开板子(连接到USB);
  2. 如图所示设置单板参数;

    图片

    选择“ v1.4更高带宽”是非常重要的-如果选择“ v2”,则在固件之后无法通过WiFi连接到板(访问点可见,但是连接过程不起作用-谁知道连接的是什么-在注释中写)。
  3. 选择一个端口(在屏幕快照的示例中为COM3)。
  4. 运行固件。 在加载电路板的过程中,先擦除微控制器的存储器,然后再擦除固件。
  5. 完成固件过程后,您需要使用重置按钮重置板卡。
  6. 从菜单中选择Arduino IDE ESP8266 Sketch Data Upload,然后下载SPIFFS。
  7. 重置板。

对于使用我们的“修改后的电路板” UNO + WiFi的配置(请参见第一部分 ),由于电路板的硬件功能,一切都有些复杂,由于电路图文档中存在大量错误,因此很难轻松研究。 我们在存储库的 “ MIRO ESP固件上载手册”文件中写了更详细的说明-如果严格执行操作,则固件将在100分之内通过100分。

我们来到一个非常有趣的部分-分配给ATMEGA328的MIRO软件组件。 同样,还有更多的工作和空间来讨论各种解决方案。

谢谢大家!

Source: https://habr.com/ru/post/zh-CN473368/


All Articles