八,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模块控制一个继电器,我要做的是如果内部程序跑乱了,造成了内部程序复位重启,那么控制继电器的状态不能改变 如果是设备断电了,然后又来电了,我需要的是继电器一定要是断开才好.不能 ...
随机推荐
- 记录搭建Odoo框架
一.获取 Odoo 源码 Odoo 是一个开源项目,我们可以轻松的在 Github 上找到它的源码.本次中使用的是 12.0 版本的 Odoo,所以在拉取代码时选择 12.0 的分支.确保拉取的速度, ...
- SuperSlide轮播插件滚动高度或宽度不对的问题解决
声明:本文由w3h5原创,转载请注明出处:<SuperSlide轮播插件滚动高度或宽度不对的问题解决> SuperSlide 是一款比较实用的轮播插件,网站上常用的“焦点图/幻灯片”“Ta ...
- onkeyup小练习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python 自定义线程池
"""思路1,将任务放在队列 1)创建队列:(初始化) 2)设置大小,线程池的最大容量 3)真实创建的线程 列表 4)空闲的线程数量 2,着手开始处理任务 1)创建线程 ...
- Android ConstraintLayout详解(from jianshu)
Android ConstraintLayout详解 https://www.jianshu.com/p/a8b49ff64cd3 1. 概述 在本篇文章中,你会学习到有关Constraint ...
- 第二篇 windows container 微软的原生容器
先上图,显示windows container的体积: 以下是我使用docker pull 命令下载后,又用命令保存到本地的,相对于linux container体积依然巨大无比:据官方新闻,微软原生 ...
- Linux find查找指定文件 按照名称 然后cp拷贝到指定目录且指定文件名
最近有一个需求,需要将指定目录下的文件(已知文件名)复制到另一个指定的目录且重命名文件. 要求: 在var目录下会定义系统的启动日志相关信息,请查找对应的boot.log文件,并把它备份一份到var/ ...
- gitlab查看项目ID/projectId
背景 最近有个CI打包平台,项目projectId弄错,导致拉取到错误仓库.笔者一直通过项目名称(project name)访问,首次接触project id,搜索一圈才找到快捷查看方法,记录于此. ...
- LeetCode题解之Swap Nodes in Pairs
1.题目描述 2.问题分析 对两个节点进行交换操作 3.代码 ListNode* swapPairs(ListNode* head) { if( !head || head->next == N ...
- svn其它
参考地址: http://www.cnblogs.com/mymelon/p/5483215.html