Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本3.1和3.1.1,这里使用该服务器进行测试。针对该服务器更详细的介绍也可以参考 https://www.jianshu.com/p/b6a75bfbe82f 。
MQTT有个重要的参数QOS,因下面使用较多,这里列出便于后续查看:
AT+ECMTOPEN=<tcpconnectID>,“<host_name>”,<port>
<tcpconnectID>整型。 MQTT Socket 标识符。范围: 0~4
<host_name> IP 地址或域名
<port>整型。服务器端口
示例:AT+ECMTOPEN=0, "test.mosquitto.org",1883 //建立 tcp
返回值:+ECMTOPEN:<tcpconnectID>,<result>
<tcpconnectID>Integer type,MQTT socket identifier. The value is 0
<result>1 Failed to open network,0 Opened network successfully
AT+ECMTCONN=<tcpconnectID>,“<clientID>”[,“<username>”[,“<password>”]]
<tcpconnectID> MQTT socket identifier. The value is 0
“<clientID>” 用户不指定标准服务器会自行创建
“<username>”,“<password>” 标准MQTT服务器不使用
示例:AT+ECMTCONN=0 //在 mosquitto 平台上注册设备
返回值:+ECMTCONN:<tcpconnectID>,<result>[,<ret_code>]
AT+ECMTSUB=<tcpconnectID>,<msgID>,“<topic>”,<qos>
<tcpconnectID> MQTT socket identifier. The value is 0
<msgID>任意填写,Message identifier of packet. The range is 1-65535
<topic>String type,Topic that the client wants to subscribe to or unsubscribe from.
<qos> Message QoS, can be 0,1 or 2
示例:AT+ECMTSUB=0,1,”test”,2 //订阅 topic
返回值:+ECMTSUB:<tcpconnectID>,<msgID>,<result>[,<value>]
额外指令:AT+ECMTUNS=0,4, “test” //取消订阅 topic
AT+ECMTPUB=<tcpconnectID>,<msgID>,<qos>,<retain>,“<topic>”,“<payload>"
<tcpconnectID> MQTT socket identifier. The value is 0
<msgID> Message identifier of packet.
<qos> Message QoS, can be 0,1 or 2
<retain> 0 Server should not retain the message 1 Server should retain the message
<topic>String type
<payload>String type
示例:AT+ECMTPUB=0,0,0,0,"test","hello" //发送数据给 mosquitto 平台
+ECMTPUB:<tcpconnectID>,<msgID>,<result>[,<value>]
额外指令:AT+ECMTDISC=0 //删除 mqtt client 和 mqtt 连接
MQTT协议是广泛应用的物联网协议,使用测试MQTT协议需要MQTT的代理。有两种方法使用MQTT服务,一是租用现成的MQTT服务器,如阿里云,百度云,华为云等公用的云平台提供的MQTT服务,使用公用的MQTT服务器的好处是省事,但如果仅仅用于测试学习还需要注册帐号,灵活性差些,有的平台还需要付费。另一方法是自己使用开源的MQTT组件来搭建。MQTT服务器非常多,如apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等。
这里介绍的是用轻量级的mosquitto开源项目来搭建一个属于自己的MQTT服务器。
第一步:需要安装一台linux主机,这不多介绍,可以使用真机安装也可以使用虚拟机安装。如果仅仅是自己测试使用都可以。
第二步:下载mosquitto需要的依赖
sudo apt-get install libssl-devsudo apt-get install uuid-devsudo apt-get install cmake
第三步:下载mosquitto并解压,现在mosquitto官网最新的版本是1.5.1
tar xzvf mosquitto-1.5.1.tar.gz
第四步:编译
cd mosquitto-1.5.1/
make
make install
第五步:启动mosquitto
./mosquitto -v
1535473957: mosquitto version 1.5.1 starting
1535473957: Using default config.
1535473957: Opening ipv4 listen socket on port 1883.
1535473957: Opening ipv6 listen socket on port 1883.
这时候mosquitto就会以默认的参数启动。如果需要带配置文件可以修改配置文件mosquitto.conf,
启动时候加上参数 -c,
./mosquitto -c mosquitto.conf
可以看到,mosquitto监听的端口为1883.
这时候我们的MQTT服务器就搭建好了。可找一个mqtt客户端来测试一下。
先发布一个主题“home/garden/fountain/2”
内容是“hello world”
这时候在mosquitto会打印出下面的log
535474247: New connection from 192.168.1.105 on port 1883.
1535474247: New client connected from 192.168.1.105 as MQTT_FX_Client (c1, k60).
1535474247: No will message specified.
1535474247: Sending CONNACK to MQTT_FX_Client (0, 0)
1535474307: Received PINGREQ from MQTT_FX_Client
1535474307: Sending PINGRESP to MQTT_FX_Client
1535474339: Received PUBLISH from MQTT_FX_Client (d0, q0, r0, m0, 'home/garden/fountain/2', ... (12 bytes))
1535474367: Received PINGREQ from MQTT_FX_Client
1535474367: Sending PINGRESP to MQTT_FX_Client
订阅主题“home/garden/fountain/2”
可以看到收到了自己发布的消息。
用wireshark抓包
可以看到抓到了一个MQTT的publish的报文。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)