lua开发8266API手册:https://nodemcu.readthedocs.io/en/master/
ESP8266 在lua开发过程中本人理解的是通过事件接收和发送数据
感觉介绍的再多不如直接上程序
init.lua文件
gpio.mode(4,gpio.OUTPUT) --设置模块引脚2 为输出模式
gpio.write(4,1) -- 此引脚接LED高地平灭
print(uart.getconfig(0)) --获取串口0 当前配置 并打印
--[[
通过定时器2上电s后只加载一次uart.lua文件
通过3s后加载是方便在后面串口操作失误无法重新上传程序
这样通过这3s 复位后就可以Format文件后下载程序
]]
tmr.alarm(2,3000,0,function()
dofile("uart.lua")
end)
uart.lua文件
UartReceCnt = 0 --定义全局变量 串口接收计数
UartReceTempCnt = 0 --定义串口串口接收临时计数
UartReceData = "" --定义串口接收缓存
--[[
在串口接收事件中只需要把接收到的数据存到缓存中并记录接收数据的个数即可
]]
uart.on("data",0,function(data)
UartReceData = UartReceData..data --接收缓存
UartReceCnt = UartReceCnt + 1 --记录接收计数
end,0)--此处0 表示不进入lua的解释器
--[[
使用定时器1 监控模块串口接收的数据计数 当接收的数据超时时认为是另一帧数据
个人理解:定时器1 每10ms进入一次判断 串口接收计数与临时计数是否相等 ,不相等则把串口接收计数赋给临时计数
当临时计数与串口接收计数相等时, 则是接收数据超过10ms时间间隔 认为接收完成一帧数据
清零相应计数
波特率115200 即一秒接收115200bit 每bit的时间间隔为1/115200s(约8.7us)
]]
tmr.alarm(1,10,1,function()
if UartReceCnt ~= 0 then --当串口接收计数不为0时 则开始一帧的计数
if UartReceTempCnt == UartReceCnt then --当接收计数与临时计数相等时 认为一帧数据接收完成
UartReceCnt = 0
UartReceTempCnt = 0 --清空计数
if UartReceData == "open" then --判断数据控制LED
gpio.write(4,0)
elseif UartReceData == "close" then
gpio.write(4,1)
end
uart.write(0,UartReceData) --把接收到的数据通过串口在发送出去
UartReceData = "" --清空缓存
else
UartReceTempCnt = UartReceCnt 接收计数与临时计数不相等时说明正在接收中记录临时计数
end
end
end)