本文将详细介绍如何搭建自己的MQTT Broker,并使用大夏龙雀科技4G Cat1 CT511-AT0模块进行MQTT联网实战。通过本教程,您将学会如何配置模块、连接MQTT服务器、订阅和发布消息等操作。
在开始之前,您需要搭建自己的MQTT Broker。匿名的Broker不需要用户名和密码即可使用。关于如何搭建MQTT Broker,可以参考以下链接:
大夏龙雀科技4G Cat1 CT511-AT0模块现以9.9元的价格提供样品。
相关文档如下:
DX-CT511&CT511N_串口UART_应用指导.pdf
按照以下步骤连接模块:
模块串口默认配置如下:
模块支持三种工作模式:
说明:模块上电后默认进入AT指令模式。
打开电脑上的XCOM软件,并连接串口设备:
发送AT
指令后,如果收到OK
回复,说明模块工作正常:
接下来,参考以下图片进行MQTT连接配置:
当设备需要接入中国移动的NB-IoT网络时,需要通过以下指令设置APN。如果APN配置错误,设备将无法成功连接到网络。
bashAT+QICSGP=1,1,"cmnbiot","",""
OK
bashAT+NETOPEN OK +NETOPEN: SUCCESS
设置客户端ID。指令 AT+MCONFIG=<clientid>,[<username>,<password>][,<will_flag>,<will_qos>,<will_retain>,<will_topic>,<will_message>]
用于配置MQTT连接的客户端ID(<clientid>
)、用户名(<username>
,最大长度256)、密码(<password>
,最大长度256)以及遗嘱相关参数,包括遗嘱开关(<will_flag>
,0表示禁用,1表示启用)、遗嘱QoS(<will_qos>
,0-2分别表示最多一次、最少一次、只有一次)、遗嘱保留标志(<will_retain>
,0表示服务器不存储,1表示存储)、遗嘱主题(<will_topic>
,最大长度256)和遗嘱内容(<will_message>
,最大长度1024),配置成功后返回 OK
;通过 AT+MCONFIG?
可以查询当前配置,返回格式为 <clientid>,[<username>],[<password>],[<will_flag>,<will_qos>,<will_retain>,<will_topic>,<will_message>]
,分别对应客户端ID、用户名、密码及遗嘱参数。
通过以下指令配置MQTT连接的客户端ID:
bashAT+MCONFIG="4G_TEST",,,1,2,1,"hello/topic","mcu is lost"
OK
设备没心跳后,broker会发布遗嘱消息:
root@racknerd-b12da5f:~/mqtt5# mosquitto_sub -v -t 'hello/topic' -h localhost -p 9000 hello/topic mcu is lost
配置MQTT服务器信息:通过指令 AT+MIPSTART=<ipaddress>,<port>[,<version>]
可以配置MQTT服务器的IP地址(最大长度256字符)、端口号(范围0-65535,默认值为0)以及协议版本(3表示3.1版本,4表示3.1.1版本,可选),配置成功后返回 OK
,并通过 +MIPSTART: <result>
反馈配置结果(SUCCESS
表示成功,FAILURE
表示失败);使用 AT+MIPSTART?
可以查询当前配置,返回格式为 <port>,<version>
,分别表示当前端口号和协议版本。
通过以下指令配置MQTT服务器的IP地址、端口号和协议版本:
bashAT+MIPSTART=198.12.95.182,9000,4 OK +MIPSTART: SUCCESS
连接MQTT服务器。指令 AT+MCONNECT=<clean_session>,<keepalive>
用于连接MQTT服务器,其中 <clean_session>
指定会话模式(0表示持久会话模式,1表示临时会话模式),<keepalive>
设置心跳间隔时间(范围30-1800秒),连接成功后返回 OK
,并通过 +MCONNECT: <result>
反馈连接结果(SUCCESS
表示成功,FAILURE
表示失败);使用 AT+MCONNECT?
可以查询当前连接配置,返回格式为 <clean_session>,<keepalive>
,分别表示会话模式和心跳间隔。
通过以下指令连接MQTT服务器:
bashAT+MCONNECT=1,60 OK +MCONNECT: SUCCESS
订阅主题。指令 AT+MSUB=<topic>,<qos>
用于订阅MQTT主题,其中 <topic>
为主题名称(最大长度256,最多可订阅50个主题),<qos>
为服务质量等级(0表示最多一次,1表示最少一次,2表示只有一次),订阅成功后返回 OK
,并根据 AT+MQTTMIX
的设置反馈结果:当 AT+MQTTMIX=0
时,通过 +MSUB:<result>
返回订阅结果(SUCCESS
表示成功,FAILURE
表示失败);当 AT+MQTTMIX=1
时,通过 +MSUBID: <packetid>
返回数据包标识符(范围1-65535),并在订阅确认后通过 +MSUBACK: <packetid>
返回确认信息;使用 AT+MSUB?
可以查询当前订阅配置,返回格式为 <topic>,<qos>
,分别表示主题和服务质量等级。
<qos>
是MQTT协议中 服务质量等级(Quality of Service, QoS) 的参数,用于定义消息传递的可靠性和保证机制。它有三个等级,分别如下:
就像你随便把信扔进邮筒,邮局会尽力送,但不会告诉你信有没有送到。如果信丢了,你也不知道。
这次邮局会确认信送到了。如果没收到确认,邮局会再送一次。但可能会发生“信送到了,但邮局以为没送到,又送了一次”的情况,导致你的朋友收到两封信。
这次邮局会确保信只送一次,既不会丢,也不会重复。它会用一套复杂的流程来保证这一点。
<qos>
等级越高,消息传递的可靠性越强,但网络开销和延迟也会增加。选择适当的 QoS 等级需要根据具体应用场景的需求权衡。
通过以下指令订阅MQTT主题:
bashAT+MSUB="hello/topic_mcu_rev",0
OK
+MSUB: SUCCESS
比如我在linux客户端往这个主题发消息:
mosquitto_pub -t 'hello/topic_mcu_rev' -m 'hello MCU' -h localhost -p 9000
可以看到收到了消息:
发布消息。指令 AT+MPUB=<topic>,<qos>,<retain>,<message>
用于发布MQTT消息,其中 <topic>
为主题名称(最大长度256),<qos>
为服务质量等级(0表示最多一次,1表示最少一次,2表示只有一次),<retain>
为保留标志(0表示服务器不存储消息,1表示存储消息和QoS),<message>
为消息内容(最大长度512),发布成功后返回 OK
,并根据 AT+MQTTMIX
的设置和 QoS 等级反馈结果:当 AT+MQTTMIX=0
时,通过 +MPUB:<result>
返回发布结果(SUCCESS
表示成功,FAILURE
表示失败);当 AT+MQTTMIX=1
且 QoS=1
时,通过 +MPUBACK: <packetid>
返回数据包标识符(范围1-65535);当 AT+MQTTMIX=1
且 QoS=2
时,通过 +MPUBREC: <packetid>
和 +MPUBCOMP: <packetid>
分别返回消息接收和完成确认;使用 AT+MPUB?
可以查询当前发布配置,返回格式为 <topic>,<qos>,<retain>,<message>
,分别表示主题、服务质量等级、保留标志和消息内容。
通过以下指令发布MQTT消息:
bashAT+MPUB="hello/topic",0,0,"hello world"
OK
在别的客户端订阅了这个主题的会收到消息:
root@racknerd-b12da5f:~/mqtt5# mosquitto_sub -v -t 'hello/topic' -h localhost -p 9000 hello/topic hello world # 这是收到的消息
取消订阅
+MUNSUB="hello/topic". 可以订阅多个主题,所以不需要的主题也可以取消。bashAT+MUNSUB="hello/topic"
OK
+MUNSUB: SUCCESS
通过以下指令断开MQTT连接:
bashAT+MDISCONNECT
通过以下指令释放MQTT资源:
bashAT+MIPCLOSE
通过以下指令查询SIM信号质量:
bashAT+CSQ +CSQ: 21,99 OK
通过以下指令Ping服务器,测试网络连通性:
bashAT+MPING=test.ranye-iot.net,1 OK +MPING:3,0,0,0,0,0,0
通过本教程,您已经成功配置并连接了大夏龙雀科技4G Cat1 CT511-AT0模块到MQTT服务器,并进行了消息的订阅和发布。希望本教程对您的开发工作有所帮助。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!