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="video.jztx.com"
    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="bobo",
    12. pwd="18688207700"
    13. }
    14. wifi.sta.config(stacfg)
    15. wifi.sta.autoconnect(1)
    16. Clientid = wifi.sta.getmac()
    17. ClientSubscribeTopic = "/bobo/sub"
    18. ClientPublishTopic = "/bobo/pub"
    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. end
    32. tmr.alarm(3, 2000, 1, function()
    33. MqttClient:connect(MqttServerIP, MqttServerPort, 0,ConnectSuccess,ConnectFailed)
    34. end)
    35. MqttClient:on("offline", function(client, topic, data) tmr.start(3) end)
    36. MqttClient:on("message", function(client, topic, data)
    37. if(data == "on") then
    38. -- gpio.write(RELAY_Pin,1)
    39. -- if gpio.read(RELAY_Pin)==1 then
    40. -- if MqttClient ~= nil then
    41. gpio.mode(8,gpio.OUTPUT)
    42. gpio.write(8,gpio.LOW)
    43. MqttClient:publish(ClientPublishTopic,"ON-RELAY",1,1,function(client) end)
    44. -- end
    45. -- end
    46. end
    47. --
    48. if(data == "off") then
    49. -- gpio.write(RELAY_Pin,0)
    50. -- if gpio.read(RELAY_Pin)==0 then
    51. -- if MqttClient ~= nil then
    52. gpio.mode(8,gpio.OUTPUT)
    53. gpio.write(8,gpio.HIGH)
    54. MqttClient:publish(ClientPublishTopic,"OFF-RELAY",1,1,function(client) end)
    55. -- MqttClient:publish(ClientPublishTopic,"OFF-RELAY",1,1,function(client) end)
    56. -- end
    57. -- end
    58. end
    59. uart.write(0,data)
    60. end)
    61. tmr.alarm(2,10,1,function()
    62. if UartReceCnt ~= 0 then
    63. if UartReceTempCnt == UartReceCnt then
    64. UartReceTempCnt = 0
    65. UartReceCnt = 0
    66. --send to-Mqtt
    67. if MqttClient ~= nil then
    68. MqttClient:publish(ClientPublishTopic,UartReceData,1,1,function(client) end)
    69. end
    70. else
    71. UartReceTempCnt = UartReceCnt
    72. end
    73. end
    74. end)
    75. uart.on("data",0,function(data)
    76. UartReceData = UartReceData..data
    77. UartReceCnt = UartReceCnt + 1
    78. end,0)
    79. printip = 0
    80. wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
    81. printip = 0
    82. end)
    83. wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
    84. if printip == 0 then
    85. print("+IP "..T.IP)
    86. end
    87. printip = 1
    88. end)

    ESP8266 模块连接emqtt服务器进行远程控制 - 图1

    ESP8266 模块连接emqtt服务器进行远程控制 - 图2

    ESP8266 模块连接emqtt服务器进行远程控制 - 图3

    模块通过串口发送数据
    ESP8266 模块连接emqtt服务器进行远程控制 - 图4

    PC客户端发送”open”开继电器
    ESP8266 模块连接emqtt服务器进行远程控制 - 图5ESP8266 模块连接emqtt服务器进行远程控制 - 图6

    PC客户端发送”close”关继电器
    ESP8266 模块连接emqtt服务器进行远程控制 - 图7