
开发人员在罕见的休闲时间里会做什么? 没错,浏览钢铁商店的价格表。 有一个空闲的时间,我决定浏览一下流行的在线商店的页面-无聊,没什么有趣的,我们已经看到了所有这一切...然后突然我的眼睛落在了下一个Mega上。 ah! 是的,它不仅是Mega,而且还与每个人都钟爱的ESP8266结合在一起,并精心配备了两个控制器可以协同工作的开关-有线(使用Ethernet Shield)与大量GPIO和Wi-Fi进行无线通信。
还不错! 我想到并记得关于
AMS的信息 -您可以在其中安装两台服务器-有线和无线并将它们连接到一个系统中-ESP8266将接收54个数字和16个模拟引脚,Mega将通过Wi-Fi和所有ESP8266包子进行无线控制。 很久以前,我没有遇到过如此有趣的董事会。
你好 您有
Mega + ESP8266开发板吗?
-是的,但只剩一个了。
“为什么只有一个?”
-剩下的被拆了。
“请为我保留她。”
关于公司的几句话
我喜欢RobotDyn有两点:第一-具有技术解决方案。 无需走太远,一个很好的例子就是正在考虑的Mega + ESP8266开发板。 我在我们的在线商店(不是我们的商店,但我并不是真的在这里寻找)中没有看到这样的内容。 这不是唯一的例子,仍然有Uno + ESP8266选项,该公司显然不会止步于此,显然还有许多有趣的设备在等着我们。
其次是其定价政策。 我不会在这里详细讨论这个问题,但我会说价格令我感到惊喜-公司的座右铭是“价格就像速卖通上的价格一样”。
简而言之,我描述了随后发生的所有事件的背景,现在我们直接进入技术细节,对电路板的描述以及如何使用它。
董事会本身
总的来说,一块普通的板与许多类似的板没有什么不同,即使不是很小的一部分,也就是集成到板中的ESP8266EX芯片。 这立即将董事会转移到非凡的解决方案类别。 我想提请您注意更多细节-电路板上没有集成ESP-12类型的标准模块,但是芯片和所有布线都在电路板上本身完成,这透明地暗示了开发人员的水平。 我还想指出,该板同时具有印刷天线和用于连接外部天线的连接器,这在许多情况下可能非常有用。

板上有用于连接ESP8266端子和多个开关的引脚连接器,值得一提。 使用开发板的主要思想是使用开关,可以用不同的方式配置其三个组件的交互:Atmega2560芯片,ESP8266EX芯片和CH340G USB-TTL转换器。 单个和复杂连接都可以,这使您可以为电路板各部分的交互组织许多选项。 这为构建各种设备提供了巨大的机会,但稍后会介绍更多。

我还想指出板子的良好负载能力。 从上面的铭文判断,它能够在5伏通道上提供1.6 A的负载电流,在3.3伏上提供1 A的负载电流。 这非常好,尤其是总体而言。
关于该板没有更多可说的了,我们转向安装软件并对其进行测试。
董事会测试
由于开发板是集成的,几乎没有可用空间,并且ESP8266EX的高频部分都已在其上进行布线,因此最初引起了人们对整个经济环境的正确且无故障运行的怀疑。
展望未来,我要说的是,尽管有我的担忧,但一切都稳定且符合预期。 我们将Atmega2560板上的开关连接到USB-我们将Arduino Mega连接到我们,将ESP8266EX连接到USB-我们将ESP8266连接到ESP8266EX并切换到Atmega2560的连接模式,然后通过串行接口获得芯片之间的连接。 一切工作均与文档中所述完全相同,并且与直观预期完全相同。
该解决方案的一大优点是,开发人员负责匹配所有系统组件的逻辑信号电平。 手动尝试配置ESP8266模块并正确连接所有上拉电阻的任何人都会了解我。 不会出现此类问题,您可以按照制造商的说明将所有工作简化为单击板上的开关。
负载测试
如何测试板? 您可以下载一些标准草图,但这将是一项测试。 该选项可能工作正常,并且在战斗条件下系统将发生故障。 因此,在相应版本的Arduino Mega Server的控制下,两个部分的工作都被选作硬负载测试。 对于Mega-适用于Mega的Arduino Mega Server和ESP8266-适用于M1版本的ESP8266的Arduino Mega Server。
选择M1分发套件是因为板上仅安装了1 MB的ESP8266闪存。 我认为,这几乎是开发人员唯一的错误-在将来的主板修订版中,我建议他们放置4 MB的存储芯片。 价格差异很小,使用4 MB版本的可能性更大。 但是由于有一个用于1 MB系统的AMS版本,因此我对此并没有过多注意,而是继续进行测试。
说什么 我们打开板子,填写软件并获得两个独立的服务器。 1个通过Ethernet Shield有线连接,1个通过Wi-Fi无线连接。 美女!
我还要指出的是,即使在这个已经很复杂的系统中添加带有读卡器的Ethernet Shield,也不会引起任何冲突或故障-一切都按应有的方式进行。 在某些情况下,它甚至比平时还要好-这是ESP8266固件在100%情况下成功通过无线传输的第一块板,在所有其他板和模块上,这种闪烁有时会导致故障。
两台服务器正在旋转,正在加载电路板,履行其职责,仅此而已。 一切正常,甚至无话可说,但这可能是任何技术系统的最佳称赞。
最有趣
从纯粹的学术角度来看,我在这里描述的内容很有趣:一个有趣的板子,一个有趣的技术解决方案,但是我们当然对它的实际应用感兴趣。 它的实用和应用亮点是什么?
事实是,板上有一个开关,您可以将其两个部分(Mega和ESP)连接到一个单元中,从而首先获得新的质量体系,其次可以弥补每个单独部分的固有缺陷。
让我们从ESP8266开始。 这种普遍出色的解决方案的主要缺点是GPIO引脚严重缺乏。 正如他们所说,一,二和计算错误。 很难说出这款芯片的开发者的想法,但是在ESP32发行之前,他们有更多的时间去思考,他们解决了新芯片中的这一缺点。 但是我们专门处理8266。
该评估板可让您动起来并充分利用Mega的全部功能,其中包括ESP8266中的54个数字输出和16个模拟输出。 也就是说,我们摇摇欲坠的ESP突然获得了与传感器,执行器和其他外围设备一起工作的绝佳机会。 可以这么说,事实证明,婴儿类固醇的ESP。
这只是使用表面上的木板的可能选择之一。
现在让我们看一下兆丰。 她不会干扰无线接口以及与Wi-Fi设备进行交互的能力,这可以使她与系统的ESP部分集成在一起。 同时,仍然有可能通过有线以太网接口进行并行操作。
而且,这也是该板表面上可能的应用之一。
好吧,各种桥接选项:以太网-Wi-Fi,nRF24-以太网,nRF24-Wi-Fi,nRF24(1)-nRF24(2),nooLite-Wi-Fi,nooLite-以太网,nooLite(1)-nooLite(2 )等到无穷大。 您可以在板的两个部分以及与其相连的接口之间路由来自数十个子系统的信号,Arduino Mega Server可以通过这些子系统工作。
我什至不知道该说些什么。 很酷
技术细节
现在介绍一些技术细节。 您会看到一个表格,其中列出了板的所有可能的操作模式,并显示了板上所有可能的开关位置。 让我们简要地考虑每种模式。

Arduino Mega 2560
板子最简单的操作模式在表中被指定为模式3。如果将开关3和4设置为ON位置,将其余开关设置为OFF位置,我们将得到普通的Arduino Mega2560。没有什么有趣的,因此,不值得购买此板子,您可以是买平常的兆丰。
ESP8266
同样不是很有趣的操作模式。 在表中,它分为两个子模式,分别为1(将草图加载到ESP)和2(ESP到USB连接模式)。 这是标准ESP8266的所有功能,因此,不值得购买此板,可以通过常规ESP模块获得。
都是独立的
我们也不会在第6个位置考虑此选项,因为其中板子各部分之间的所有连接都断开了,对于任何事情它绝对对我们没有用。
Mega与ESP之间的联系
在此模式下,指定为5,通过串行接口在Mega和ESP之间建立通信,但没有与USB-TTL转换器进行通信。 ESP使用标准的Serial,而Mega使用不少于标准的Serial3。 该连接稳定且无缝地以115200的速度运行。当没有控制器具有USB连接时,这是一种相当特定的操作模式。 所以他对我们也不是很有趣。
Mega和ESP以及Mega和USB同时通信
但这就是所谓的王牌。 我们立刻获得了一切-Mega USB连接以及能够通过同一USB将草图上传到Mega并控制其操作的功能,Mega与ESP之间进行通讯的可能性以及能够将草图上传到ESP8266并能够在USB接口中控制其操作的功能... Mega! 也就是说,完全填充,而不是直接离开收银机。
这是表中列出的唯一正确的操作模式。 记住他的中奖号码是四。 在板上的开关配置中,它看起来也很漂亮-1,2,3,4处于ON位置,其余均为OFF。
一个细心的读者会问:如果USB端口正忙于连接系统的Mega部分,如何将草图上传到ESP8266? 这是正确的问题,答案是没有办法。 那么,为什么要在这种配置中编写我们可以将草图上传到ESP8266呢? 因为Arduino Mega Server可以通过按几个按钮直接从Arduino IDE空中下载草图,所以没错-我们已经装满东西了,一切都可以立即使用。
但是,那些想在没有Arduino Mega Server的情况下使用开发板的人呢? 只有两个选项:不断单击开关,或在设计中添加通过空中下载草图的功能。 我个人更喜欢第二种选择。
Arduino IDE设置
Mega的Arduino IDE设置没有任何问题,所有设置都是标准设置,对于ESP8266,我将给出菜单屏幕截图,其中包含RobotDyn板上ESP部件的特定实现的设置。 您必须为自己设置相同的参数,端口号除外-系统上的端口号很可能会具有不同的值。

适用于RobotDyn Mega + ESP8266的Arduino Mega Server
对于此板,已发布了特殊的Arduino Mega Server双版本,其中一次包含两台服务器,专门针对此板进行了优化。 这是没有问题的,这两个服务器都包含标准功能,可用于您的任何项目。
您可以在同一块板上独立使用这两个服务器,也可以添加所需的功能,并在两个网络以及连接到服务器的任何接口之间以串联方式和桥接方式使用它们。
RobotDyn Mega + ESP8266板的第一个Arduino Mega Server组件包含一个通过串行接口交互两个控制器的测试示例。 这是技术功能的演示,您可以在此基础上开发自己的解决方案。
现在,我们将更多地讨论通过串行接口(特别是在此板上)用于两个控制器交互的协议的开发。
协议开发
我们应该建什么房子? 是否需要通过串行接口开发系统的两个部分之间的交互协议? -我们将不断发展,主要是清楚,正确地设置任务。 为了演示系统的串联操作,我们在每台服务器的仪表板上显示“伙伴”操作指示器。
关于术语的一些知识。 对于Mega,“伙伴”是ESP8266,对于ESP8266,分别是Mega。当伙伴处于工作状态时,指示灯将呈绿色亮起;不处于工作状态时,指示灯将呈红色和灰色(未定义状态)。 这非常方便-在运行过程中,您将立即看到系统变更自我的状态。
对于这个问题的实际解决方案,正好有上百万种方式,我们将选择以下方式:系统两部分的通信块将是相同的,交互将以全双工模式发生,信息块将具有简单易懂的格式:
?=
或
?
这只是解决任务的测试示例,您可以修改此交互协议或编写适合您任务的自己的交互协议。 但是,在已经实施的协议上,您不仅可以监视伙伴的状态,还可以将其用于许多其他目的,例如,传输控制器引脚的状态,传感器的状态或向伙伴发送控制命令。
具体来说,在我们的系统中,团队将如下所示:
?mega = 1-兆发送有关其性能的数据。 参数“ mega”,值“ 1”。
?esp = 1 -ESP8266发送有关其运行状况的数据。 参数为“ esp”,值为“ 1”。
因此,例如,考虑为系统的Mega部分实现协议。
以标准方式,我们以115200的速度初始化AMS模块和Serial3 Mega硬件。
void robotdynInit() { Serial3.begin(115200); modulRobotdyn = MODUL_ENABLE; started("RobotDyn", true); }
我们检查Serial3端口的状态,对于来自伙伴的数据,我们形成字符串变量serialReq,其中包含接收到的数据或命令。
void checkSerial() { while (Serial3.available() > 0) { if (sFlag) { serialReq = ""; sFlag = false; } char c = Serial3.read(); if (c == 10) { sFlag = true; parseSerialStr(); } else if (c == 13) {
我们解析命令和数据,并在获得有关伙伴状态的信息的情况下,采取改变esp变量状态的措施。
void parseSerialCmd() { String command, parameter; if (serialReq.indexOf(F("?")) >= 0) { int pBegin = serialReq.indexOf(F("?")) + 1; if (serialReq.indexOf(F("=")) >= 0) { int pParam = serialReq.indexOf(F("=")); command = serialReq.substring(pBegin, pParam); parameter = serialReq.substring(pParam + 1); } else { command = serialReq.substring(pBegin); parameter = ""; } if (command != F("esp")) { Serial.print(F("command/parameter: ")); Serial.print(command); Serial.print(F("/")); Serial.println(parameter); } if (command == F("esp")) { if (parameter == F("1")) { esp = 1; espTimer = millis(); } else { esp = 0; } } }
您可以通过更改并将其添加到相应的代码部分来轻松地添加其他命令的处理。
if (command == F("esp")) { if (parameter == F("1")) { esp = 1; espTimer = millis(); } else { esp = 0; }
如果您在自己的项目中使用大量命令和数据进行分析,则此代码段最好以相应功能的形式进行设计。
仅需考虑负责其工作的AMS模块的标准功能。 首先,检查端口状态,然后每四秒钟向伙伴发送一次Mega处于运行状态的命令,并检查自从伙伴接收到最后一个数据以来经过的时间,如果超过8秒,则得出结论说伙伴不起作用。
void robotdynWork() { checkSerial(); if (cycle4s) { Serial3.println(F("?mega=1")); if (millis() - espTimer > 8000) { esp = 0; } } }
太神奇了。 是的,没什么复杂的吗?
负责Mega 2560和ESP8266之间的系统间通信的模块的完整代码 #ifdef ROBOTDYN_FEATURE bool sFlag = true; unsigned long espTimer = millis();
串行监视器中的输出是什么样的
在Mega 2560串行监视器中,系统ESP部分的输出,数据和命令看起来完全像它自己的一样。 为了将合作伙伴的输出与Mega的输出区分开来,他的数据用方括号括起来。 在这种情况下,您可以在Mega的串行监视器中看到ESP8266重新启动和AMS启动日志。

以及通过串行接口在系统的两个部分之间实际交换命令的日志。 您会在ESP8266的输出中看到有关在Mega的串行接口中解码Mega状态数据的信息,并用引号引起来。

界面美
现在介绍一下它们在Arduino Mega Server界面中的外观。 首先,我将提供工作中系统两部分的屏幕快照。

椭圆形围绕标识控制器和您当前正在使用的系统部分的铭文。 圆圈在显示伙伴状态的指示器周围盘旋。 目前,一切都井井有条,系统的两个部分都正常工作,并通过内部接口正常交互。 如果出了问题,那么最多8秒钟后您就会知道。

出了点问题。 ESP8266通过无线方式接收到固件更新,并且系统的Mega部分记录了重新启动的时间。 几秒钟后,系统的ESP部分将恢复,并且指示灯将熄灭红色。
为方便起见,当您将鼠标悬停在合作伙伴状态指示器上时,会出现提示,并可以单击它,在另一个窗口中,系统第二部分(在本例中为ESP部分)的界面打开。 这样做是为了方便起见,您可以随时单击打开系统第二部分的界面。

项目构想
现在,稍微想一下您可以从这一切中得到什么。 乍看之下,通常的面板完全谨慎,可让您执行许多完全不寻常且有趣的事情。 与Arduino Mega Server的结合尤其如此。
因此,首先想到的是:
从控制器之间的传感器转发数据。 双方,数量不限。 这是一个系统,它具有两个部分的优点,并且可能性不仅会加在一起,而且还会观察到所谓的协同效应。
接口之间的桥梁。 Arduino Mega Server可以使用许多接口,并且该系统允许您在任何连接的有线和无线接口之间路由数据和命令。
当Mega通过Ethernet Shield和ESP8266通过Wi-Fi与同一网络上的有线和无线设备通信时,可在同一网络上工作。
当Mega连接到有线以太网,ESP8266通过Wi-Fi连接到另一个网络,并且系统将命令和数据从一个网络路由到另一个网络时,它可以
在不同的网络中工作 。
系统的一部分在另一部分的界面中的输出。 通过使用标准Web订阅源的以太网或内部串行连接。
侦错 系统的一部分可以根据您的程序充当系统另一部分的调试器和测试器。
看门狗定时器。 每个控制器相对于另一个都可以充当一种看门狗。
记录失败。 每个控制器都可以保留其伙伴的工作日志,汇总统计信息并报告警报情况。
ESP8266的资料库。 使用此系统,您可以在Mega上为ESP8266组织类似SQL数据库的内容。 ESP可以完成工作,Mega可以充当存储系统(最大32 GB)。
互相闪烁。 控制器可以根据嵌入式逻辑或在外部控制命令到达时相互动态刷新。
连接模块。 控制器可以连接到各种外围设备,这些外围设备在连接到系统的任何一部分时都遇到问题。
依此类推,等等,我认为一个好奇的读者将能够独立提出许多同样有趣的方式来使用该系统。
结论
在我看来,这是一个非常有趣的解决方案,我们必须非常感谢RobotDyn支付如此高昂的
费用 。 我至少要真诚地说。
下载适用于RobotDyn Mega + ESP8266的Arduino Mega Server分发套件,并亲自验证此处编写的所有内容的有效性,可以在Arduino Mega Server项目的官方网站的
下载部分中进行确认。