如何在NodeMCU中为ESP8266制作双向TCP中继

我不确定NodeMCU能否实现此功能,我想在连接到相同网络的两个ESP8266设备上打开TCP端口,从任一设备发送的数据都会到达另一设备。 我尝试过net.createServernet.createConnection,但似乎都没有完成任务,我想是net.createServer仅适用于浏览器端。

下面是一个仅使用一个设备的示例,仅用于测试能否从putty发送数据,但我没有输出。

注意:在启动服务器之前等待wifi.sta.status() == 5并没有任何区别。

   wifi.setmode(wifi.STATION)
   wifi.sta.config(ssid,pwd)
   wifi.sta.connect()
   wifi.sta.setip({ip=ip,netmask="255.255.255.0",gateway=gateway})

   srv=net.createServer(net.TCP)
   srv:listen(port,function(conn)
     conn:on("receive", function(client,request)
      print(request) -- ! never happens
     end)
   end)
点赞
用户131929
用户131929

这绝对能工作。我们刚刚在https://stackoverflow.com/a/36769999/131929 上有非常类似的东西。

server.lua

-- 建立AP连接
...

srv=net.createServer(net.TCP)
srv:listen(5555, function(c)
  c:on("receive", function(sck, data)
    print("received: " .. data)
    sck:send("echo: " .. data)
  end)
end)

** client.lua **

wifi.setmode(wifi.STATION)
wifi.sta.config("test", "password")
wifi.sta.setip({ip="192.168.0.199", netmask="255.255.255.0", gateway="192.168.0.1"})

srv = net.createConnection(net.TCP, 0)
srv:on("receive", function(sck, data) print("received: " .. data) end)
srv:on("connection", function(sck)
  sck:send("foo")
end)
srv:connect(5555,"192.168.56")

测试

我首先启动了服务器,然后从命令行发送TCP数据

$ echo "foo" | nc -w1 192.168.0.56 5555
echo: foo

好的,第一次测试成功。然后我在同一个子网的第二个ESP8266上启动了客户端。两个设备此时都连接着它们各自的 ESPlorer。服务器报告说

收到:foo

而客户端报告说

收到:echo: foo

确保在http://nodemcu.readthedocs.org/en/dev/en/modules/net/的API文档中查找此简单测试中使用的函数。

2016-04-26 19:50:21