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 的读取

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

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

自己的上位机按钮事件

  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3. byte[] sendbyte = new byte[];
  4. sendbyte[] = (byte)'+';//2B
  5. sendbyte[] = (byte)'+';
  6. sendbyte[] = (byte)'M';//4D
  7. sendbyte[] = (byte)'D';//
  8. sendbyte[] = (byte)'';//
  9.  
  10. if (radioButton5.Checked)
  11. {
  12. sendbyte[] = (byte)'';
  13. }
  14. else if (radioButton6.Checked)
  15. {
  16. sendbyte[] = (byte)'';
  17. }
  18. else if (radioButton7.Checked)
  19. {
  20. sendbyte[] = (byte)'';
  21. }
  22. if (radioButtonNetCon.Checked)
  23. {
  24. TcpSendDataMethod(sendbyte);
  25. }
  26. else if (radioButtonSerialCon.Checked)
  27. {
  28. SerialSend(sendbyte);
  29. }
  30. }

++MD00                 AP模式

++MD01                Station模式

++MD00                AP+Station模式

其实最后还有CRC16校验码

看文件操作

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

注意

  1. if file.open("mode.lua", "w+") then
  2. file.writeline("")
  3. file.flush()//连续写最好加上
  4. file.writeline("")
  5. file.flush()
  6. file.writeline("")
  7. file.close()
  8. else
  9. print("open mode.lua faild")
  10. end

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

那么读的时候

  1. file.open("mode.lua", "r") then
  2. s1= file.readline()
  3. s2= file.readline()
  4. s3= file.readline()
  5. file.close()
  6. end

s1 ="123\r"

s2 ="456\r"

s3 ="789\r"

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

  1. if file.open("mode.lua", "r") then
  2. local Mode = file.readline()
  3. if Mode == nil then
  4. Mode=""
  5. end
  6. if Mode:byte() == then
  7. print("Wifi MODE: SOFTAP")
  8. wifi.setmode(wifi.SOFTAP)
  9. elseif Mode:byte() == then
  10. print("Wifi MODE: STATION")
  11. wifi.setmode(wifi.STATION)
  12. else
  13. print("Wifi MODE: STATIONAP")
  14. wifi.setmode(wifi.STATIONAP)
  15. end
  16. file.close()
  17. end

直接上源码吧

init.lua

  1. gpio.mode(,gpio.OUTPUT)
  2. gpio.mode(,gpio.OUTPUT)
  3. gpio.write(,)
  4.  
  5. if adc.force_init_mode(adc.INIT_ADC) then
  6. node.restart()
  7. return
  8. end
  9.  
  10. tmr.alarm(, , , function()
  11. gpio.write(,-gpio.read())
  12. end)
  13.  
  14. tmr.alarm(, , , function()
  15. dofile("file.lua")
  16. dofile("UDP.lua")
  17. end)

UDP.lua

  1. if file.open("mode.lua", "r") then
  2. local Mode = file.readline()
  3. if Mode == nil then
  4. Mode=""
  5. end
  6. if Mode:byte() == then
  7. print("Wifi MODE: SOFTAP")
  8. wifi.setmode(wifi.SOFTAP)
  9. elseif Mode:byte() == then
  10. print("Wifi MODE: STATION")
  11. wifi.setmode(wifi.STATION)
  12. else
  13. print("Wifi MODE: STATIONAP")
  14. wifi.setmode(wifi.STATIONAP)
  15. end
  16. file.close()
  17. end
  18.  
  19. cfg={}
  20. cfg = wifi.ap.getconfig(true)
  21. if cfg.ssid == nil then
  22. cfg.ssid="Hellow8266"
  23. cfg.pwd=""
  24. end
  25.  
  26. print("APssid: "..cfg.ssid)
  27. if cfg.pwd == nil then
  28. print("APpwd: nil")
  29. else
  30. print("APpwd: "..cfg.pwd)
  31. end
  32. cfg.save=true
  33. wifi.ap.config(cfg)
  34.  
  35. apcfg={}
  36. apcfg = wifi.sta.getconfig(true)
  37.  
  38. if apcfg.ssid == nil then
  39. apcfg.ssid="qqqqq"
  40. apcfg.pwd=""
  41. end
  42.  
  43. print("APssid: "..apcfg.ssid)
  44. if apcfg.pwd == nil then
  45. print("Stationpwd: nil")
  46. else
  47. print("Stationpwd: "..apcfg.pwd)
  48. end
  49.  
  50. apcfg.save=true
  51. wifi.sta.config(apcfg)
  52. wifi.sta.autoconnect()
  53.  
  54. ConnectIP = "192.168.1.103"
  55. ConnectPort =
  56.  
  57. UdpSocket = net.createUDPSocket()
  58. UdpSocket:listen(ConnectPort)
  59.  
  60. UdpSocketTable={}
  61. UdpIPTable={}
  62. UdpPortTable={}
  63. UdpConnectCnt =
  64. UdpCanConnect =
  65.  
  66. UdpSocket:on("receive", function(socket, data, port, ip)
  67. UdpCanConnect =
  68. for i=, do
  69. if UdpIPTable[i] == ip and UdpPortTable[i] == port then
  70. UdpCanConnect =
  71. end
  72. end
  73.  
  74. if ip == ConnectIP and port == ConnectPort then
  75. UdpCanConnect =
  76. end
  77.  
  78. if UdpCanConnect == then
  79. UdpSocketTable[UdpConnectCnt] = socket
  80. UdpIPTable[UdpConnectCnt] = ip
  81. UdpPortTable[UdpConnectCnt] = port
  82. print("\r\n"..UdpConnectCnt.."-Connect")
  83. UdpConnectCnt = UdpConnectCnt +
  84. end
  85.  
  86. if UdpConnectCnt == then
  87. UdpConnectCnt =
  88. end
  89. uart.write(,data)
  90. end)
  91.  
  92. UartReadCnt=
  93. UartReadCntCopy=
  94. UartReadData=""
  95. UartReadDataCopy=""
  96.  
  97. uart.on("data",,function(data)
  98. UartReadCnt = UartReadCnt +
  99. UartReadData = UartReadData..data
  100.  
  101. end, )
  102.  
  103. tmr.alarm(, , , function()
  104. if UartReadCnt ~= then
  105. if UartReadCnt == UartReadCntCopy then
  106. UartReadCnt =
  107. UartReadCntCopy =
  108. UartReadDataCopy = UartReadData
  109. UartReadData=""
  110. Config(UartReadDataCopy)
  111. NetSend(UartReadDataCopy)
  112. else
  113. UartReadCntCopy = UartReadCnt
  114. end
  115. end
  116.  
  117. end)
  118.  
  119. function NetSend(data)
  120. if UdpSocket ~= nil then
  121. UdpSocket:send(ConnectPort,ConnectIP,data)
  122. end
  123.  
  124. for i=, do
  125. if UdpSocketTable[i] ~= nil then
  126. UdpSocketTable[i]:send(UdpPortTable[i],UdpIPTable[i],data)
  127. end
  128. end
  129. end
  130.  
  131. printip =
  132. wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
  133. printip =
  134. end)
  135.  
  136. wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
  137. if printip == then
  138. print("+IP"..T.IP)
  139. end
  140. printip =
  141. end)

file.lua

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

  1. function Config(data)
  2. local RevLen = string.len (data)
  3. local crc = ow.crc16(string.sub(data,,RevLen-))
  4.  
  5. local recrc = data:byte(RevLen)
  6. recrc = recrc*
  7. recrc = recrc + data:byte(RevLen-)
  8.  
  9. if crc == recrc then
  10. --[[ Mode ]]
  11. if RevLen == then
  12. if string.sub(data,,) == "++MD0" then----Mode
  13. if file.open("mode.lua", "w+") then
  14. file.writeline(string.sub(data,,))--MODE
  15. print("MODE="..string.sub(data,,))
  16. file.close()
  17. else
  18. print("open mode.lua faild")
  19. end
  20. end--[[ Mode ]]
  21. end
  22.  
  23. end
  24. end

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

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

复位重启一下

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

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

完了一个大的心思

https://www.cnblogs.com/yangfengwu/p/9749008.html

八,ESP8266 文件保存数据的更多相关文章

  1. 八,ESP8266 文件保存数据(基于Lua脚本语言)

    https://www.cnblogs.com/yangfengwu/p/7533845.html 应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345...... ...

  2. iOS 写入文件保存数据的方式

     在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeye ...

  3. C/C++程序从文本文件中读取(保存)数据

    :本文仅供初学者参阅,解惑 在C程序中: 与程序代码外的数据(文件)打交道,我们使用到流(stream)这个概念,实现进程的虚拟内存与文件之间的数据交换. ——文件流:C标准库提供了FILE(之所以命 ...

  4. Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

    一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/fi ...

  5. 怎么直接让火狐输入json数据,而不是弹出文件保存对话框?

    一.问题再现: 我需要浏览器输出的是json数据,但是浏览器弹出的是一个文件保存的对话框,这样的体验有点差.所以想怎么让浏览器直接输出到浏览器的页面上面,并且格式的输出,还可以编辑. 测试数据: ht ...

  6. matlab结构体形式保存数据生成.mat文件< 转>

    2015年 参加天池大数据竞赛     为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVX ...

  7. Android数据保存之文件保存

    前言: 上一篇文章写了在Android中利用SharedPreferences保存数据,SharedPreferences在保存数据的时候主要是保存一些应用程序的设置信息或者少量的用户信息,并且是以k ...

  8. Spark2 加载保存文件,数据文件转换成数据框dataframe

    hadoop fs -put /home/wangxiao/data/ml/Affairs.csv /datafile/wangxiao/ hadoop fs -ls -R /datafiledrwx ...

  9. Android 中保存数据到文件中

    1.在安卓开发中,会遇到保存数据到手机中以及从手机中获取数据的情况 /** * 把数据存放到手机内存中 * * @param number * @param password * @return */ ...

随机推荐

  1. multiset与set

    set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就   像一个集合一样.所有的操作的都是严格在logn时间之内完成,效率非常高. set和multiset的 ...

  2. SQL Server数据库基础笔记

    启动和停止SQL Server服务三种形式 后台启动服务 计算机->右键->管理->服务和应用程序->服务->sql server(MSSQLSERVER) SQL Se ...

  3. request.getParameter()与request.setAttribute()的区别 (转载)

    request.getParameter()与request.setAttribute()的区别 request.getParameter(),request.setAttribute()区别如下: ...

  4. 教你如何反编译app,拿到加密方式

    大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个   准备好反编译设备 1.一套越狱的ios手机 我 ...

  5. 基于.NET CORE微服务框架 -Api网关服务管理

    1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...

  6. 小A点菜 洛谷 p1164

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...

  7. MySQL数据库IO问题

    --MySQL数据库IO问题 ----------------------2014/05/25     看http://www.mysqlperformanceblog.com 的时候,发现Perco ...

  8. 理解最基本的Vue项目

    上一篇<Vue开发环境搭建及热更新>,我们讲解了vue开发环境的搭建还有一些小问题,接下来我们来讲解一下这个界面是如何形成的. 在开始讲之前,我们先来看看我们上一篇所谓的项目目录里面到底放 ...

  9. testng-result中文乱码问题

    背景 执行完用例查看报告,发现testng-result.xml文件中关于中文的都是乱码 解决方法 eclipse已设置了utf-8去编译,所以直接运行run as testng ,在console栏 ...

  10. Win10家庭版设置桌面右键更换桌面壁纸

    Win10家庭版设置桌面右键更换桌面壁纸.. ------------------------- 这是设置之前的右键快捷菜单.. ------------------------- 开始设置:右键桌面 ...