ESP8266 -- lua开发学习之路四 (串口学习)

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)   

--[[
使用定时器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)

猜你喜欢

转载自blog.csdn.net/dianzishi123/article/details/82585951