八,ESP8266 文件保存数据
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 文件保存数据的更多相关文章
- 八,ESP8266 文件保存数据(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7533845.html 应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345...... ...
- iOS 写入文件保存数据的方式
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeye ...
- C/C++程序从文本文件中读取(保存)数据
:本文仅供初学者参阅,解惑 在C程序中: 与程序代码外的数据(文件)打交道,我们使用到流(stream)这个概念,实现进程的虚拟内存与文件之间的数据交换. ——文件流:C标准库提供了FILE(之所以命 ...
- Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制
一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/fi ...
- 怎么直接让火狐输入json数据,而不是弹出文件保存对话框?
一.问题再现: 我需要浏览器输出的是json数据,但是浏览器弹出的是一个文件保存的对话框,这样的体验有点差.所以想怎么让浏览器直接输出到浏览器的页面上面,并且格式的输出,还可以编辑. 测试数据: ht ...
- matlab结构体形式保存数据生成.mat文件< 转>
2015年 参加天池大数据竞赛 为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVX ...
- Android数据保存之文件保存
前言: 上一篇文章写了在Android中利用SharedPreferences保存数据,SharedPreferences在保存数据的时候主要是保存一些应用程序的设置信息或者少量的用户信息,并且是以k ...
- Spark2 加载保存文件,数据文件转换成数据框dataframe
hadoop fs -put /home/wangxiao/data/ml/Affairs.csv /datafile/wangxiao/ hadoop fs -ls -R /datafiledrwx ...
- Android 中保存数据到文件中
1.在安卓开发中,会遇到保存数据到手机中以及从手机中获取数据的情况 /** * 把数据存放到手机内存中 * * @param number * @param password * @return */ ...
随机推荐
- multiset与set
set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样.所有的操作的都是严格在logn时间之内完成,效率非常高. set和multiset的 ...
- SQL Server数据库基础笔记
启动和停止SQL Server服务三种形式 后台启动服务 计算机->右键->管理->服务和应用程序->服务->sql server(MSSQLSERVER) SQL Se ...
- request.getParameter()与request.setAttribute()的区别 (转载)
request.getParameter()与request.setAttribute()的区别 request.getParameter(),request.setAttribute()区别如下: ...
- 教你如何反编译app,拿到加密方式
大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个 准备好反编译设备 1.一套越狱的ios手机 我 ...
- 基于.NET CORE微服务框架 -Api网关服务管理
1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...
- 小A点菜 洛谷 p1164
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...
- MySQL数据库IO问题
--MySQL数据库IO问题 ----------------------2014/05/25 看http://www.mysqlperformanceblog.com 的时候,发现Perco ...
- 理解最基本的Vue项目
上一篇<Vue开发环境搭建及热更新>,我们讲解了vue开发环境的搭建还有一些小问题,接下来我们来讲解一下这个界面是如何形成的. 在开始讲之前,我们先来看看我们上一篇所谓的项目目录里面到底放 ...
- testng-result中文乱码问题
背景 执行完用例查看报告,发现testng-result.xml文件中关于中文的都是乱码 解决方法 eclipse已设置了utf-8去编译,所以直接运行run as testng ,在console栏 ...
- Win10家庭版设置桌面右键更换桌面壁纸
Win10家庭版设置桌面右键更换桌面壁纸.. ------------------------- 这是设置之前的右键快捷菜单.. ------------------------- 开始设置:右键桌面 ...