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 文件保存数据(基于Lua脚本语言)的更多相关文章

  1. ESP8266使用详解--基于Lua脚本语言

    这些天,,,,今天终于看到了希望,,,天道酬勤 先说实现的功能...让ESP8266连接无线网,然后让它建立服务器,,我的客户端连接上以后,发给客户端发数据模块打印到串口,,往ESP8266串口里发数 ...

  2. 八,ESP8266 文件保存数据

    应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情 前面几篇 用AT指令版本的 一,  http://www.c ...

  3. 一,ESP8266下载和刷固件(基于Lua脚本语言)

    用自己的小板测试...... 安排上呢 一, ESP8266下载和刷固件(Lua开发----体验一下lua开发的魅力所在) 二, 控制一个灯亮灭 三, TCP服务器 四, TCP客户端 五, UDP ...

  4. 二,ESP8266 GPIO和SPI和定时器和串口(基于Lua脚本语言)

    https://www.cnblogs.com/yangfengwu/p/7514336.html 我们写lua用这个软件 如果点击的时候提示安装,,安装就行,,如果没有提示呢可以,按照下面链接的提示 ...

  5. 四,ESP8266 TCP服务器(基于Lua脚本语言)

    我要赶时间赶紧写完所有的内容....朋友的东西答应的还没做完呢!!!!!!!没想到又来了新的事情,,....... 配置模块作为TCP服务器然后呢咱们连接服务器发指令控制LED亮灭 控制的指令呢咱就配 ...

  6. 三,ESP8266 SPI(基于Lua脚本语言)

    https://www.cnblogs.com/yangfengwu/p/7520260.html 重点是说SPI通信协议,,,, 不要害怕协议因为协议是人规定的,,刚好我也是人......规定的协议 ...

  7. 五,ESP8266 TCP服务器多连接(基于Lua脚本语言)

    https://www.cnblogs.com/yangfengwu/p/7524326.html 一些时间去准备朋友的元器件了... 接着写,,争取今天写完所有的文章,,因为答应了朋友下周5之前要做 ...

  8. 六,ESP8266 TCP Client(基于Lua脚本语言)

    今天不知道是不是让我姐挺失望.......很多时候都不知道自己努力的方向对不对,,以后能不能带给家人最美好的期盼...... Init.lua 没啥改变,,就改了一下加载Client.lua gpio ...

  9. 九,ESP8266 判断是断电上电(强制硬件复位)之后运行的内部程序还是内部软件复位之后运行的程序(基于Lua脚本语言)

    现在我有一个需求,WIFI模块控制一个继电器,我要做的是如果内部程序跑乱了,造成了内部程序复位重启,那么控制继电器的状态不能改变 如果是设备断电了,然后又来电了,我需要的是继电器一定要是断开才好.不能 ...

随机推荐

  1. TCP 回顾

    报文 状态 从wiki上搬运过来 重要参数 RTT(Round Trip Time) 即链路传输延时,从数据发送到达对端并受到对端ack的一次来回时间.由于TCP是依赖报文确认机制来实现传输的可靠性的 ...

  2. vue+webpack+vue-cli+WebStrom 项目搭建

    作者QQ:1095737364    QQ群:123300273     欢迎加入!   1.安装 webpack 和vue-cli 模块: npm install webpack -g npm in ...

  3. nodejs 通过nginx后出现响应慢的解决方法

    最近用了nodejs搭建服务器,然后用了nginx做了反向代理,项目开发需求,没办法.但是发现了经过代理之后发现网页请求变慢了,而且是不能忍的一分钟以上. 一开始,怀疑是在nodejs那边的问题,结果 ...

  4. 实现卡片效果【DIV+CSS3】

    一.文字卡片效果 <html> <head> meta<charset="utf-8"> <title>文字卡片效果</tit ...

  5. Atitit.web的自动化操作与信息抓取 attilax总结

    Atitit.web的自动化操作与信息抓取 attilax总结 1. Web操作自动化工具,可以简单的划分为2大派系: 1.录制回放 2.手工编写0 U' z; D! s2 d/ Q! ^1 2. 常 ...

  6. ES6 箭头函数下的this指向

    在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...

  7. 稳聘App设计图分享

    摘要||潜心学习,无限开源,我是鸟窝,一只憨厚的鸟,联系我加微信:jkxx123321 很早期就想筹划上线一款招聘类App,一拖再拖,先做还没有上线. 下面的设计原图,为我UI徒弟所做,在此,表示万分 ...

  8. maven 学习笔记--简介

    1.什么是maven Maven是一个服务于基于java平台的项目构建.依赖管理和项目信息管理. 2:什么是构建,maven是个优秀构建工具? (1)构建(bulid):对代码的进行编译.运行单元测试 ...

  9. SQL Server 从2000复制数据到2008及以上版本的一种方法

    1.通过Linked Servers 执行sql出现错误提示,无法执行复制数据操作. sql: insert into tb_User select from [**.**.*.**].DB.dbo. ...

  10. centos7 安装 jdk1.8

    首先是Linux的不同版本的额系统自带的配置是不一样的,比如centos6上有的自带的jdk环境的话要装1.8的就要进行卸载或者马上进行更改 jdk是java程序依赖的环境 首先查看你的系统下是否有j ...