所有AT指令:
AT+QMTCFG MQTT 参数配置
AT+QMTOPEN:打开 MQTT 客户端网络。
AT+QMTCLOSE:关闭 MQTT 客户端网络
AT+QMTCONN:连接 MQTT 服务器。
AT+QMTDISC:断开 MQTT 服务器。
AT+QMTSUB:订阅主题。
AT+QMTPUB:发布消息。
AT+QMTUNS:退订主题。
连接MQTT服务器顺序:
1、AT+QMTCFG:可选指令,连接发起前配置,如不配置则按默认值连接。
2、AT+QMTOPEN
3、AT+QMTCONN
按照这个步骤,就能将你的BC20连接至MQTT服务器。但是需要注意的一点,在AT+QMTOPEN之后返回打开成功的提示后,必须在短时间内(大概10秒以内吧)发起AT+QMTCONN指令,不然MQTT服务器会断开BC20的连接。这点很重要。
命令详解:
在每条指令的参数中,都包含一个TCP_connectID参数,可选值为0--5,这个参数个人认为是将MQTT分为6条不同配置的通道,应该是可以支持同时连接6条MQTT服务器连接。没有测试,都是臆想。
AT+QMTCFG
分为若干条子指令
1、数据格式设置:AT+QMTCFG="dataformat",<TCP_connectID>[,<send_format>,<recv_format>]
send_format和recv_format:可选值0(文本格式)、1(十六进制格式)
2、连接保活时间(心跳)设置:AT+QMTCFG="keepalive",<TCP_connectID>[,<keep_alive_time>]
keep_alive_time:可选值0--3600,默认值120。MQTT规定,在心跳的1.5倍时长内,没有收到客户端消息,则断开客户端的连接,也就是说,如果设置了100秒的心跳时间,在150秒没有收到客户端的心跳信息,则会断开客户端的连接。此处如果设置为0,将不断开连接。
3、断开后是否保留信息设置:AT+QMTCFG="session",<TCP_connectID>[,<clean_session>]
clean_session:断开连接后,是否保留客户端订阅的消息,可选值0(保留)、1(不保留)。
4、发送超时设置:AT+QMTCFG="timeout",<TCP_connectID>[,<pkt_timeout>,<retry_times>,<timeout_notice>]
pkt_timeout:数据包传送超时时间。取值范围1--60。默认值:10。
retry_times:超时重发次数。取值范围0-10.默认值:3。
timeout_notice:是否上报超时。取值0、1,这里的上报其实就是AT指令的回显。
0:不上报。
1:上报。
5、遗嘱消息设置:AT+QMTCFG="will",<TCP_connectID>[,<will_fg>,<will_qos>,<will_retain>,<will_topic>,<will_msg>]
will_fg:取值0、1
0:不设置遗嘱消息。
1:设置遗嘱消息。
will_qos:QoS级别,取值0--2。
0:最多发一次。
1:至少发一次。
2:只发一次。
will_retain:遗嘱发送设置。取值0、1
0:订阅者收到遗嘱消息后,该消息不保留。
1:订阅者收到遗嘱消息后,该消息会保留。
will_topic:消息主题。最大长度255。
will_msg:发送到主题的消息内容。最大255。
6、MATT协议版本设置:AT+QMTCFG="version",<TCP_connectID>[,<version>]
version:可选值:3、4
3:MQTT v3.1。
4:MQTT v3.1.1。
7、阿里云连接设置:AT+QMTCFG="aliauth",<TCP_connectID>[,<product_key>,<device_name>,<device_secret>]
product_key:阿里云产品密钥。最大长度64。
device_name:阿里云设备名称。最大长度64。
device_secret:阿里云设备凭证。最大长度64。
8、回显数据设置:AT+QMTCFG="echomode",<TCP_connectID>[,<echo_mode>]
echo_mode:是否想串口回显输入的数据,取值范围0、1。
0:不回显。
1:回显。
9、是否启用SSL设置:AT+QMTCFG="ssl",<TCP_connectID>[,<SSL_enable>[,<SSL_contextID>,<SSL_connectID>]]
SSL_enable:是否启用SSL。
0、不使用SSL。
1、使用SSL。
SSL_contextID:SSL上下文标识符,取值1--3。
SSL_connectID:SSL Socket标识符,取值0-5。
AT+QMTOPEN
AT+QMTOPEN=<TCP_connectID>,<host_name>,<port>、
host_name:MQTT服务器地址,可以是IP或域名,最大长度150。
port:MQTT服务器端口号,取值范围:1~65535。
执行结果:
参数1:TCP_connectID
参数2:
-1:打开网络失败
0 :打开网络成功
AT+QMTCLOSE
AT+QMTCLOSE=<TCP_connectID>
执行结果:
参数1:TCP_connectID
参数2:
-1:关闭网络失败
0:关闭网络成功
AT+QMTCONN
AT+QMTCONN=<TCP_connectID>,<clientID>[,<username>[,<password>]]
clientID:客户端ID。最大长度128。
username:客户端名称。最大长度256。
password:客户端密码。最大长度256。
执行结果:
参数1:TCP_connectID
参数2:
0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
2 数据包发送失败
参数3:
0 接受连接
1 拒绝连接:不支持的协议版本
2 拒绝连接:拒绝标识符
3 拒绝连接:服务器不可用
4 拒绝连接:用户名或密码错误
5 拒绝连接:未授权

AT+QMTDISC
AT+QMTDISC=<TCP_connectID>
执行结果:
参数1:TCP_connectID
参数2:
-1 断开连接失败
0 断开连接成功
AT+QMTSUB
AT+QMTSUB=<TCP_connectID>,<msgID>,<topic1>,<qos1>[,<topic2>,<qos2>…]
msgID:消息ID,取值范围1--65535。这个参数个人感觉随便取,不象OneNet平台需要填写服务器返回的值。
topic1:订阅的主题,最大长度255。
qos1: 0 最多发送一次
1 至少发送一次
2 只发送一次
topic2....和qos2....成对出现,表示可以同时订阅N个主题。
执行结果:
参数1:TCP_connectID
参数2:msgID
参数3:0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
2 数据包发送失败
参数4: 若<参数3>=0,则为已确认 QoS 等级的矢量;参数取值 128 表示服务器拒绝订阅;
若<参数3>=1,则表示数据包重传次数;
若<参数3>=2,则不显示。
AT+QMTUNS--主题退订
AT+QMTUNS=<TCP_connectID>,<msgID>,<topic1>[,<topic2>…]
msgID:消息ID,取值范围1--65535。
topic1:订阅的主题,最大长度255。
topic2....:表示可以同时退订N个主题。
执行结果:
参数1:TCP_connectID
参数2:msgID
参数3:0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
AT+QMTPUB--发布消息
AT+QMTPUB=<TCP_connectID>,<msgID>,<qos>,<retain>,<topic>,<msg>
msgID:消息ID,取值范围1--65535。
qos:0 最多发送一次
1 最少发送一次
2 只发送一次
retain:0 消息发送到当前订阅者后,服务器不保存消息。
1 消息发送到当前订阅者后,服务器保存消息。
topic:订阅的主题,最大长度255。
msg:消息内容。
执行结果:
参数1:TCP_connectID
参数2:msgID
参数3:0 数据包发送成功且从服务器接收 ACK(当<qos>=0 时,发布的消息无需 ACK)
1 数据包重传
2 数据包发送失败
内容摘抄自移远BC20的AT指令手册以及自己的理解。