首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESP8266,NodeMCU,软AP - UDP服务器类软AP,独立接入点

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

Stack Overflow用户
提问于 2016-04-21 11:35:46
回答 2查看 3.5K关注 0票数 2

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

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

我遵循了以下步骤:

  1. 我已经上传了一个新的固件到NodeMCU。
  2. 为了更好地使用ESPlorer,我下载了NodeMCU。
  3. 我已经上传了下面的源代码。
  4. 我已经连接到桌面上的NodeMCU接入点。
  5. 我使用Java客户端程序向NodeMCU发送了一些字符串。
  6. 我看过ESPlorer上的消息。
  7. NodeMCU没有收到任何这样的字符串。

--

代码语言:javascript
复制
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()返回一个零对象。真的我不知道。

如果有任何建议,我会很高兴的。

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-21 12:42:55

好的,让我们重新启动它,因为您更新了这个问题。我应该在给你第一个提示之前先打开我的大脑,抱歉。

UDP是无连接的,因此,当然没有s:on("connection")。因此,您不能在套接字上注册回调,而是在服务器本身上注册回调。它在文献资料中,但很容易被忽略。

这应该能让你:

代码语言:javascript
复制
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分支的固件上运行了这个程序,并在命令行中进行了如下测试

代码语言:javascript
复制
$ echo "foo" | nc -w1 -u 192.168.4.1 5000
echo: foo

ESPlorer还正确地打印了“接收: foo”。

票数 3
EN

Stack Overflow用户

发布于 2016-04-21 13:46:41

这一行是无效的Lua代码。connected来错地方了。不能只在函数调用之后加上一个单词。

代码语言:javascript
复制
print(wifi.ap.getip()) connected

我想你打算做一些类似于打印(wifi.ap.getip())的事情。虽然我认为您应该在这里添加som错误处理,以防wifi.ap.getip()不返回IP。

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

代码语言:javascript
复制
srv:on("receive", function(srv, pl)
print("Strings received")
srv:listen(port)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36768381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档