ESP8266,NodeMCU,soft AP - UDP 类似于 soft AP 的服务器的独立接入点

我正在使用带有升级固件的 NodeMCU(带有 ESP8266-E)。所有基本指令都完美地工作,但有一个问题。

我想创建一个独立的接入点,该接入点可以具有类似于 UDP 服务器的行为。也就是说,没有直接连接到任何其他接入点。一个简单的 UDP 服务器般的 soft AP。

我按照以下步骤操作:

  1. 我已将新固件上传到 NodeMCU。
  2. 我已经下载了 ESPlorer 以更好地使用 NodeMCU。
  3. 我已上传以下源代码。
  4. 我已连接到我的台式机上的 NodeMCU 接入点。
  5. 我已使用 Java UDP 客户端程序向 NodeMCU 发送了一些字符串。
  6. 我已查看 ESPlorer 上的消息。
  7. NodeMCU 没有收到任何此类字符串。

--

print("ESP8266 Server")
wifi.setmode(wifi.STATIONAP);
wifi.ap.config({ssid="test",pwd="12345678"});
print("Server IP Address:",wifi.ap.getip())

-- 30s timeout for an inactive client
srv = net.createServer(net.UDP, 30)
-- server listens on 5000, if data received, print data to console
srv:listen(5000, function(sk)
  sk:on("receive", function(sck, data)
    print("received: " .. data)
  end)
  sk:on("connection", function(s)
    print("connection established")
  end)
end)

当我尝试使用 Java 应用程序发送消息时,ESPlorer 中没有任何更改。即使在使用 Hercules 程序(用于 TCP、UDP 通信的优秀程序)发送消息时也是如此。

我猜可能是错误的 IP 地址。我正在使用 AP 的 IP 地址而不是站点的 IP 地址。

换句话说,我正在使用此地址:wifi.ap.getip() 而不是此地址 wifi.sta.getip() 进行与 UDP 服务器的连接。但是,sta.getip() 返回一个空对象。真的,我不知道。

我会很高兴得到任何建议。

非常感谢。

点赞
用户131929
用户131929

好的,由于您更新了问题,让我们重新开始。在给出第一条提示之前,我应该先开启大脑,对此表示抱歉。

UDP是无连接的,因此当然没有s:on("connection")。因此,你不能在套接字上注册回调函数,而是在服务器本身上注册。这在文档中有提到,但容易被忽视。

这应该可以帮助您:

wifi.setmode(wifi.STATIONAP)
wifi.ap.config({ ssid = "test", pwd = "12345678" })
print("Server IP Address:", wifi.ap.getip())

srv = net.createServer(net.UDP)
srv:listen(5000)
srv:on("receive", function(s, data)
    print("received: " .. data)
    s:send("echo: " .. data)
end)

我使用dev分支中的固件运行了这个程序,并从命令行中进行测试:

$ echo "foo" | nc -w1 -u 192.168.4.1 5000
echo: foo

然后ESPlorer也正确地打印出“received: foo”。

2016-04-21 12:42:55
用户2858170
用户2858170

这一行无效的 Lua 代码。connected 在这里的位置是错误的。你不能在函数调用后只放一个单词。

print(wifi.ap.getip()) connected

我猜你想做的是 print(wifi.ap.getip() .. “连接”) 虽然我认为你应该在这里添加一些错误处理,以防 wifi.ap.getip() 不返回 IP。

在这里,您没有完成函数定义。您也没有完成 srv:on 的调用。

srv:on("receive", function(srv, pl) 
print("Strings received") 
srv:listen(port)

我猜你只是没有复制/粘贴完整的代码。

2016-04-21 13:46:41