我有一個使用兩個計時器的NodeMCU Lua應用程序。每個計時器都會調用一個函數,該函數會導致向本地服務器發出HTTP請求。NodeMCU計時器意外停止
經過幾次迭代後,其中一個定時器停止,另一個定時器繼續。計時器停止之前的迭代次數似乎是隨機的。我已經多次運行測試腳本,並且定時器停止的點也不相同。注意:它並不總是與暫停的計時器相同。
下面是一些測試代碼,可靠地說明此問題:
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)
我的應用程序不會很快關火HTTP請求的測試代碼,但是當應用程序運行幾個小時同樣的結果最終發生(即其中一個定時器停止運行)。減少HTTP請求之間的時間會使錯誤更早發生。
有沒有人遇到過這個問題?有沒有人有任何想法如何解決這個問題? (不能夠可靠地發送連續的HTTP請求是這個應用程序的一個阻礙)。
您對回調函數的評論很有趣。我在Nodemcu中有一個情況,那裏有兩個http請求一個接一個地做,而對第二個請求的響應從未調用回調函數。在http調用之間插入一個1秒的延遲解決了這個問題。我想知道兩個獨立運行的定時器是否會產生類似的情況(兩個http請求靠近在一起)。我會做一些測試,看看是否會發生這樣的碰撞。 – Jonathan
@Jonathan參見https://github.com/nodemcu/nodemcu-firmware/issues/1258 –