2016-12-27 73 views
0

我想將NodeMCU套接字客戶端連接到node.js套接字服務器。 我在NodeMCU中使用Lua編程語言。我爲客戶端嘗試了這個代碼,但它不起作用。使用Lua的NodeMCU套接字客戶端不連接

wifi.setmode(wifi.STATION) 
wifi.sta.config("SSID","Password") 
wifi.sta.connect() 
ip = wifi.sta.getip() 
print("your IP is "..ip) 

sk = net.createConnection(net.TCP, 0) 

sk:on("receive", function (sck,c) 
    print (c) 
end) 

sk:on("connection", function (sck,c) 
    print("connected") 
    sk:send("Helloooo...") 
end) 

sk:connect(3000,"192.168.1.4") 

node.js服務器代碼已測試並運行良好。

var app = require('http').createServer(); 
var io = require('socket.io')(app); 

io.on('connection', function(socket){ 
    console.log('someone is connected'); 
}); 

app.listen(3000); 

回答

0

您得到了NodeMCU fundamentals錯誤。 NodeMCU是異步和事件驅動的,即大多數呼叫是非阻塞的。

這意味着在發出wifi.sta.connect()(不會阻塞)之後,您需要等到設備獲得IP後再繼續。這是一個縮寫startup sequence from our docs

function startup() 
    -- do stuff here 
end 

print("Connecting to WiFi access point...") 
wifi.setmode(wifi.STATION) 
wifi.sta.config(SSID, PASSWORD) 
-- wifi.sta.connect() not necessary because config() uses auto-connect=true by default 
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, startup) 
    end 
end) 
相關問題