但是,在我的解决方案中,我需要将这些节点之一连接到互联网,以便整个Mesh都可以访问它(或者至少可以访问Mesh) )。 Espressif的ESP8266 Mesh用户指南文档(第4页)中也提到了这一点。我还发现他们发布了一些其他文档,所有这些文档都是正常的,但是没有任何我容易理解的示例代码。路由器。它像在Wi-Fi路由器上使用相同的SSID和Pass密钥一样简单吗?还是需要将Wi-Fi网格的Raspberry Pi做成一部分,然后再进行连接通过以太网连接到我的路由器?我认为我完成的研究不应该要求使用后者。我想,AT命令不会帮助我。
#1 楼
轻松网格的另一种选择是使用BlackEdder的painlessMesh,并在那里引入将数据交换到外部世界的桥梁。在无痛网格gitlab中从网格连接到其他网络存在一个问题,解释了四种不同的解决方案。解决方案也许也可以在easyMesh中使用,因为最初是在此问题提出的,但是可以肯定的是,它在painlessMesh中。
我查看了它们,最可行的解决方案需要将两个额外的设备都连接到网格,以处理与外部网络的实际连接。
第一个为您的项目介绍第四个esp8266。它会连接到Internet并通过串行连接与您的一个节点通信。
另一个人将使用Raspberry PI设备收集数据并与另一个wifi卡连接到其他网络。
另外两个都不好,一个被作者劝阻,另一个由于esp8266太复杂和有限而无法尝试。
gitlab中的整个指南。
#2 楼
我将对EasyMesh的现有实现进行一些修改,因为当前它似乎尚未实现节点角色。每个节点都是相等的,并且它们只能彼此建立连接。如我所见,无法将服务器添加到其路由表中,也无法标记与服务器具有连接性的表中的特定连接记录。节点使用连接列表进行消息路由/转发。您需要的是一个具有服务器连接记录的节点,这是根节点。
现在,当节点通电时,它将扫描可用的AP(接入点),过滤掉不以网状前缀开头的那些,然后以最佳RSSI连接到AP。同样,每个节点都会创建一个带有名称网格前缀+节点唯一芯片ID的自己的AP。这是应该应用更改的第一点。您可以对唯一的AP进行硬编码或以某种方式进行配置,例如网状前缀+“服务器”,如果没有其他EasyMesh AP可用,则该节点应连接到该AP,并应在其连接列表中存储预定义的
meshConnectionType
对象。 br /> 此对象的字段将不会由服务器和节点之间的消息交换来确定,但可以是固定值,除了
espconn
字段。应该像在其他情况下那样获得一个。在下面的结构中,您只需要第一个成员变量即可。您应该选择一个不能作为ESP8266芯片ID的值。
因此,基本上,网络上电的第一个节点将是“根”节点。如果其他节点希望将消息发送到服务器,则将基于间接连接(在代码中称为子连接)记录将消息发送到“根”节点。
然后,“根”节点将发现它与服务器(路由器/互联网)具有直接连接,并且作为对服务器的消息,它应以其他方式(而不是像网格一样)转发此消息。 。显然,这里需要其他信息,例如服务器的IP地址和使用的端口。这些也应该默认或通过某种配置方法存储在节点上(每个节点上)。
最后,“根”节点将向服务器发送IP消息,这应该由你又是你。
TL; DR;结论:
应该有一个服务器AP,并且第一个节点(只有第一个要加电的节点)应该连接到它,这就是根节点。
服务器应具有一个地址(
chipId
),以便在向服务器发送消息时在网状网络中使用该地址。默认情况下,该信息应可用于所有节点。根节点应知道它“直接”连接到服务器/互联网。这可以通过将带有服务器
destId
的连接记录添加到根节点的连接列表中来实现。知道它已连接到服务器的根节点可以通过Internet适当转发消息。
这只是我通过阅读EasyMesh的实现得出的一个理论想法。我可能已经错过了一些重要的事实,这将使这一点难以实施或无法实施。同样,它可能不是解决问题的最有效方法。我不是网状网络专家。
网络中有一个根节点会问“如果根断开连接会发生什么?如何选择新的根?”。
评论
关于3个节点的示例,您是否也已建立并运行Web界面,就像本视频中的电话界面一样?@BenceKaulics自从我之前没有做过专门的测试,这对我来说不是问题。你为什么要问?我当时以为这可能是一个后备选项,其中“服务器”可以简单地通过承载在网格上的REST调用访问网格网络,但是我对ROOT NODE选项很感兴趣,这听起来像是正确的体系结构(IMHO)。
我懂了。我一直在想,它可以作为访问网络的替代选择。但是,没有建议作为解决方案,因此仅是注释。我不知道您已经考虑过了。 ;)