了解MQTT数据包形成 参考 :http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718027

Windows 下 MQTT 服务器搭建之Apollo

(1)下载 Apollo

目录

Windows 下 MQTT 服务器搭建之Apollo

(1)下载 Apollo

(2)安装

(3)安装 JDK

(4)创建服务器实例

三、MQTT 客户端测试

在本地Windows上安装MQTT服务器测试通信

下面是esp8266模块连接mqtt服务器的测试程序:

模块与另一个客户端通信状态


下载:Download it today!

(2)安装

解压得到如下文件。

这里需要注意了,解压 apache-apollo-1.7.1 所在文件夹名称不能有 中文或者空格,后面会提到出现什么错误。

Windows 下 MQTT 服务器搭建之Apollo - 图1

进入 apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夹

按住 shift键选择 apollo.cmd 再点击右键。选择 在此处打开命令窗口。

Windows 下 MQTT 服务器搭建之Apollo - 图2

然后在 cmd 窗口执行 apollo.cmd。然后就可以看到发生错误。上面Ubuntu下安装时已经提到,还需要安装 JDK。

Windows 下 MQTT 服务器搭建之Apollo - 图3

(3)安装 JDK

WIN7 64位系统安装JDK并配置环境变量:https://jingyan.baidu.com/article/3c343ff70bc6ea0d377963df.html

下载:Java SE Development Kit 8 Downloads

Windows 下 MQTT 服务器搭建之Apollo - 图4

Windows 系统是多少位的,这个应该很清楚吧。查看 我的电脑->属性,查看有关计算机的基本信息。

Windows 下 MQTT 服务器搭建之Apollo - 图5

我的电脑为 win 10 64位,下载并安装 jdk-8u144-windows-x64.exe

然后配置 JDK 环境变量

我的电脑->属性->高级系统设置->高级->环境变量

Windows 下 MQTT 服务器搭建之Apollo - 图6

这部分我们之前将 FFmpeg 的Windows安装说明时有提到过的。可看到有用户变量和系统变量。

修改“用户变量”为当前用户使用,其他 Windows 用户不能够使用。如果要使每个用户都能够使用,你需要修改 "系统变量" 。

Windows 下 MQTT 服务器搭建之Apollo - 图7

注意,不要够删除在变量中原来已有的内容。如果之前已存在变量,则在其之后用分号“;”分隔,然后添加。

Windows 下 MQTT 服务器搭建之Apollo - 图8

我们只让当前用户可用,修改用户变量即可。

在用户环境变量中新建变量 JAVA_HOME,设置变量值 F:\Program Files\Java\jdk1.8.0_144

Windows 下 MQTT 服务器搭建之Apollo - 图9

新建PATH,设置变量值%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

Windows 下 MQTT 服务器搭建之Apollo - 图10

新建CLASSPATH,设置变量值.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar注意前面的.表示当前目录。然后点击“确定”按钮。

Windows 下 MQTT 服务器搭建之Apollo - 图11

到此,配置完成。打开 cmd 测试一下配置是否成功。

输入java -version,显示版本java version "1.8.0_144",输入javac -version,也显示javac 1.8.0_144,说明JDK安装及环境变量配置成功。

Windows 下 MQTT 服务器搭建之Apollo - 图12

然后接着上面来讲。进入 apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夹

按住 shift键选择 apollo.cmd 再点击右键。选择 在此处打开命令窗口。

再次在 cmd 窗口执行 apollo.cmd,可以看到如下的信息。

Windows 下 MQTT 服务器搭建之Apollo - 图13

(4)创建服务器实例

参看:Getting Started Guide

在 CMD 命令窗口输入 apollo create mybroker ,当然 mybroker 这个名字可以随便起。

Windows 下 MQTT 服务器搭建之Apollo - 图14

然后查看 mybroker 可以发现里面包含有很多信息,其中etc\apollo.xml文件下是配置服务器信息的文件,etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,可以修改原始的admin=password,可以接着换行添加新的用户名密码。

Windows 下 MQTT 服务器搭建之Apollo - 图15

bin:保存与该实例关联的执行脚本。etc:保存实例配置文件data:保存用于存储持久消息的数据文件日志:保存旋转日志文件tmp:保存在代理运行之间安全删除的临时文件

打开cmd,运行 apache-apollo-1.7.1\bin\mybroker\bin\apollo-broker.cmd run 开启服务器,如下图所示:

Windows 下 MQTT 服务器搭建之Apollo - 图16

这里需要注意了,所在 apache-apollo-1.7.1 所在文件夹名称不能有 中文或者空格。因为我上面的是存放在 360安全浏览下载 这个目录下了。导致出现系统找不到指定的路径。

Windows 下 MQTT 服务器搭建之Apollo - 图17

然后打开浏览器上,输入 http://127.0.0.1:61680/https://127.0.0.1:61681/

即可进入 Apollo Console 窗口。

Windows 下 MQTT 服务器搭建之Apollo - 图18

默认的登录id和密码是 admin 和 password

Windows 下 MQTT 服务器搭建之Apollo - 图19

三、MQTT 客户端测试

Apollo 服务器安装已经讲完,接下来简单测试一下发布订阅。

这里面网上有 MQTT协议之Apache Apollo 安装使用 这种文章用的是 java,在Android上测试的。

这就不太适合我了,不懂 Android 蓝瘦香菇啊!

再有一种是用 谷歌浏览器上的 扩展程序 mqttlens

首先添加该插件

Windows 下 MQTT 服务器搭建之Apollo - 图20

点击 获取更多扩展程序

Windows 下 MQTT 服务器搭建之Apollo - 图21

搜索 mqttlens ,最后添加至 CHROME

Windows 下 MQTT 服务器搭建之Apollo - 图22

安装完成!!

下面进行测试

先运行 Apollo 服务器

Windows 下 MQTT 服务器搭建之Apollo - 图23

Windows 下 MQTT 服务器搭建之Apollo - 图24

然后启动 mqttlens

Windows 下 MQTT 服务器搭建之Apollo - 图25

然后点击 Connections+

Windows 下 MQTT 服务器搭建之Apollo - 图26

出现下图,并填写好相关的信息

Windows 下 MQTT 服务器搭建之Apollo - 图27

然后就进入了,订阅发布界面

Windows 下 MQTT 服务器搭建之Apollo - 图28

Windows安装MQTT服务器,到此结束.

在本地电脑端安装MQTT服务器参考: https://blog.csdn.net/qq_29350001/article/details/76680646

在本地Windows上安装MQTT服务器测试通信

Windows 下 MQTT 服务器搭建之Apollo - 图29

Windows 下 MQTT 服务器搭建之Apollo - 图30

我使用我电脑测试mqtt服务器,则mqtt服务器ip是本机的ip, 端口是创建mqtt服务器时,建立tcp连接的那个端口

用户名和密码在安装mqtt服务器时建立的,在文件 "\apache-apollo-1.7.1\bin\mybroker\etc"下 "users.properties"和“groups.properties”文件中修改

Windows 下 MQTT 服务器搭建之Apollo - 图31

Windows 下 MQTT 服务器搭建之Apollo - 图32

Windows 下 MQTT 服务器搭建之Apollo - 图33

Windows 下 MQTT 服务器搭建之Apollo - 图34

本地mqtt服务器测试结果:

Windows 下 MQTT 服务器搭建之Apollo - 图35

下面是esp8266模块连接本地mqtt服务器的测试程序:

设置ESP8266模块连接路由器后创建mqtt客户端连接mqtt服务器

连接远程服务器时需要知道远程服务器ip和本地连接相同

通过smart绑定连接路由器时,模块开始并不知道路由器的连接信息,通过广播让模块知道连接那个网络

mqttclient.lua文件: 再次声明不要在mqttclient.lua文件中添加注释, 在笔记中添加注释只是为了更好的去理解 ,当需要上传该程序到模块时, 要注意把注释全部删掉

  1. MqttServerIP="192.168.0.102" --Mqtt服务器ip 此处是本地电脑ip
  2. MqttServerPort=61613 --Mqtt服务器端口
  3. MqttUserName="admin" --Mqtt服务器用户名
  4. MqttUserPassword="password" --Mqtt服务器用户名密码
  5. MqttLinkStat = 0 --Mqtt服务器连接状态
  6. UartReceData = "" --串口接收数据缓存
  7. UartReceCnt = 0 --串口接收数据计数
  8. UartReceTempCnt = 0 --串口接收数据临时计数
  9. wifi.setmode(wifi.STATION) --模块工作在station模式
  10. local stacfg={
  11. ssid="TP-Link",
  12. pwd="12345678"
  13. }
  14. wifi.sta.config(stacfg) --设置模块station模式参数
  15. wifi.sta.autoconnect(1) --模块自动连接wifi
  16. Clientid = wifi.sta.getmac() --获取模块mac设置为mqtt客户端ID
  17. ClientSubscribeTopic = "AAA" --订阅主题
  18. ClientPublishTopic = "111" --发布主题
  19. MqttClient=mqtt.Client(Clientid,3,MqttUserName,MqttUserPassword) --创建mqtt客户端
  20. MqttClient:lwt(ClientPublishTopic,"offline",1,1) --设置遗嘱
  21. local function ConnectSuccess(client) --连接mqtt服务器成功后的回调函数
  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) --连接mqtt服务器失败后的回调函数
  28. print("MqttServer connect fail")
  29. MqttLinkStat = 0
  30. tmr.start(3)
  31. end
  32. tmr.alarm(3, 2000, 1, function() --用定时器3连接mqtt服务器 回调函数中 / 服务器
  33. MqttClient:connect(MqttServerIP, MqttServerPort, 0,ConnectSuccess,ConnectFailed)
  34. end)
  35. tmr.alarm(2,10,1,function()
  36. if UartReceCnt ~= 0 then
  37. if UartReceTempCnt == UartReceCnt then
  38. UartReceTempCnt = 0
  39. UartReceCnt = 0
  40. --send to-Mqtt
  41. if MqttClient ~= nil then
  42. MqttClient:publish(ClientPublishTopic,UartReceData,1,1,function(client) end)
  43. end
  44. else
  45. UartReceTempCnt = UartReceCnt
  46. end
  47. end
  48. end)
  49. --与mqtt服务器断线处理
  50. MqttClient:on("offline", function(client, topic, data) tmr.start(3) end)
  51. --接收mqtt服务器事件
  52. MqttClient:on("message", function(client, topic, data)
  53. if data == "switch;relay=1" then
  54. gpio.write(2,1)
  55. if gpio.read(2)==1 then
  56. if MqttClient ~= nil then
  57. MqttClient:publish(ClientPublishTopic,"ON-RELAY",1,1,function(client) end)
  58. end
  59. end
  60. end
  61. if data == "switch;relay=0" then
  62. gpio.write(2,0)
  63. if gpio.read(2)==0 then
  64. if MqttClient ~= nil then
  65. MqttClient:publish(ClientPublishTopic,"OFF-RELAY",1,1,function(client) end)
  66. end
  67. end
  68. end
  69. end)
  70. --串口接收事件
  71. uart.on("data",0,function(data)
  72. UartReceData = UartReceData..data
  73. UartReceCnt = UartReceCnt + 1
  74. end,0)
  75. --打印连接wifi后获取的ip
  76. printip = 0
  77. wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
  78. printip = 0
  79. end)
  80. wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
  81. if printip == 0 then
  82. print("+IP->"..T.IP)
  83. end
  84. printip = 1
  85. end)

模块与另一个客户端通信状态

Windows 下 MQTT 服务器搭建之Apollo - 图36

Windows 下 MQTT 服务器搭建之Apollo - 图37

原文:

https://blog.csdn.net/dianzishi123/article/details/82701723