找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4389|回复: 2
收起左侧

制作自己的wifi开关 ESP8266 lua使用mqqt远程通信

[复制链接]
ID:81424 发表于 2018-11-7 11:53 | 显示全部楼层 |阅读模式
本帖最后由 沙漠之痕 于 2018-11-7 13:10 编辑

一 . 在本地电脑上安装emqtt服务器:


1.首先安装补丁:把补丁拷贝到" C:\Windows\System32 "文件夹下
1.png

2. 控制台模式下启动:emqttd console
(1) 控制台下切换到emqttbin目录下。如:
2.png

快速切换方法:在此目录下按住“Shift”同时点击鼠标右键选择“在此处打开                命令窗口”

3.png

(2)启动mqtt服务器 “emqttd console”
4.png

3. 通过网页登陆查看链接信息
   用户名:admin
码:public

5.png

6.png

查看本机ip
7.png

8.png

链接上一个客户端
9.png
我们再启动一个客户端让两个客户端通信
10.png
我们在查看下链接的客户端
11.png
客户端通信
12.png

13.png


此种方法会打开一个窗口,关掉窗口emqtt服务也关闭;
emqtt服务器一直运行的
(1)控制台先定位到emqttbin目录下“D:\MqttServer\emqttd\bin
    (2)emqttd install
(3)启动emqttd服务:emqttd start
(4)停止emqttd服务:emqttd stop
(5)卸载emqttd服务:emqttd uninstall

14.png


二. ESP8266 模块连接emqtt服务器进行远程控制
init.lua文件:
  1. RELAY_Pin = 1

  2. gpio.mode(RELAY_Pin, gpio.OUTPUT)

  3. gpio.write(RELAY_Pin,0)

  4. tmr.alarm(0,4000,0,function()

  5.     dofile("mqtt.lua")

  6. end)
复制代码


init.lua文件结束
mqtt.lua文件:
  1. MqttServerIP="192.168.0.105"      

  2. MqttServerPort=1883         

  3. MqttUserName="admin"              

  4. MqttUserPassword="public"      

  5. MqttLinkStat = 0                  

  6. UartReceData = ""               

  7. UartReceCnt = 0                  

  8. UartReceTempCnt = 0              

  9. wifi.setmode(wifi.STATION)      

  10. local stacfg={

  11.     ssid="qqqqq",      

  12.     pwd="11223344"  

  13. }

  14. wifi.sta.config(stacfg)        

  15. wifi.sta.autoconnect(1)         

  16. Clientid = wifi.sta.getmac()     

  17. ClientSubscribeTopic = "AAA"   

  18. ClientPublishTopic = "111"      

  19. MqttClient=mqtt.Client(Clientid,3,MqttUserName,MqttUserPassword)

  20. MqttClient:lwt(ClientPublishTopic,"offline",1,1)  

  21. local function ConnectSuccess(client)  

  22.     print("MqttServer connect sucess")

  23.     client:subscribe(ClientSubscribeTopic,0,function(client)print("subscribe sucess")end)

  24.     MqttLinkStat = 1

  25.     tmr.stop(3)

  26. end

  27. local function ConnectFailed(client, reason)

  28.     print("MqttServer connect fail"..reason)

  29.     MqttLinkStat = 0

  30.     tmr.start(3)

  31.    

  32. end

  33. tmr.alarm(3, 2000, 1, function()

  34.          MqttClient:connect(MqttServerIP, MqttServerPort, 0,ConnectSuccess,ConnectFailed)

  35. end)

  36. MqttClient:on("offline", function(client, topic, data) tmr.start(3) end)

  37. MqttClient:on("message", function(client, topic, data)

  38.         if data == "open" then

  39.             gpio.write(RELAY_Pin,1)  

  40.             if gpio.read(RELAY_Pin)==1 then

  41.                 if MqttClient ~= nil then

  42.                     MqttClient:publish(ClientPublishTopic,"ON-RELAY",1,1,function(client)  end)

  43.                 end

  44.             end  

  45.         end

  46.         if data == "close" then

  47.             gpio.write(RELAY_Pin,0)

  48.             if gpio.read(RELAY_Pin)==0 then

  49.                 if MqttClient ~= nil then

  50.                     MqttClient:publish(ClientPublishTopic,"OFF-RELAY",1,1,function(client)  end)

  51.                 end

  52.             end

  53.         End

  54. uart.write(0,data)

  55. end)

  56. tmr.alarm(2,10,1,function()

  57.      if UartReceCnt ~= 0 then

  58.         if UartReceTempCnt == UartReceCnt then

  59.             UartReceTempCnt = 0

  60.             UartReceCnt = 0  

  61.             --send to-Mqtt

  62.             if MqttClient ~= nil then

  63.                 MqttClient:publish(ClientPublishTopic,UartReceData,1,1,function(client)  end)

  64.             end

  65.         else

  66.             UartReceTempCnt = UartReceCnt

  67.         end

  68.      end

  69. end)

  70. uart.on("data",0,function(data)

  71.             UartReceData = UartReceData..data

  72.             UartReceCnt = UartReceCnt + 1   

  73. end,0)   

  74. printip = 0

  75. wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)

  76.     printip = 0

  77. end)

  78. wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)

  79.    if printip == 0 then

  80.       print("+IP "..T.IP)

  81.    end

  82.    printip = 1

  83. end)

复制代码
mqtt.lua文件结束

15.png

16.png

17.png

模块通过串口发送数据

18.png

19.png


PC客户端发送”open”开继电器

20.png

PC客户端发送”close”关继电器

21.png

22.png


mqtt客户端.zip (118.4 KB, 下载次数: 34)
回复

使用道具 举报

ID:424598 发表于 2019-1-11 15:10 来自手机 | 显示全部楼层
谢谢发布,很详细!
回复

使用道具 举报

ID:158908 发表于 2019-1-14 09:36 来自手机 | 显示全部楼层
好东西,谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表