`看下原理图
在没有网络的地方想要实现控制,那就让esp8266模块开放热点,然后让 手机连接8266模块的热点。
操作步骤:
(1),首先让esp8266模块开放热点;
(2),设置模块连接TCP服务器;(模块开放热点,默认ip是192.168.4.1,有一个收连接时分配ip192.168.4.2即为TCP服务器ip)
(3),模块接收TCP服务器的数据,解析是否为控制继电器指令
使用lua编程操作:
init.lua 文件:
- RELAY_Pin = 1
- gpio.mode(RELAY_Pin, gpio.OUTPUT)
- gpio.write(RELAY_Pin,0)
- tmr.alarm(0,4000,0,function()
- dofile("tcpclient.lua")
- end)
复制代码
init.lua 文件结束
tcpclient.lua 文件:
- LinkStat = 0
- TCPClient = nil
- ClientReceData = ""
- ClientReceCnt = 0
- ClientReceDataStat = true
- wifi.setmode(wifi.SOFTAP)
- local apcfg={
- ssid="ESP8266-open",
- pwd="11223344"
- }
- wifi.ap.config(apcfg)
- tmr.alarm(1,1000,1,function()
- if LinkStat == 0 then
- TCPClient = net.createConnection(net.TCP,0)
- TCPClient:connect(8080,"192.168.4.2")
- TCPClient:on("receive", function(sck, data)
- ClientReceData = ClientReceData..data
- ClientReceCnt = 0
- ClientReceDataStat = true
- end)
- TCPClient:on("connection", function(sck, c)
- LinkStat = 1
- print("Connection")
- tmr.stop(1)
- TCPClient:on("disconnection", function(sck, c)
- LinkStat = 0
- print("Disconnection")
- tmr.start(1)
- end)
- end)
- end
- end)
- tmr.alarm(2,10,1,function()
- if ClientReceDataStat==true then
- ClientReceCnt=ClientReceCnt+1
- if ClientReceCnt>=10 then --receive finsion
- if ClientReceData=="open" then
- gpio.write(RELAY_Pin,1)
- end
- if ClientReceData=="close" then
- gpio.write(RELAY_Pin,0)
- end
- uart.write(0,ClientReceData)
- ClientReceData = ""
- ClientReceCnt = 0
- ClientReceDataStat = false
- end
- end
- end)
复制代码
tcpclient.lua 文件结束
手机连接上模块开放的wifi 打开APP开启服务器
发送open 开启继电器
发送close 关闭继电器
这样貌似还有问题,万一多个手机连接模块热点会不会出现问题呢?
那让模块建立TCP服务器去监听一个端口,让连接模块热点的手机去连接模块开启的TCP服务器,然后发送控制指令呢
感觉可以实现,下次继续试下这个控制方式。。。。。
`
|