找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4283|回复: 6
收起左侧

制作自己的wifi开关 ESP8266 lua数据存储

[复制链接]
ID:81424 发表于 2018-11-6 23:12 | 显示全部楼层 |阅读模式
本帖最后由 沙漠之痕 于 2018-11-9 13:31 编辑

1. 上电延时2秒加载file.lua文件,file.lua文件中写入数据到mode.lua文件,再延时5秒读出数据通过串口打印数据
操作流程:
(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. 通过串口发送指令控制继电器, 掉电记忆继电器状态,再次上电恢复继电器状态。
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.png
3.png

用到的函数介绍:
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


lua源码数据储存.zip (830 Bytes, 下载次数: 17)
回复

使用道具 举报

ID:81424 发表于 2018-11-9 13:07 | 显示全部楼层
上电时判断继电器状态重新优化.....更新
回复

使用道具 举报

ID:81424 发表于 2018-11-9 13:31 | 显示全部楼层
添加演示视频
回复

使用道具 举报

ID:399179 发表于 2018-11-9 18:56 来自手机 | 显示全部楼层
这个可以做成用手机APP控制电器的设备吗?
回复

使用道具 举报

ID:81424 发表于 2018-11-12 08:37 | 显示全部楼层
回复

使用道具 举报

ID:81424 发表于 2018-11-12 08:41 | 显示全部楼层
快乐眼泪 发表于 2018-11-9 18:56
这个可以做成用手机APP控制电器的设备吗?

可以啊,把其他的几节连起来,就会知道 可以做成TCP服务器的模式
回复

使用道具 举报

ID:446530 发表于 2018-12-14 20:26 | 显示全部楼层
我是小港湾,方便告诉你的联系方式吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表