使用nodeMCU

时间:2015-12-07 09:45:48

标签: lua wifi esp8266 nodemcu esplorer

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

我想要实现的拓扑结构如[router]< == [nodeMCU#1]< == [nodeMCU#2]

看起来[nodeMCU#1]是一个wifi扩展器,但在工作中我们计划使用多个nodeMCU以类似网格的方式用于物联网应用。

在这两个版本中,我使用nodeMCU-flasher从https://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704下载了最新的(浮动)版本。

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

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

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

当我尝试使用我的智能手机连接到nodeMCUwifi时(只是为了测试连接,我无意使用此系统进行繁重的互联网加载,只有MQTT消息)我收到一条消息“发生了身份验证错误”,即使我有正确键入密码,或(在极少数情况下)它连接但立即断开连接。

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

  

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

我认为您的笔记本电脑和智能手机连接到nodeMCUwifi网络。现在你希望这个[nodeMCU#1]行为像第2层交换机或类似路由器(因为SOFTAP创建自己的IP网络)。

掌握了所有这些信息后,我可以说,您尝试实现的目的是不可能的。因为esp没有足够的资源来像开关或类似的那样行事。另外(目前)在esp中没有实现软件来实现它。

然而;如果您只希望系统通过特定协议(,例如UDP )传输某些类型的流量(,例如MQTT ),则可以中继像网状结构这样的消息,但这只能单向工作。在此配置中,节点将更像中继器,但在OSI的上层。对于这个想法,我无法提供示例代码,但我将在下面提供伪代码:

<强>配置

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

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

&gt; 根据设置,每个节点必须具有 TARGET IP地址。这意味着每个节点都会将MQTT消息发送到该地址。

&gt; 如果某个节点配置为SOFTAP,则表示此系统是TARGET,必须侦听特定端口。

&gt; 如果SOFTAP节点收到正在侦听的端口上的某些数据,它应立即(或缓冲)将数据发送到 TARGET 节点。 / p>

&gt; 作为此链接操作的结果,无论来源是什么,该消息都将到达链的末尾。

代码: 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