首页 文章

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

提问于
浏览
1

我正在使用带有升级固件的NodeMCU(带ESP8266-E) . 所有基本命令都能很好地工作,但有一个问题 .

我想创建一个独立的访问点,它可能具有类似UDP服务器的行为 . 这意味着没有与任何其他接入点的直接连接 . 一个简单的UDP服务器,如软AP .

我按照以下步骤操作:

  • 我已经向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() 返回一个nil对象 . 真的我不知道 .

我会很高兴任何建议 .

非常感谢你 .

2 回答

  • 2

    好的,让我们重新开始这个问题,因为你更新了问题 . 在我给你第一个提示之前我应该打开我的大脑,对此抱歉 .

    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 分支的固件运行此操作,并从命令行进行测试,如此

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

    ESPlorer然后也正确地打印了“收到:foo” .

  • 1

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

    print(wifi.ap.getip()) connected
    

    我想你打算做一些像print(wifi.ap.getip()..“connected”)虽然我认为你应该在这里添加som错误处理,以防wifi.ap.getip()不返回IP .

    在这里,您没有完成功能定义 . 你也没有完成 srv:on 电话

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

    我假设你没有复制/粘贴完整的代码 .

相关问题