八,ESP8266 文件保存数据(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7533845.html
应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情
前面几篇
用AT指令版本的
一, http://www.cnblogs.com/yangfengwu/p/5205570.html 发AT指令,,其实AT指令就是事先用SDK内部写好了
二, http://www.cnblogs.com/yangfengwu/p/5295632.html 这个呢是配合路由器实现远程,,其实可以买个域名,或者用云端
三, http://www.cnblogs.com/yangfengwu/p/5220919.html 这是做了一个用手机控制的WIFI小车
四, http://www.cnblogs.com/yangfengwu/p/5212570.html Android TCP客户端
五, http://www.cnblogs.com/yangfengwu/p/5294921.html Android TCP服务器
用LUA语言的,更灵活,功能更强
一 http://www.cnblogs.com/yangfengwu/p/7514336.html 下载自己选择功能的固件,刷固件,写LUA的软件
二 http://www.cnblogs.com/yangfengwu/p/7520260.html GPIO,串口,注意事项,空闲中断
三 http://www.cnblogs.com/yangfengwu/p/7524297.html SPI通信介绍,,STM32 SPI 从机
四 http://www.cnblogs.com/yangfengwu/p/7524326.html TCP服务器,单个连接
五 http://www.cnblogs.com/yangfengwu/p/7531730.html TCP服务器,多个客户端连接,CRC校验
六 http://www.cnblogs.com/yangfengwu/p/7533302.html TCP Client 断开自动重连,AD采集
七 http://www.cnblogs.com/yangfengwu/p/7533845.html UDP支持一路默认,3路动态连接,ssid 与 pwd 的读取
还缺一样....这篇...保存数据...这样的话就可以随意修改启动时工作在哪一种模式,哪一种通信,以及其余需要保存在模块内部的信息
就实现上位机软件的第一个功能,,修改启动模式
自己的上位机按钮事件
- private void button2_Click(object sender, EventArgs e)
- {
- byte[] sendbyte = new byte[];
- sendbyte[] = (byte)'+';//2B
- sendbyte[] = (byte)'+';
- sendbyte[] = (byte)'M';//4D
- sendbyte[] = (byte)'D';//
- sendbyte[] = (byte)'';//
- if (radioButton5.Checked)
- {
- sendbyte[] = (byte)'';
- }
- else if (radioButton6.Checked)
- {
- sendbyte[] = (byte)'';
- }
- else if (radioButton7.Checked)
- {
- sendbyte[] = (byte)'';
- }
- 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,,))--MODE
- print("MODE="..string.sub(data,,))
- file.close()
- else
- print("open mode.lua faild")
- end
注意
- if file.open("mode.lua", "w+") then
- file.writeline("")
- file.flush()//连续写最好加上
- file.writeline("")
- file.flush()
- file.writeline("")
- 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=""
- end
- if Mode:byte() == then
- print("Wifi MODE: SOFTAP")
- wifi.setmode(wifi.SOFTAP)
- elseif Mode:byte() == 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(,gpio.OUTPUT)
- gpio.mode(,gpio.OUTPUT)
- gpio.write(,)
- if adc.force_init_mode(adc.INIT_ADC) then
- node.restart()
- return
- end
- tmr.alarm(, , , function()
- gpio.write(,-gpio.read())
- end)
- tmr.alarm(, , , 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=""
- end
- if Mode:byte() == then
- print("Wifi MODE: SOFTAP")
- wifi.setmode(wifi.SOFTAP)
- elseif Mode:byte() == then
- print("Wifi MODE: STATION")
- wifi.setmode(wifi.STATION)
- else
- print("Wifi MODE: STATIONAP")
- wifi.setmode(wifi.STATIONAP)
- end
- file.close()
- end
- cfg={}
- cfg = wifi.ap.getconfig(true)
- if cfg.ssid == nil then
- cfg.ssid="Hellow8266"
- cfg.pwd=""
- end
- print("APssid: "..cfg.ssid)
- if cfg.pwd == nil then
- print("APpwd: nil")
- else
- print("APpwd: "..cfg.pwd)
- end
- cfg.save=true
- wifi.ap.config(cfg)
- apcfg={}
- apcfg = wifi.sta.getconfig(true)
- if apcfg.ssid == nil then
- apcfg.ssid="qqqqq"
- apcfg.pwd=""
- end
- print("APssid: "..apcfg.ssid)
- if apcfg.pwd == nil then
- print("Stationpwd: nil")
- else
- print("Stationpwd: "..apcfg.pwd)
- end
- apcfg.save=true
- wifi.sta.config(apcfg)
- wifi.sta.autoconnect()
- ConnectIP = "192.168.1.103"
- ConnectPort =
- UdpSocket = net.createUDPSocket()
- UdpSocket:listen(ConnectPort)
- UdpSocketTable={}
- UdpIPTable={}
- UdpPortTable={}
- UdpConnectCnt =
- UdpCanConnect =
- UdpSocket:on("receive", function(socket, data, port, ip)
- UdpCanConnect =
- for i=, do
- if UdpIPTable[i] == ip and UdpPortTable[i] == port then
- UdpCanConnect =
- end
- end
- if ip == ConnectIP and port == ConnectPort then
- UdpCanConnect =
- end
- if UdpCanConnect == then
- UdpSocketTable[UdpConnectCnt] = socket
- UdpIPTable[UdpConnectCnt] = ip
- UdpPortTable[UdpConnectCnt] = port
- print("\r\n"..UdpConnectCnt.."-Connect")
- UdpConnectCnt = UdpConnectCnt +
- end
- if UdpConnectCnt == then
- UdpConnectCnt =
- end
- uart.write(,data)
- end)
- UartReadCnt=
- UartReadCntCopy=
- UartReadData=""
- UartReadDataCopy=""
- uart.on("data",,function(data)
- UartReadCnt = UartReadCnt +
- UartReadData = UartReadData..data
- end, )
- tmr.alarm(, , , function()
- if UartReadCnt ~= then
- if UartReadCnt == UartReadCntCopy then
- UartReadCnt =
- UartReadCntCopy =
- UartReadDataCopy = UartReadData
- UartReadData=""
- Config(UartReadDataCopy)
- NetSend(UartReadDataCopy)
- else
- UartReadCntCopy = UartReadCnt
- end
- end
- end)
- function NetSend(data)
- if UdpSocket ~= nil then
- UdpSocket:send(ConnectPort,ConnectIP,data)
- end
- for i=, do
- if UdpSocketTable[i] ~= nil then
- UdpSocketTable[i]:send(UdpPortTable[i],UdpIPTable[i],data)
- end
- end
- end
- printip =
- wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
- printip =
- end)
- wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
- if printip == then
- print("+IP"..T.IP)
- end
- printip =
- end)
file.lua
就是接收串口的数据函数,检测CRC对不对,,然后把数据写进mode.lua,,,对了这样设置了,,内部会自动生成一个mode.lua,,不用自己弄
- function Config(data)
- local RevLen = string.len (data)
- local crc = ow.crc16(string.sub(data,,RevLen-))
- local recrc = data:byte(RevLen)
- recrc = recrc*
- recrc = recrc + data:byte(RevLen-)
- if crc == recrc then
- --[[ Mode ]]
- if RevLen == then
- if string.sub(data,,) == "++MD0" then----Mode
- if file.open("mode.lua", "w+") then
- file.writeline(string.sub(data,,))--MODE
- print("MODE="..string.sub(data,,))
- file.close()
- else
- print("open mode.lua faild")
- end
- end--[[ Mode ]]
- end
- end
- end
其实也没有说的了,串口用空闲中断接收的,前面说了,,,,剩下的主要是自己看着API文档自己测试测试哈
现在把程序下进去用上位机试一试修改模式
复位重启一下
对了我把UDP的修改了一个地方,,,写的太着急写错了,
这样才是判断是新的连接,而且不和默认的一样才执行后面的
完了一个大的心思
https://www.cnblogs.com/yangfengwu/p/9749008.html
八,ESP8266 文件保存数据(基于Lua脚本语言)的更多相关文章
- ESP8266使用详解--基于Lua脚本语言
这些天,,,,今天终于看到了希望,,,天道酬勤 先说实现的功能...让ESP8266连接无线网,然后让它建立服务器,,我的客户端连接上以后,发给客户端发数据模块打印到串口,,往ESP8266串口里发数 ...
- 八,ESP8266 文件保存数据
应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情 前面几篇 用AT指令版本的 一, http://www.c ...
- 一,ESP8266下载和刷固件(基于Lua脚本语言)
用自己的小板测试...... 安排上呢 一, ESP8266下载和刷固件(Lua开发----体验一下lua开发的魅力所在) 二, 控制一个灯亮灭 三, TCP服务器 四, TCP客户端 五, UDP ...
- 二,ESP8266 GPIO和SPI和定时器和串口(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7514336.html 我们写lua用这个软件 如果点击的时候提示安装,,安装就行,,如果没有提示呢可以,按照下面链接的提示 ...
- 四,ESP8266 TCP服务器(基于Lua脚本语言)
我要赶时间赶紧写完所有的内容....朋友的东西答应的还没做完呢!!!!!!!没想到又来了新的事情,,....... 配置模块作为TCP服务器然后呢咱们连接服务器发指令控制LED亮灭 控制的指令呢咱就配 ...
- 三,ESP8266 SPI(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7520260.html 重点是说SPI通信协议,,,, 不要害怕协议因为协议是人规定的,,刚好我也是人......规定的协议 ...
- 五,ESP8266 TCP服务器多连接(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7524326.html 一些时间去准备朋友的元器件了... 接着写,,争取今天写完所有的文章,,因为答应了朋友下周5之前要做 ...
- 六,ESP8266 TCP Client(基于Lua脚本语言)
今天不知道是不是让我姐挺失望.......很多时候都不知道自己努力的方向对不对,,以后能不能带给家人最美好的期盼...... Init.lua 没啥改变,,就改了一下加载Client.lua gpio ...
- 九,ESP8266 判断是断电上电(强制硬件复位)之后运行的内部程序还是内部软件复位之后运行的程序(基于Lua脚本语言)
现在我有一个需求,WIFI模块控制一个继电器,我要做的是如果内部程序跑乱了,造成了内部程序复位重启,那么控制继电器的状态不能改变 如果是设备断电了,然后又来电了,我需要的是继电器一定要是断开才好.不能 ...
随机推荐
- TCP 回顾
报文 状态 从wiki上搬运过来 重要参数 RTT(Round Trip Time) 即链路传输延时,从数据发送到达对端并受到对端ack的一次来回时间.由于TCP是依赖报文确认机制来实现传输的可靠性的 ...
- vue+webpack+vue-cli+WebStrom 项目搭建
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.安装 webpack 和vue-cli 模块: npm install webpack -g npm in ...
- nodejs 通过nginx后出现响应慢的解决方法
最近用了nodejs搭建服务器,然后用了nginx做了反向代理,项目开发需求,没办法.但是发现了经过代理之后发现网页请求变慢了,而且是不能忍的一分钟以上. 一开始,怀疑是在nodejs那边的问题,结果 ...
- 实现卡片效果【DIV+CSS3】
一.文字卡片效果 <html> <head> meta<charset="utf-8"> <title>文字卡片效果</tit ...
- Atitit.web的自动化操作与信息抓取 attilax总结
Atitit.web的自动化操作与信息抓取 attilax总结 1. Web操作自动化工具,可以简单的划分为2大派系: 1.录制回放 2.手工编写0 U' z; D! s2 d/ Q! ^1 2. 常 ...
- ES6 箭头函数下的this指向
在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...
- 稳聘App设计图分享
摘要||潜心学习,无限开源,我是鸟窝,一只憨厚的鸟,联系我加微信:jkxx123321 很早期就想筹划上线一款招聘类App,一拖再拖,先做还没有上线. 下面的设计原图,为我UI徒弟所做,在此,表示万分 ...
- maven 学习笔记--简介
1.什么是maven Maven是一个服务于基于java平台的项目构建.依赖管理和项目信息管理. 2:什么是构建,maven是个优秀构建工具? (1)构建(bulid):对代码的进行编译.运行单元测试 ...
- SQL Server 从2000复制数据到2008及以上版本的一种方法
1.通过Linked Servers 执行sql出现错误提示,无法执行复制数据操作. sql: insert into tb_User select from [**.**.*.**].DB.dbo. ...
- centos7 安装 jdk1.8
首先是Linux的不同版本的额系统自带的配置是不一样的,比如centos6上有的自带的jdk环境的话要装1.8的就要进行卸载或者马上进行更改 jdk是java程序依赖的环境 首先查看你的系统下是否有j ...