Ich habe eine NodeMCU Lua-Anwendung, die zwei Timer verwendet. Jeder Zeitgeber ruft eine Funktion auf, die bewirkt, dass eine HTTP-Anforderung an einen lokalen Server gesendet wird.NodeMCU Timer stoppt unerwartet
Nach einigen Iterationen wird einer der Timer gestoppt und der andere Timer wird fortgesetzt. Die Anzahl der Iterationen vor dem Stopp des Timers scheint zufällig zu sein. Ich habe das Testskript viele Male ausgeführt und der Punkt, an dem der Timer stoppt, ist nie derselbe. Hinweis: Es ist nicht immer der gleiche Timer, der anhält.
Hier finden Sie einige Test-Code, der dieses Problem zuverlässig demonstriert:
ctr1=0
ctr2=0
local function doCmdChk()
ctr1 = ctr1 + 1
http.get("http://192.168.2.38/ICmd.py?i=" .. ctr1 , nil,
function(rspCode, payload)
tmr.start(1)
end)
end
local function sendData()
ctr2 = ctr2 + 1
local msgBdy = '{"s":"' .. ctr2 .. '","i":"test23", "d":"heap='..node.heap()..'"}'
http.post("http://192.168.2.38/DeviceScan.py", "Content-Type: text/json\r\n", msgBdy,
function(rspCode, payload)
tmr.start(2)
end)
end
--mainline start:
tmr.alarm(1, 3000, tmr.ALARM_SEMI, doCmdChk)
tmr.alarm(2, 5000, tmr.ALARM_SEMI, sendData)
Meine Anwendung so schnell wie der Testcode der HTTP-Anfragen nicht abfeuern, aber wenn die Anwendung läuft für mehrere Stunden das gleiche Ergebnis tritt schließlich auf (dh einer der Timer hört auf zu laufen). Durch die Verkürzung der Zeit zwischen HTTP-Anfragen tritt der Fehler früher auf.
Ist jemand auf dieses Problem gestoßen? Hat jemand irgendwelche Ideen, wie Sie dieses Problem beheben können? (Die Möglichkeit, kontinuierliche HTTP-Anfragen nicht zuverlässig zu senden, ist ein Show-Stop für diese Anwendung).
Ihr Kommentar zur Callback-Funktion ist interessant. Ich hatte einen Fall in Nodemcu, wo 2 HTTP-Anfragen nacheinander gestellt wurden und die Antwort auf die zweite Anfrage niemals die Callback-Funktion aufgerufen hat. Durch das Einfügen einer Verzögerung von 1 Sekunde zwischen http-Aufrufen wurde dieses Problem behoben. Ich frage mich, ob die zwei Timer, die unabhängig voneinander arbeiten, eine ähnliche Situation erzeugen (in der zwei HTTP-Anfragen nahe beieinander liegen). Ich werde einige Tests durchführen, um zu sehen, ob eine solche Kollision auftritt. – Jonathan
@ Jonathan siehe https://github.com/nodemcu/nodemcu-firmware/issues/1258 –