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

简介: 这些天,,,,今天终于看到了希望,,,天道酬勤先说实现的功能...让ESP8266连接无线网,然后让它建立服务器,,我的客户端连接上以后,发给客户端发数据模块打印到串口,,往ESP8266串口里发数据自动转发给网口先看效果图,终于不需要单片机配置了程序源码我的init.

这些天,,,,今天终于看到了希望,,,天道酬勤

先说实现的功能...让ESP8266连接无线网,然后让它建立服务器,,我的客户端连接上以后,发给客户端发数据模块打印到串口,,往ESP8266串口里发数据自动转发给网口

先看效果图,终于不需要单片机配置了

程序源码

我的init.lua

lighton=0
pin=4
gpio.mode(pin,gpio.OUTPUT)
tmr.alarm(1,500,1,function()
  if lighton==0 then
      lighton=1
      gpio.write(pin,gpio.HIGH)
  else
      lighton=0
       gpio.write(pin,gpio.LOW)
  end
end)

dofile("conncet_wifi.lua")
我的 conncet_wifi.lua
uart.setup(0,9600,8,0,1,0)
wifi.setmode(wifi.STATIONAP) wifi.sta.config(
"360","1234567890") wifi.sta.connect() tmr.alarm(2, 1000, 1, function() if wifi.sta.getip() == nil then print("Connecting...") else tmr.stop(2) print("Connected, IP is "..wifi.sta.getip()) end end) srv=net.createServer(net.TCP,28800) srv:listen(8080,function(conn) --print("build success") connect = conn conn:on("receive",function(conn,payload) print(payload) --conn:send("<h1> Hello, NodeMcu.</h1>") end) end)
uart.on(
"data", function(data) connect:send(data) end, 0)

 

因为可能刷的固件不一样,如果出现下面的问题

修改为

APConfig={}
APConfig.ssid="ACLAY"
APConfig.pwd="wange903"

wifi.sta.config(APConfig)


如果想让多个客服端连接可参考这篇文章

51采集PCF8591数据通过ESP8266上传C#上位机

如果上面的代码有问题,,提示已经监听了端口不能重复监听,可以修改为下面的

ConnectCnt = 0
ConnectListenFlage=0
UsartUsFlage = 0
connect0Flage=0
connect1Flage=0
connect2Flage=0
connect3Flage=0
connect4Flage=0
tmr.alarm(3, 1000, 1, function()
                if ConnectListenFlage == 0 then
                ConnectListenFlage = 1
              
                srv:listen(8080,function(conn0) 
                UsartUsFlage = 1

                if ConnectCnt == 0 then
                   connect0 = conn0
                   connect0Flage =1
                   connect1Flage=0
                   if connect1 ~= nil then
                      connect1:close()
                   end
                   print("0-Connectd") 
                end
                if ConnectCnt == 1 then
                   connect1 = conn0 
                   connect1Flage=1
                   connect2Flage=0
                   if connect2 ~= nil then
                      connect2:close()
                   end
                   print("1-Connectd") 
                end
                if ConnectCnt == 2 then
                   connect2 = conn0
                   connect2Flage=1
                   connect3Flage=0
                   if connect3 ~= nil then
                      connect3:close()
                   end 
                   print("2-Connectd") 
                end
                if ConnectCnt == 3 then
                   connect3 = conn0 
                   connect3Flage=1
                   connect4Flage=0
                   if connect4 ~= nil then
                      connect4:close()
                   end
                   print("3-Connectd") 
                end
                if ConnectCnt == 4 then
                   connect4 = conn0
                   connect4Flage=1
                   connect0Flage=0
                   if connect0 ~= nil then
                      connect0:close()
                   end 
                   print("4-Connectd") 
                end
            
                conn0:on("receive",function(conn0,payload) 
                print(payload) end)
                ConnectCnt = ConnectCnt+1
                if ConnectCnt == 5 then
                   ConnectCnt = 0
                end
               
             end)
          end  
end)
uart.setup(0,9600,8,0,1,0)


tmr.alarm(4, 1000, 1, function() if UsartUsFlage == 1 then uart.on("data", function(data) if connect0 ~= nil then if connect0Flage == 1 then connect0:send(data) end end if connect1 ~= nil then if connect1Flage == 1 then connect1:send(data) end end if connect2 ~= nil then if connect2Flage == 1 then connect2:send(data) end end if connect3 ~= nil then if connect3Flage == 1 then connect3:send(data) end end if connect4 ~= nil then if connect4Flage == 1 then connect4:send(data) end end tmr.stop(4) end, 0) end end)

 

这两天测试程序还发现一个bug就是如果客户端断开了,应该检测一下哪个断开了,数据就不应该发向那个连接,,,否则就会报错,然后模块会复位重启

所以加上这段代码

 

conn0:on("disconnection",function(sck,c) 
                  --print(sck)
                  if sck == connect0 then connect0 = nil print("disconnect0") end if sck == connect1 then connect1 = nil print("disconnect1") end if sck == connect2 then connect2 = nil print("disconnect2") end if sck == connect3 then connect3 = nil print("disconnect3") end if sck == connect4 then connect4 = nil print("disconnect4") end end)

 

放一个全的

 

ConnectCnt = 0//连接计数
ConnectListenFlage=0//监听标志,只执行一次监听
UsartUsFlage = 0//允许串口数据发向网口 tmr.alarm(2, 1000, 1, function() if NetMode == 0 then//TCP Sever模式 if ConnectListenFlage == 0 then ConnectListenFlage = 1 srv:listen(ConnectPort,function(conn0) UsartUsFlage = 1 --print(conn0) if ConnectCnt == 0 then connect0 = conn0 if connect1 ~= nil then connect1:close() end connect1 = nil print("0-Connectd") end if ConnectCnt == 1 then connect1 = conn0 if connect2 ~= nil then connect2:close() end connect2 = nil print("1-Connectd") end if ConnectCnt == 2 then connect2 = conn0 if connect3 ~= nil then connect3:close() end connect3 = nil print("2-Connectd") end if ConnectCnt == 3 then connect3 = conn0 if connect4 ~= nil then connect4:close() end connect4 = nil print("3-Connectd") end if ConnectCnt == 4 then connect4 = conn0 if connect0 ~= nil then connect0:close() end connect0 = nil print("4-Connectd") end conn0:on("disconnection",function(sck,c) //断开连接函数 --print(sck) if sck == connect0 then connect0 = nil print("disconnect0") end if sck == connect1 then connect1 = nil print("disconnect1") end if sck == connect2 then connect2 = nil print("disconnect2") end if sck == connect3 then connect3 = nil print("disconnect3") end if sck == connect4 then connect4 = nil print("disconnect4") end end) conn0:on("receive",function(conn0,payload) uart.write(0,payload)end) --print(payload) end) ConnectCnt = ConnectCnt+1 if ConnectCnt == 5 then ConnectCnt = 0 end end) end end

 

串口函数里面

 if UsartUsFlage == 1 then
             if NetMode == 0 then if connect0 ~= nil then connect0:send(RevData) end if connect1 ~= nil then connect1:send(RevData) end if connect2 ~= nil then connect2:send(RevData) end if connect3 ~= nil then connect3:send(RevData) end if connect4 ~= nil then connect4:send(RevData) end end

 

 

现在一步步的做

首先亲们一定是把Esp8266刷了基于Lua脚本语言开发的固件

可以参考这篇文章ESP8266刷AT固件与nodemcu固件

 

我也重新刷一下

我现在使用的这一款,,这上面有一个灯,这款是人家做的开发板,所以集成了USB转串口,,

首先是做一个程序让灯闪,这样做就只是做指示灯,正好看一下它的一些API函数

复位一下模块

 

关于这句要说一下,,,,这个模块默认上电执行的是  init.Lua中的程序,因为刚刷新完固件所以模块里面没有任何文件,,

我们编写一个程序把它保存为一个后缀名为.lua的文件,,这些文件呢,点击

文件就保存到ESP8266内部了,我上面写了两个文件一个名为init.lua(必须的,一上电模块就执行的文件),另一个conncet_wifi.lua

要想使用这个文件只需要

先写init.lua

 

可以给模块重新上电试一下,或者复位,模块总是执行这个程序

 

 我为了方便用电脑上位机测试,所以就让模块工作在AP+STATION模式下,让模块连接我的360wifi

先设置模块的模式,然后是连接我的无线

 

 为了保证模块一上电就执行

接着就是建立服务器

 

对了具体的关于 ::::::号有没有疑问,其实自己现在也有,不过自己看到了Lua讲解::::号的地方,先知道这样用,,,,,自己看懂了再在关于lua入门里面写一下

网口已经能接收到数据然后发送到串口了

现在要做的是往模块串口发数据然后传给网口

完成后可以给模块重新上电,或者复位一下,因为模块这样写进去可能不是从init.lua开始执行的

用别的串口调试助手连接上模块,因为这个软件的串口是发的命令

好了,,,,

补充

上面的AP加STATION模式下模块是发出WIFI信号的,而且设置了模块监听的端口是8080,所以可以完全连接模块发出的无线网,然后和模块进行通信,

只不过模块IP地址填写的是模块默认的ip  192.168.4.1  端口号  8080

连接模块的无线

对了串口每隔500ms会打印Connecting...

是由于Lua程序中写的模块是如果没有连接到路由器就会打印

如果不想要可以去掉

最后呢!提供一下自己做的板子

轻松使用8266

 

目录
相关文章
|
7月前
|
Ubuntu 网络协议 Linux
【Lua基础入门】解密世界上最快的脚本语言
【Lua基础入门】解密世界上最快的脚本语言
141 1
|
8月前
|
存储 NoSQL Java
Lua高性能脚本语言快速入门
Lua高性能脚本语言快速入门
163 0
|
XML 存储 Java
【Lua基础 第1章】初识Lua脚本语言、数据类型、全局变量、关键字的使用
初识Lua脚本语言、数据类型、全局变量、关键字的使用
123 0
【Lua基础 第1章】初识Lua脚本语言、数据类型、全局变量、关键字的使用
|
存储 JavaScript 编译器
Lua脚本语言——Lua脚本基础语法
Lua脚本语言——Lua脚本基础语法
613 0
Lua脚本语言——Lua脚本基础语法
|
C语言
(五)Lua脚本语言入门
---恢复内容开始--- 写完这篇Lua脚本语言入门,自己就要尝试去用Lua脚本语言写esp8266了,,自己现在挺心急的,因为朋友使用esp8266本来说自己帮忙写好程序的,但是用的单片机不一样自己没有,没有办法测试,用AT指令就显得不方便,还要根据单片机改程序,,而且自己以前用感觉AT指令发信息...
1284 0
|
C# Java
(四)Lua脚本语言入门
这篇文章就当成铺垫型的文章,写着写着发现有好多想写的,,关于C#与Java,当然作为铺垫肯定与Lua的下部分介绍有关..... 对于"泛型",先看C#中"泛型"是一个怎么回事,,,,,我感觉名字起错了,应该叫"事先规定存入的数据类型" 我们在定义数组的时候     int(long或char或.
946 0
(三)Lua脚本语言入门
又要找工作了,变的忧虑了,唯有学习才让内心变得踏实,今天玩了一下午的王者荣耀,正事都忘了...... 如果认为所谓的毅力是每分每秒的“艰苦忍耐”式的奋斗,那这是一种很不足的心理状态。毅力是一种习惯,毅力是一种状态,毅力是一种生活--- 摘至老衲五木写得--"LwIP协议栈源码详解",,,一工作总是感觉以前的热情没有了,不知道这种状态还要持续到什么时候,每一次改变总需要一个开始.
1028 0
(一)Lua脚本语言入门
今天开始自己的Lua语言学习,Lua脚本语言,是介于应用程序和开发其应用程序的底层编程语言之间,,它很方便调用其它语言,它只是在载入时对其进行编译,而不像我们写的单片机程序是预编译的,先编译好然后写入单片机,它只是在调用时编译,所以脚本语言的灵活性很高,,,,,对于自己为什么又开始学习脚本语言了,,因为需要了   .
1279 0
|
C语言 数据安全/隐私保护
(二)Lua脚本语言入门
上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是  void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 function aa()--定义一个函数 print("这是一个函数") end aa()--调用函数   function aa(str)--定义一个函数 print("传进来的是".
1023 0
|
1月前
|
存储 NoSQL Redis
Redis的Lua脚本有什么作用?
Redis Lua脚本用于减少网络开销、实现原子操作及扩展指令集。它能合并操作降低网络延迟,保证原子性,替代不支持回滚的事务。通过脚本,代码复用率提高,且可自定义指令,如实现分布式锁,增强Redis功能和灵活性。
45 1