2016-11-14 3 views
-1

Ich arbeite mit dem ESP8266 WLAN-Modul Programmierung in LUA mit NodeMCU. Ich konnte mich von einer iPhone App mit dem TCP-Server verbinden, der vom WLAN-Modul erstellt wurde, um 3 Floats zu senden. Ich parse die riesige Saite in 3 Saiten und sende sie mit uart an Arduino. Es funktioniert gut, aber nach etwa 10 Eingaben stürzt es/friert ab. Ich brauche den konstanten Datenfluss, um weiter zu kommen, aber ich kann es nicht zuverlässig machen. Ich habe nach jeder Zeile gedruckt, um zu verfolgen, was tatsächlich passiert, und selbst danach bin ich immer noch nicht sicher, was vor sich geht.TCP-Verbindung stürzt nach dem Lesen nur ein paar Strings

-Code `

print("11\n") 
wifi.setmode(wifi.STATION) 
print("22\n") 
wifi.sta.config("WDTS03","Walker14!") 
print("33\n") 
elWiFi =(wifi.sta.getip()) 
if elWiFi ~= nil then 
    print(wifi.sta.getip()) 
end 
print("44\n") 
if srv~=nil then 
    print("444\n") 
    srv:close() 
    print("555 \n") 
end 

print("Create server \n") 
srv=net.createServer(net.TCP) 
print("1\n") 
if srv ~= nil then 
    print("srv !=nil \n") 
    srv:listen(6969,function(conn) 
    print("listening \n") 
     if conn ~= nil then 
     print("incoming\n") 

     conn:on("receive",function(conn,numbers) 
     print("2\n") 
     print(#numbers) 
     print("chekcing for nil \n") 
     if numbers ~= nil then 
      print("3\n") 
      p = string.find(numbers, "x=") 
      print("4\n") 
      q = string.find(numbers, "&y") 
      print("5\n") 
      if p ~= nill then 
       print("6\n") 
       if q ~= nil then 
        print("7\n") 
        x = (string.sub(numbers,p+2, q-1)) 
        print("x=" .. x) 
       end 
      end --p ~= nill 
      print("8\n") 
      p = string.find(numbers, "y=") 
      print("9\n") 
      q = string.find(numbers, "&z") 
      print("10\n") 
      if p ~= nill then 
       print("11\n") 
       if q ~= nil then 
       print("12\n") 
        y = (string.sub(numbers,p+2, q-1)) 
        print("y=" .. y) 
       end 
      end --p ~= nill 
      print("13\n") 
      p = string.find(numbers, "z=") 
      print("14\n") 
      q = string.find(numbers, " H") 
      print("15\n") 
      if p ~= nill then 
       print("16\n") 
       if q ~= nil then 
        print("17\n") 
        z = (string.sub(numbers,p+2, q-1)) 
        print("z=" .. z) 
       end 
      end-- p ~= nill 
      print("18\n") 

     end --numbers ~= nil 
     print("54\n") 

     --conn:send("test\n") 

     end) 
     print("55 \n") 
     end 
     print("66 \n") 
    end) 
    print("77\n") 

end 
print("666\n")` 

und ich bekomme die folgende Ausgabe

11 

22 

33 

44 

Create server 

1 

srv !=nil 

77 

666 

> listening 

incoming 

55 

66 

listening 

incoming 

55 

66 

listening 

incoming 

55 

66 

listening 

incoming 

55 

66 

2 

338 
chekcing for nil 

3 

4 

5 

6 

7 

x=0.1722259521484375 
8 

9 

10 

11 

12 

y=-0.7733306884765625 
13 

14 

15 

16 

17 

z=-0.5716094970703125 
18 

54 

2 

337 
chekcing for nil 

3 

4 

5 

6 

7 

. 
.--repeats a few times 
. 

y=-0.005340576171875 
13 

14 

15 

16 

17 

z=-0.9838409423828125 
18 

54 

PANIC: unprotected error in call to Lua API (attempt to call a nil value) 
�l� �=+���T2n��� 

NodeMCU 0.9.6 build 20150704 powered by Lua 5.1.4 
11 

22` 

Es ist auf dem nicht "conn: ein" Argument für "srv: hören" nach ein paar Mal

Danke für die Hilfe und sorry, wenn die Formatierung durcheinander ist. Erste Mal

Antwort

1

Zu lange für einen Kommentar, sorry.

PANIC: ungeschützte Fehler im Aufruf von Lua API (Versuch, einen Null-Wert zu nennen)

Fest welchem ​​Wert war null/null zu erzählen. Erstellen Sie eine Minimal, Complete, and Verifiable Example (MCVE), um die Menge an Code zu reduzieren, die für die Analyse benötigt wird.

Das folgende Snippet führt möglicherweise aufgrund von geschlossenen Up-Werten zu einem nicht ausreichenden Arbeitsspeicher. Jede Ihrer Callback-Funktionen sollte eine eigene Kopie der übergebenen Socket-Instanz verwenden, die sich auf die einer Wrapping-Callback-Funktion bezieht. Die dritte Zeile sollte die Variable NICHT erneut verwenden, sondern eine mit einem neuen Namen definieren. Weitere Informationen finden Sie unter https://stackoverflow.com/a/37379426/131929.

srv:listen(6969,function(conn) 
    if conn ~= nil then 
    conn:on("receive",function(conn,numbers) 

NodeMCU 0.9.6 build 20150704

Sie die alten 0.9.x Binärdateien nicht verwenden, sind sie veraltet und viele Bugs enthalten. http://nodemcu.readthedocs.io/en/latest/en/#getting-started hilft Ihnen, mit einer neuen Firmware zu beginnen.

Verwandte Themen