电子产品世界 » 论坛首页 » 嵌入式开发 » ARM » 制作自己的wifi开关 ESP8266 lua开发写文件记忆继电器状态 断电上

共1条 1/1 1 跳转至

制作自己的wifi开关 ESP8266 lua开发写文件记忆继电器状态 断电上电恢复

菜鸟
2018-11-09 22:04:11    评分

贴ESP8266控制继电器的原理图

0.png

  1. 首先测试一下ESP8266使用lua开发读写数据

上电延时2秒加载file.lua文件,file.lua文件中写入数据到mode.lua文件,再延时5秒读出数据通过串口打印数据

  1. 操作流程:

    (1)手写创建打开一个文件file.open("mode.lua", "w+")(写方式打开)

    (2)向文件中写入数据file.writeline()

    (3)读取文件并打印内容

    (4)关闭文件

Init.lua文件:

tmr.alarm(0,2000,0,function()

    dofile("file.lua")

end)

init.lua文件结束

file.lua文件:

 

file.lua文件结束

if  file.open("mode.lua", "w+") then

    file.writeline("abc")

    file.flush()

    file.writeline("222")

    file.flush()

    file.writeline("666")

    file.close()

else

    print("open mode.lua faild")    

end

tmr.alarm(1,5000,0,function()

    if file.open("mode.lua", "r") then

        s1= file.readline()

        print(s1)

        s1= file.readline()

        print(s1)

        s1= file.readline()

        print(s1)

 

        file.close()

    end

end)

file.lua文件结束

1.png





2. 通过测试可以看出写文件后在读取会在末尾加回车换行符

下面开始保存继电器状态的程序编写, 使用串口发送"open"开继电器; 发送"close"关继电器;  不过最好不要使用lua开发工具自带的串口助手, 因为它发送数据默认在末尾添加回车换行符;

init.lua文件

RELAY_Stat = ""

RELAY_Pin = 1

gpio.mode(RELAY_Pin, gpio.OUTPUT)

if file.open("mode.lua", "r") then

     RELAY_Stat = file.readline()

     print(RELAY_Stat)

     file.close()

end

if string.find(RELAY_Stat,"RELAY=1",1) then

    gpio.write(RELAY_Pin,1)

elseif string.find(RELAY_Stat,"RELAY=0",1) then

    gpio.write(RELAY_Pin,0)

end

tmr.alarm(0,4000,0,function()

    dofile("file.lua")

end)

init.lua文件结束

 

file.lua文件:

UartReceCnt = 0        

UartReceTempCnt = 0    

UartReceData = ""    

uart.on("data",0,function(data)

            UartReceData = UartReceData..data

            UartReceCnt = UartReceCnt + 1     

end,0)   

tmr.alarm(1,10,1,function()

    if UartReceCnt ~= 0 then

        if UartReceTempCnt == UartReceCnt then  

            UartReceCnt = 0

            UartReceTempCnt = 0

            if UartReceData == "open" then  

                gpio.write(RELAY_Pin,1)

                if  file.open("mode.lua", "w+") then

                    file.writeline("RELAY=1")

                    file.flush()

                else

                    print("open mode.lua faild")

                end

                file.close()

            elseif UartReceData == "close" then

                gpio.write(RELAY_Pin,0)  

                if  file.open("mode.lua", "w+") then

                    file.writeline("RELAY=0")

                    file.flush()

                else

                    print("open mode.lua faild")

                end

                 file.close()

            elseif UartReceData == "rest" then

                node.restart()

            end

             uart.write(0,UartReceData)

             UartReceData = ""  

             UartReceCnt = 0

        else

            UartReceTempCnt = UartReceCnt  

        end

     end

end)

file.lua文件

2.png3.png3.png

4.png

通过指令先开继电器, 然后通过按下复位按键  松开后 可以看到继电器又吸合了

演示视频:https://v.youku.com/v_show/id_XMzkxMTAyOTI0MA==.html?x&sharefrom=android&sharekey=c9e039f4aa34691fa4cca95cad2da02e2


用到的函数简单介绍:

1. file.open(filename, mode)  打开文件以进行访问,可能会创建它(对于写入模式)

参数: fliename 要打开的文件

mode:  r 读模式(默认)

w 写模式

a 附加模式

r+ 更新模式,保留所有先前的数据

w+ 更新模式,删除所有先前的数据

a+ 追加更新模式,保留以前的数据,只允许在文件末尾写入

返回:文件对象,如果文件打开确定。nil如果文件未打开或不存在(读取模式)

2. file.writeline(string)  将字符串写入打开的文件,并在末尾附加'\ n'

参数: string 要写入文件的内容

返回:true如果写得好,nil就出错了

3. file.readline()  从打开的文件中读取下一行。行被定义为以EOL'\ n')字节结尾的零个或多个字节。如果下一行超过1024,则此函数仅返回前1024个字节。

参数:

返回:文件内容以字符串形式逐行显示,包括EOL'\ n')。nilEOF时返回

4. file.close()   关闭打开的文件(如果有)。

参数

返回: nil

5. file.flush()刷新对文件系统的任何挂起写入,确保重启时不会丢失任何数据

参数: 

返回:  nil

 

更多资料参考:https://www.cnblogs.com/yangfengwu/category/1099910.html


交流QQ群:607064330




关键词: esp8266 wifi开关 记忆断电前继电器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]