UartReceCnt = 0 UartReceTempCnt = 0 UartReceData = "" TimerMs:register(1, tmr.ALARM_AUTO, function() --TimerMs:register(10,1,function() if UartReceCnt ~= 0 then if UartReceTempCnt == UartReceCnt then UartReceCnt = 0 UartReceTempCnt = 0 --[[if UartReceData == "open" then print("open") elseif UartReceData == "close" then gpio.write(4,1) print("close") end--]] myMQTT:publish(topic1,UartReceData, 0, 0, function(client) end) --uart.write(0,UartReceData) UartReceData = "" else UartReceTempCnt = UartReceCnt end end end) --TimerMs:start() uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1) uart.on("data",0,function(data) UartReceData = UartReceData..data UartReceCnt = UartReceCnt + 1 end,0)
提醒
按照上面的写法以后,便不能下载程序,所有的指令也不能运行
这样可以防止别人点击 Reload 加载出来里面的程序
用户需要重新刷空固件
然后再刷LUA开发的固件
然后再进行开发
调试编程的时候为避免这种情况发生
建议的方式:
处理串口的数据另外用一个文件处理
init 延时加载那个文件
local T = tmr.create() T:register(3000, 0, function() if file.open("uart.lua", "r") then file.close(); dofile("uart.lua") end end) T:start();
这样,每次复位模块的时候,都有3S的时间去操作清除文件
然后再进行下载调试
参考:https://www.cnblogs.com/yangfengwu/p/12038932.html