ESP8266 NodeMCU Lua“套接字客户端”到“Python服务器”连接不可能

时间:2016-12-29 21:01:26

标签: python-2.7 lua esp8266 nodemcu

我试图将NodeMCU Socket客户端程序连接到Python服务器程序,但我无法建立连接。

我测试了一个简单的Python客户端服务器代码并且运行良好。

Python服务器代码

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   print c.recv(1024)
   c.send('Thank you for connecting')
   c.close()                # Close the connection

Python客户端代码(我测试了上面的代码)

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))     
s.send('Hi i am aslam')
print s.recv(1024)
s.close                     # Close the socket when done     

输出服务器端是

Got connection from ('192.168.99.1', 65385)
Hi i am aslam

NodeMCU代码

--set wifi as station
print("Setting up WIFI...")
wifi.setmode(wifi.STATION)
--modify according your wireless router settings
wifi.sta.config("xxx", "xxx")
wifi.sta.connect()

function postThingSpeak()
  print("hi")
  srv = net.createConnection(net.TCP, 0)
  srv:on("receive", function(sck, c) print(c) end)
  srv:connect(12345, "192.168.0.104")
  srv:on("connection", function(sck, c)
    print("Wait for connection before sending.")
    sck:send("hi how r u")
  end)
end

tmr.alarm(1, 1000, 1, function()
  if wifi.sta.getip() == nil then
    print("Waiting for IP address...")
  else
    tmr.stop(1)
    print("WiFi connection established, IP address: " .. wifi.sta.getip())
    print("You have 3 seconds to abort")
    print("Waiting...")
    tmr.alarm(0, 3000, 0, postThingSpeak)
  end
end)

但是当我运行NodeMCU时,Python服务器中没有响应。

ESPlorer控制台中的输出类似于

Waiting for IP address...
Waiting for IP address...
Waiting for IP address...
Waiting for IP address...
Waiting for IP address...
Waiting for IP address...
WiFi connection established, IP address: 192.168.0.103
You have 3 seconds to abort
Waiting...
hi

我做错了什么或错过了一些步骤?

感谢您的指导。

1 个答案:

答案 0 :(得分:1)

在我第二次重新访问它之后,它终于点击了。我必须第一次过快地扫描你的Lua代码。

您需要在建立连接之前设置所有事件处理程序(srv:on。否则它们可能不会触发 - 取决于建立连接的速度。

srv = net.createConnection(net.TCP, 0)
srv:on("receive", function(sck, c) print(c) end)
srv:on("connection", function(sck)
  print("Wait for connection before sending.")
  sck:send("hi how r u")
end)
srv:connect(12345,"192.168.0.104")

example in our API documentation错误,但已经fixed in the dev branch