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

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

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

程序源码

我的init.lua

lighton=
pin=
gpio.mode(pin,gpio.OUTPUT)
tmr.alarm(,,,function()
if lighton== then
lighton=
gpio.write(pin,gpio.HIGH)
else
lighton=
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("","")
wifi.sta.connect()
tmr.alarm(, , , function()
if wifi.sta.getip() == nil then
print("Connecting...")
else
tmr.stop()
print("Connected, IP is "..wifi.sta.getip())
end
end) srv=net.createServer(net.TCP,)
srv:listen(,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, )

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

修改为

APConfig={}
APConfig.ssid="ACLAY"
APConfig.pwd="wange903" wifi.sta.config(APConfig)

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

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

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

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

tmr.alarm(, , , function()
if UsartUsFlage == then
uart.on("data",
function(data)
if connect0 ~= nil then
if connect0Flage == then
connect0:send(data)
end
end if connect1 ~= nil then
if connect1Flage == then
connect1:send(data)
end end if connect2 ~= nil then
if connect2Flage == then
connect2:send(data)
end end if connect3 ~= nil then
if connect3Flage == then
connect3:send(data)
end end if connect4 ~= nil then
if connect4Flage == then
connect4:send(data)
end end tmr.stop()
end, )
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

ESP8266使用详解--基于Lua脚本语言的更多相关文章

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

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

  2. ESP8266使用详解(AT,LUA,SDK)

    https://www.cnblogs.com/yangfengwu/p/10100152.html             8266综合开发教程(LUA) https://www.cnblogs.c ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. PageRank——Google的民主表决算法

    1.搜索和民主表决:      当大多数人认为一件事为真的时候,那么这件事就是为真:即搜索时,其他网页对认为此网页好时,那么此网页排名应该靠前   2.PageRank思想:      i.起源:   ...

  2. 浅谈IOS8之size class

    文章目录 1. 简介 2. 实验 3. 实战 3.1. 修改 Constraints 3.2. 安装和卸载 Constraints 3.3. 安装和卸载 View 3.4. 其他 4. 后话 以前和安 ...

  3. ubuntu10.4的更新源因过期无法更新的解决方法

    转载自:http://blog.csdn.net/suquan629/article/details/52333769 ubuntu10.4到2016年早已停止了更新支持,ubuntu也不再维护了.官 ...

  4. 【java基础】接口VS抽象类

    1.至少有一个被abstract修饰的方法,同时修饰类名的类为抽象类,抽象的方法必须被子类覆盖,抽象的类必须被继承,抽象的类可以包含非抽象方法,只能单继承. 2.接口中所有的变量是static fin ...

  5. ipyparallel WordCount实现

            ipyparallel 之中,可以利用多个engine同时运行一个任务来加快处理的速度.在ipyparallel之中,集群被抽象为view,包括direct_view和balanced ...

  6. 一个参数引起的mysql从库宕机血案

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1859252 一个参数 ...

  7. CSS设置图片居中的方法

    如果是应用了表格,那么设置单元格为align="center"就可以使其中的一切内容居中.如果没有应用表格要想设置图片居中就有点困难了.困难来自不按"常规出牌" ...

  8. js原生之一个面向对象的应用

    function IElectricalEquipment() { }        IElectricalEquipment.prototype = {            poweron: fu ...

  9. PHP上传图片重命名6种方案

    一. 适用场景:无法使用从数据库中返回的自增长数字,给上传图片重命名.这是图片或文件上传的流程决定的.一般图片上传处理过程是,先上传图片到服务器,重命名之后,插入到数据库.也就是说,在数据库中非常容易 ...

  10. 关于Vue.js 使用v-cloak后仍显示变量的解决方法

    v-cloak   这个指令是防止页面加载时出现 vuejs 的变量名而设计的,但有时候添加了这个指令仍会显示变量,这是怎么回事呢?. v-cloak 用法: HTML代码: <div v-cl ...