ESP8266, NodeMCU, soft AP - UDP server-like soft AP, 独立接入点
ESP8266, NodeMCU, soft AP - UDP server-like soft AP, independent access point
我正在使用带有升级固件的 NodeMCU(带有 ESP8266-E)。所有基本命令都运行良好,但有一个问题。
我想创建一个独立的访问点,它可以具有类似于 UDP 服务器的行为。这意味着无需直接连接到任何其他接入点。像软AP一样简单的UDP服务器。
我遵循了这些步骤:
- 我已将新固件上传到 NodeMCU。
- 我已经下载了 ESPlorer 以便更好地使用 NodeMCU。
- 我已经上传了下面的源代码。
- 我已经连接到桌面上的 NodeMCU 接入点。
- 我已经使用 Java UDP 客户端程序向 NodeMCU 发送了一些字符串。
- 我查看了 ESPlorer 上的消息。
- 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()
returns 一个 nil 对象。真的不知道
我很乐意提供任何建议。
非常感谢。
好的,既然你更新了问题,让我们重新开始吧。我应该在给你第一个提示之前打开我的大脑,对此感到抱歉。
UDP 是无连接的,因此,当然没有 s:on("connection")
。因此,您不能在套接字上注册回调,而是在服务器本身上注册。它在 the documentation 但很容易错过。
这应该让你继续:
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
b运行ch 的固件,并像这样从命令行测试
$ echo "foo" | nc -w1 -u 192.168.4.1 5000
echo: foo
ESPlorer 然后也正确地打印了 "received: foo"。
此行是无效的 Lua 代码。 connected
放错地方了。你不能只在函数调用后加上一个词。
print(wifi.ap.getip()) connected
我猜你打算做类似的事情
打印(wifi.ap.getip()..“连接”)
尽管我认为您应该在此处添加 som 错误处理,以防 wifi.ap.getip() 没有 return IP。
这里你还没有完成函数定义。您也没有完成 srv:on
通话
srv:on("receive", function(srv, pl)
print("Strings received")
srv:listen(port)
我假设你只是没有 copy/paste 完整的代码。
我正在使用带有升级固件的 NodeMCU(带有 ESP8266-E)。所有基本命令都运行良好,但有一个问题。
我想创建一个独立的访问点,它可以具有类似于 UDP 服务器的行为。这意味着无需直接连接到任何其他接入点。像软AP一样简单的UDP服务器。
我遵循了这些步骤:
- 我已将新固件上传到 NodeMCU。
- 我已经下载了 ESPlorer 以便更好地使用 NodeMCU。
- 我已经上传了下面的源代码。
- 我已经连接到桌面上的 NodeMCU 接入点。
- 我已经使用 Java UDP 客户端程序向 NodeMCU 发送了一些字符串。
- 我查看了 ESPlorer 上的消息。
- 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()
returns 一个 nil 对象。真的不知道
我很乐意提供任何建议。
非常感谢。
好的,既然你更新了问题,让我们重新开始吧。我应该在给你第一个提示之前打开我的大脑,对此感到抱歉。
UDP 是无连接的,因此,当然没有 s:on("connection")
。因此,您不能在套接字上注册回调,而是在服务器本身上注册。它在 the documentation 但很容易错过。
这应该让你继续:
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
b运行ch 的固件,并像这样从命令行测试
$ echo "foo" | nc -w1 -u 192.168.4.1 5000
echo: foo
ESPlorer 然后也正确地打印了 "received: foo"。
此行是无效的 Lua 代码。 connected
放错地方了。你不能只在函数调用后加上一个词。
print(wifi.ap.getip()) connected
我猜你打算做类似的事情 打印(wifi.ap.getip()..“连接”) 尽管我认为您应该在此处添加 som 错误处理,以防 wifi.ap.getip() 没有 return IP。
这里你还没有完成函数定义。您也没有完成 srv:on
通话
srv:on("receive", function(srv, pl)
print("Strings received")
srv:listen(port)
我假设你只是没有 copy/paste 完整的代码。