博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
八,ESP8266 文件保存数据(基于Lua脚本语言)
阅读量:5795 次
发布时间:2019-06-18

本文共 6723 字,大约阅读时间需要 22 分钟。

应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情

前面几篇

用AT指令版本的

一,      发AT指令,,其实AT指令就是事先用SDK内部写好了

二,      这个呢是配合路由器实现远程,,其实可以买个域名,或者用云端

三,     这是做了一个用手机控制的WIFI小车

四,      Android TCP客户端

五,      Android TCP服务器

用LUA语言的,更灵活,功能更强

一         下载自己选择功能的固件,刷固件,写LUA的软件

二    http://www.cnblogs.com/yangfengwu/p/7520260.html     GPIO,串口,注意事项,空闲中断

三          SPI通信介绍,,STM32 SPI 从机

四          TCP服务器,单个连接

五          TCP服务器,多个客户端连接,CRC校验

六           TCP Client 断开自动重连,AD采集

七          UDP支持一路默认,3路动态连接,ssid 与 pwd 的读取

还缺一样....这篇...保存数据...这样的话就可以随意修改启动时工作在哪一种模式,哪一种通信,以及其余需要保存在模块内部的信息

就实现上位机软件的第一个功能,,修改启动模式

 

 自己的上位机按钮事件

private void button2_Click(object sender, EventArgs e)        {            byte[] sendbyte = new byte[6];            sendbyte[0] = (byte)'+';//2B            sendbyte[1] = (byte)'+';            sendbyte[2] = (byte)'M';//4D            sendbyte[3] = (byte)'D';//44            sendbyte[4] = (byte)'0';//0            if (radioButton5.Checked)            {                sendbyte[5] = (byte)'0';            }            else if (radioButton6.Checked)            {                sendbyte[5] = (byte)'1';            }            else if (radioButton7.Checked)            {                sendbyte[5] = (byte)'2';            }            if (radioButtonNetCon.Checked)            {                TcpSendDataMethod(sendbyte);            }            else if (radioButtonSerialCon.Checked)            {                SerialSend(sendbyte);            }        }

++MD00                 AP模式

++MD01                Station模式

++MD00                AP+Station模式

其实最后还有CRC16校验码

看文件操作

 

if  file.open("mode.lua", "w+") then                    file.writeline(string.sub(data,6,6))--MODE                    print("MODE="..string.sub(data,6,6))                    file.close()                else                    print("open mode.lua faild")                    end

 

 

注意

if  file.open("mode.lua", "w+") then    file.writeline("123")    file.flush()//连续写最好加上    file.writeline("456")    file.flush()    file.writeline("789")    file.close()else    print("open mode.lua faild")    end

像是这样  mode.lua文件里面会是这样

 

 那么读的时候

 

file.open("mode.lua", "r") then    s1= file.readline()    s2= file.readline()    s3= file.readline()    file.close()end

 

s1 ="123\r"

s2 ="456\r"

s3 ="789\r"

所以写进去一行3个但是读出来会多加一个换行符

 

 

if  file.open("mode.lua", "r") then    local Mode = file.readline()    if  Mode == nil then        Mode="2"    end    if  Mode:byte(1) == 48 then        print("Wifi MODE: SOFTAP")        wifi.setmode(wifi.SOFTAP)    elseif  Mode:byte(1) == 49 then            print("Wifi MODE: STATION")            wifi.setmode(wifi.STATION)      else        print("Wifi MODE: STATIONAP")        wifi.setmode(wifi.STATIONAP)             end    file.close()end

 

 直接上源码吧

init.lua

gpio.mode(4,gpio.OUTPUT)gpio.mode(2,gpio.OUTPUT)gpio.write(4,1)if  adc.force_init_mode(adc.INIT_ADC) then    node.restart()    returnendtmr.alarm(0, 1000, 1, function()    gpio.write(4,1-gpio.read(4))end)tmr.alarm(1, 5000, 0, function()    dofile("file.lua")    dofile("UDP.lua")end)

UDP.lua

if  file.open("mode.lua", "r") then    local Mode = file.readline()    if  Mode == nil then        Mode="2"    end    if  Mode:byte(1) == 48 then        print("Wifi MODE: SOFTAP")        wifi.setmode(wifi.SOFTAP)    elseif  Mode:byte(1) == 49 then            print("Wifi MODE: STATION")            wifi.setmode(wifi.STATION)      else        print("Wifi MODE: STATIONAP")        wifi.setmode(wifi.STATIONAP)             end    file.close()endcfg={}cfg = wifi.ap.getconfig(true)if  cfg.ssid == nil then    cfg.ssid="Hellow8266"    cfg.pwd="11223344"endprint("APssid: "..cfg.ssid)if  cfg.pwd == nil then    print("APpwd: nil")else    print("APpwd: "..cfg.pwd)end cfg.save=truewifi.ap.config(cfg)apcfg={}apcfg = wifi.sta.getconfig(true)if  apcfg.ssid == nil then    apcfg.ssid="qqqqq"    apcfg.pwd="11223344"endprint("APssid: "..apcfg.ssid)if  apcfg.pwd == nil then    print("Stationpwd: nil")else    print("Stationpwd: "..apcfg.pwd)end apcfg.save=truewifi.sta.config(apcfg)wifi.sta.autoconnect(1)ConnectIP = "192.168.1.103"ConnectPort = 8080UdpSocket = net.createUDPSocket()   UdpSocket:listen(ConnectPort)UdpSocketTable={}UdpIPTable={}UdpPortTable={}UdpConnectCnt = 0UdpCanConnect = 0UdpSocket:on("receive", function(socket, data, port, ip)    UdpCanConnect = 1    for i=0,2 do        if  UdpIPTable[i] == ip and UdpPortTable[i] == port  then            UdpCanConnect = 0        end    end    if  ip == ConnectIP and port == ConnectPort  then        UdpCanConnect = 0    end    if  UdpCanConnect == 1 then        UdpSocketTable[UdpConnectCnt] = socket        UdpIPTable[UdpConnectCnt] = ip         UdpPortTable[UdpConnectCnt] = port        print("\r\n"..UdpConnectCnt.."-Connect")        UdpConnectCnt = UdpConnectCnt + 1    end        if  UdpConnectCnt == 3 then        UdpConnectCnt = 0    end    uart.write(0,data)end)UartReadCnt=0UartReadCntCopy=0UartReadData=""UartReadDataCopy=""uart.on("data",0,function(data)     UartReadCnt = UartReadCnt + 1    UartReadData = UartReadData..data        end, 0)tmr.alarm(2, 5, 1, function()    if  UartReadCnt ~=0 then        if  UartReadCnt == UartReadCntCopy  then            UartReadCnt = 0            UartReadCntCopy = 0            UartReadDataCopy = UartReadData            UartReadData=""            Config(UartReadDataCopy)            NetSend(UartReadDataCopy)        else            UartReadCntCopy = UartReadCnt          end             endend)function NetSend(data)    if  UdpSocket ~= nil then        UdpSocket:send(ConnectPort,ConnectIP,data)    end        for i=0,2 do        if  UdpSocketTable[i] ~= nil then            UdpSocketTable[i]:send(UdpPortTable[i],UdpIPTable[i],data)         end    endendprintip = 0wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)    printip = 0end)wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)   if printip == 0 then      print("+IP"..T.IP)   end   printip = 1end)

file.lua

就是接收串口的数据函数,检测CRC对不对,,然后把数据写进mode.lua,,,对了这样设置了,,内部会自动生成一个mode.lua,,不用自己弄

function Config(data)     local RevLen = string.len (data)    local crc = ow.crc16(string.sub(data,1,RevLen-2))        local recrc = data:byte(RevLen)    recrc = recrc*256    recrc = recrc + data:byte(RevLen-1)    if  crc == recrc then         --[[8266 Mode ]]        if  RevLen == 8  then            if  string.sub(data,1,5) == "++MD0" then----Mode                if  file.open("mode.lua", "w+") then                    file.writeline(string.sub(data,6,6))--MODE                    print("MODE="..string.sub(data,6,6))                    file.close()                else                    print("open mode.lua faild")                    end            end--[[8266 Mode ]]        end            endend

 

其实也没有说的了,串口用空闲中断接收的,前面说了,,,,剩下的主要是自己看着API文档自己测试测试哈

现在把程序下进去用上位机试一试修改模式

 

 复位重启一下

 

 

 

 

 

 

 

 

 

 对了我把UDP的修改了一个地方,,,写的太着急写错了,

 

 

 这样才是判断是新的连接,而且不和默认的一样才执行后面的

 

完了一个大的心思

你可能感兴趣的文章
SQL Server数据库概述
查看>>
Linux 目录结构及内容详解
查看>>
startx命令--Linux命令应用大词典729个命令解读
查看>>
华为3026c交换机配置tftp备份命令
查看>>
Oracle命令导入dmp文件
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
Http、TCP/IP协议与Socket之间的区别(转载)
查看>>
解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790
查看>>
.net excel利用NPOI导入oracle
查看>>
vrpie在Visio Studio 中无法调试的问题
查看>>
第六课:数据库的基本工具
查看>>
关于二叉树重构的思索
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
skynet实践(8)-接入websocket
查看>>
系统版本判断
查看>>
关于Css选择器优先级
查看>>
My97DatePicker 日历插件
查看>>
0603 学术诚信与职业道德
查看>>
小点心家族第3位成员——楼层定位效果
查看>>
Knockout.Js官网学习(enable绑定、disable绑定)
查看>>