使用nodeMCU的WiFi网状网络。

我有两个nodeMCU模块,我想连接到MQTT代理并每5秒发送一些数据。

我试图实现的拓扑图是[路由器]<==[nodeMCU#1]<==[nodeMCU#2]

看起来[nodeMCU#1]是wifi扩展器,但在工作中,我们计划使用多个nodeMCU以网状方式用于IoT应用。

我在它们两个上都刷了最新的(浮点)版本,我从这里下载了发布版本https://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704,并使用nodeMCU-flasher。

对于这个项目,我编写了2个lua脚本,并使用ESPlorer将它们上传到模块。

对于第一个模块,它以STATIONAP模式连接到我的工作wifi,并创建自己的网络,其中SSID为nodeMCUwifi,密码为10个字符“ 1234567890”。连接后,脚本将随机值发送到MQTT主题。

对于第二个模块,它正确连接到nodeMCUwifi,分配了一个IP地址,但无法连接到MQTT代理。

当我尝试使用智能手机连接到nodeMCUwifi(只是为了测试连接,我没有打算在此系统中使用大量互联网负载,仅发送MQTT消息)时,我收到一条消息“发生身份验证错误”,即使我已正确输入密码,或(在较少的情况下)它连接但立即断开连接。

我将感激任何解决此问题的想法。谢谢。

编辑:在AP配置中,我添加了设置为3的auth参数,我在下面粘贴了我的代码的一部分。

cfg.ssid="ESP8266_"..node.chipid();
cfg.pwd="1234567890"
cfg.auth=3
wifi.ap.config(cfg);

现在我的笔记本电脑和智能手机连接到模块创建的wifi,但仍然无法连接到互联网。我可以ping模块,但无法ping 8.8.8.8或MQTT代理IP或任何其他东西。

点赞
用户745049
用户745049

据我所了解,[nodeMCU#1] 创建了一个名为 nodeMCUwifi 的 wifi 网络。然后其他设备尝试连接 nodeMCUwifi。正如您所说:

现在我的笔记本电脑和智能手机连接到了模块创建的wifi,但是它们仍然不能连接到因特网。我可以 ping 模块,但不能 ping 8.8.8.8 或者 MQTT 代理的 IP 或任何其他东西。

我假设您的笔记本电脑和智能手机连接到了 nodeMCUwifi 网络。现在您想让 [nodeMCU#1] 像二层交换机或者路由器一样工作(因为 SOFTAP 创建了它自己的 IP 网络)。

有了所有这些信息,我可以说,您想要实现的目标在 esp 上是不可能的。因为 esp 没有足够的资源来像交换机或者类似的设备一样工作。此外(目前),在 esp 中没有实现这样的软件。

然而,如果您只想要系统将某些类型的流量(例如 MQTT )转发到某种协议(例如 UDP )上,那么就可以像网状结构一样中继消息,但这只能单向工作。在这种配置中,节点将在 OSI 的较高层上像中继器一样工作。对于这个想法,我不能提供样例代码,但我会给出伪代码:

配置

每个节点必须配置为构建一个链式结构。这意味着每个 SOFTAP 节点应具有不同的 SSID 或 TCP 设置。例如:

router(192.168.0.0)<----[NODE#1(SOFTAP0)]<----[NODE#2(SOFTAP1)]<---...
...
...
...<----[NODE#n(STATION)]

每个节点都必须有一个目标 IP 地址。这意味着每个节点都将消息发送到该地址。

如果将一个节点配置为 SOFTAP,那么这意味着该系统是一个目标,并且必须监听特定的端口。

如果 SOFTAP 节点在其监听端口上接收到一些数据,它应立即将数据发送(或缓冲)到其目标节点。

作为这种链式运作的结果,无论来源如何,消息都将到达链的末端。

代码 : SOFTAP

...soft ap config...
listento.port: udp.965
on("receive"):
    create.conn:TARGET
    send(DATA_RECEIVED)
    close.conn:TARGET

代码 : STATION

...station config...
...Do some logic...
data=gather.data()
create.conn:TARGET
send(data)
close.conn:TARGET
2015-12-12 11:52:22