单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1317|回复: 2
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
本帖最后由 沙漠之痕 于 2018-11-7 13:10 编辑

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


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


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


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



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


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





查看本机ip




链接上一个客户端

我们再启动一个客户端让两个客户端通信

我们在查看下链接的客户端

客户端通信





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




二. 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文件结束







模块通过串口发送数据






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



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






mqtt客户端.zip (118.4 KB, 下载次数: 17)                                                          
ESP8266 连接mqtt远程控制 lua源码.zip (700 Bytes, 下载次数: 14)

emqtt安装包:https://pan.baidu.com/s/1EyPovGzNPAePmx4JT5urew提取码:za3g
交流QQ:1813763867   QQ群:607064330



ESP8266 制作自己的wifi开关资料汇总:

链接:https://pan.baidu.com/s/1wtIwd5csjieme7O-PfGhbA
提取码:71kt
连接失效请联系本人及时更改

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ssk7793 发表于 2019-1-11 15:10 来自手机 | 只看该作者
谢谢发布,很详细!
回复

使用道具 举报

板凳
acccccc 发表于 2019-1-14 09:36 来自手机 | 只看该作者
好东西,谢谢楼主
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

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