2016-05-30 11 views
0

Ich habe den folgenden CodeAnschlussbuchse in NodeMCU Lua arbeitet als Snippet, aus nicht init.lua

conn = net.createConnection(net.TCP, 0) 
conn:on("sent", function(sck,c) 
    print("Sent") 
    sck:close() 
    end) 

conn:on("connection", function(sck,c) 
    print("Connected..") 
    sck:send("test") 
    end) 

conn:connect(9090, "192.168.1.89") 
print("Send data.") 

Dies funktioniert gut, wenn es als Schnipsel in esplorer laufen, IE Live-Interpreter ausführen. Ich sehe die Ausgabe "Verbunden .." und "Gesendet", und die Nachricht erscheint auf dem Server. Wenn es Teil der init.lua oder meiner mcu-temp.lua ist, sehe ich nicht einmal die Meldung "Connected ..".

Die Verbindung zum WIFI ist in Ordnung, und die Karte wird nicht zurückgesetzt zwischen dem Versuch es "live" und aus der Datei. Ich bin wirklich fest, warum es funktioniert in einer Weise und nicht in der anderen.

Antwort

1

Die Verbindung zum WIFI ist OK

ich ernsthaft daran zweifeln. Wenn Sie von ESPlorer starten, dann ja, aber nicht, wenn Sie das Gerät neu starten.

Das Verbinden mit einem AP dauert normalerweise ein paar Sekunden. Sie müssen warten, bis die Verbindung hergestellt ist, bis Sie mit der Startsequenz fortfahren können. Denken Sie daran: Bei NodeMCU sind die meisten Operationen asynchron und ereignisgesteuert, wifi.sta.connect() blockiert NICHT.

Hier ist eine Startsequenz, die ich ausgeliehen und angepasst habe, von https://cknodemcu.wordpress.com/.

SSID = <tbd> 
PASSWORD = <tbd> 

function startup() 
    local conn = net.createConnection(net.TCP, 0) 
    conn:on("sent", function(sck, c) 
     print("Sent") 
     sck:close() 
    end) 

    conn:on("connection", function(sck, c) 
     print("Connected..") 
     sck:send("test") 
    end) 

    conn:connect(9090, "192.168.1.89") 
    print("Sent data.") 
end 

print("setting up WiFi") 
wifi.setmode(wifi.STATION) 
wifi.sta.config(SSID,PASSWORD) 
wifi.sta.connect() 
tmr.alarm(1, 1000, 1, function() 
    if wifi.sta.getip() == nil then 
     print("IP unavaiable, Waiting...") 
    else 
     tmr.stop(1) 
     print("Config done, IP is "..wifi.sta.getip()) 
     print("You have 5 seconds to abort startup") 
     print("Waiting...") 
     tmr.alarm(0, 5000, 0, startup) 
    end 
end) 

Vor zwei Tagen beantwortete ich fast die gleiche Frage hier auf SO. Eine alternative Lösung finden Sie unter https://stackoverflow.com/a/37495955/131929.

+0

Das Init-Skript ist viel besser als das, das ich hatte, also verwende ich definitiv das. Obwohl es das Problem nicht gelöst hat. Ich habe 'nc -l 192.168.1.84 9090' auf dem Ziel-Host ausgeführt, sowie die ursprüngliche nodejs-Anwendung, die ich geschrieben habe, und ich bekomme die Verbindungsnachricht von den Socket-Ereignissen nicht. – Martin

+0

Ich entschuldige mich, es hat funktioniert! Firewall-Regeln nach dem Neustart der VM war schuld. – Martin