【技术分享】以永利yl23455MB960/860模组为例,教你急剧接入MQTT和谈(下)
2022/02/18
浏览量:5265
??随着5G时期的来临,万物互联的伟大构思在成为现实。2021年全球智能物联网处于发作式增长通路,设备数量超过250亿台。海量的设备接入和设备治理对网络带宽、通讯和谈以及平台服务架构都带来了很大挑战。
??通讯和谈作为联通物与物的桥梁,在物联网架构中起着关键作用。上周我们已经在《【技术分享】以永利yl23455MB960/860模组为例,教你急剧接入MQTT和谈(上)》一文中介绍了MQTT和谈的基础知识,本周将介绍接入阿里云平台MQTT和谈的具体步骤,援手各人急剧上手。
??MQTT AT指令接入
??1、设置服务端IP或域名
??AT+MQTTCFG="host",0,"host_name",1883
??:服务端的IP或域名:1~2000字节字符串。阿里云公共事俘接入:a1oGs******.iot-as-mqtt.cn-shanghai.aliyuncs.com
??a1oGs******为本示例产品的productKey。
??cn-shanghai为本示例地点地域。
??示例
??AT+MQTTCFG="host",0,"gg0*******.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883
??实现注明
??● 若是设置IP无需任何操作,只需IP满足地址体式。
??● 若是设置域名,需先使用AT+CFUN=0和AT+NCONFIG=PCO_IE_TYPE,PCO这两条AT号令开启DNS服务器,再次沉启,之后能力使用域名衔接。
??2、设置客户端标识
??AT+MQTTCFG="clientid",,
??< Link_ID > 衔接ID:取值0~2。
??客户端标识符:字符串类型,1~128字节字符串。
??示例
??AT+MQTTCFG="clientid",0,"8677**********|securemode=2,signmethod=hmacsha1|"
??实现注明
??若是衔接NB-IOT平台,则需凭据平台规定来设置客户端标识。
??3、衔接服务端
??AT+MQTTCONN=,,,,
??< Link_ID > 衔接ID:取值0~2。
??SSL TCP衔接使能:
??0:不选取;
??1:选取SSL TCP衔接。
??will_flag 遗嘱标志,取值0或1:
??0:不带遗嘱;
??1:CONNECT报文带有遗嘱。
??用户名:0~512字节的字符串。
??密码:0~512字节的字符串。
??注:阿里云平台用户名及密码需用三元组天生,天生方式请参考阿里云平台提供的密码天生文档。
??示例
??AT+MQTTCONN=0,0,0,"8677******&gg0*******","91C3E702***************************755*****"
??实现注明
??在衔接前必要设置服务端ip和clientid,分歧的平台衔接使用的用户名和密码必要凭据平台要求进行设置。若是是加密衔接还必要设置证书,并使ssl_enable为1。设置will_flag为1时,还必要设置遗嘱。
??衔接失败时的谬误码如下:
??● 0:返回正确;
??● 1:未知谬误;
??● 2:申请内存失败;
??● 3:参数查抄谬误;
??● 80:网络衔接状态谬误(但是未拨号/功夫不合/服务器关关);
??● 81:MQTT设置版本谬误;
??● 82:clientid谬误;
??● 83:服务器回绝客户端衔接;
??● 84:用户名或者密码谬误;
??● 85:订阅失败 #订阅失败会导致断连;
??● 86:取缔订阅失败;
??● 87:颁布失败;
??● 88:当前未衔接;
??● 89:当前已有衔接又再次提议衔接;
??● 90:创建客户端失败;
??● 91:该linkid已创建客户端又再次提议创建;
??● 92:该linkid未创建客户端;
??● 93:当前MQTT状态不允许执行该操作。
??查问衔接时的状态如下:
??● state=1 MQTT is initial(未配置)
??● state=2 MQTT is connecting
??● state=3 MQTT is connected
??● state=4 MQTT is disconnected
??注明:必要把稳,MQTT内部实现是先使用设置的MQTT版本衔接,失败之后会使用MQTT3.1版正本衔接。
??4、订阅MQTT新闻
??AT+MQTTSUB=,,,[,,][,,]
??< Link_ID > 衔接ID:取值0~2。
??报文标识符:取值1~65535。
??主题名:0~512字节字符串。一次最多可订阅3个主题。
??订阅新闻QOS等级:取值0~2。
??示例
??AT+MQTTSUB=0,1,"/gg0*******/867********/user/test",1
??收←◆+MQTTSUBACK: 0,1,0
??OK
??收←◆+MQTTRECV: 0,0,0,0,/gg0*********/867*********/user/test,qtwtewtytweyt
??实现注明
??订阅异常蕴含:
??● 报文处置异常,蕴含非衔接、网络异常状态下收到上位机下发该AT号令、报文参数异常等。
??● 超时未收到服务端回复,蕴含服务端回复的报文异常。
??● 返回85订阅失败,断连。
??5、颁布一个新闻
??AT+MQTTPUB=,,,,,
??< Link_ID > 衔接ID:取值0~2。
??报文标识符:取值1~65535。
??颁布新闻QOS等级:取值0~2。
??保留标志:取值0~1。
??主题名:0~512字节字符串。
??有效载荷:0~1500字节字符串。
??示例
??AT+MQTTPUB=0,1,0,0,"/gg0*******/8677*********/user/test","this is a test"
??收←◆+MQTTPUBACK: 0,1,0
??OK
??收←◆+MQTTRECV: 0,0,0,0,/gg0********/8677*********/user/test,this is a test
??实现注明
??●该号令用于颁布时,若是在timeout功夫内没有收到报文确认,则会打印ERROR。在收到一个QOS大于0的报文确认新闻时,会打印+MQTTPUBACK_MSGID:,其中msgid为PUB报文的信息id。当查问颁布新闻时,查问的了局为颁布的次数。当MQTT服务器不支持topic为0字节的字符串时,若是发送0字节的topic新闻,则会导致断连。
??●该号令最多允许2个颁布新闻在沉传队列中,超过2个颁布新闻会直接返回ERROR,不会发送。沉传队列会尝试5次沉传,之后就会断根沉传队列里的颁布新闻。
??●在断连之后计数会清零。计数达到最大值建议回转,最大值4294967295(unsigned int)。在NB-IoT场景下最大的发包长度不能超过SEND_MAX_LEN(1358)字节,若是超出长度则会发送失败。失败时会打印现实的发送长度,用户必要保障发包长度不能超过SEND_MAX_LEN(1358)字节长度。
??例如:用户在非加密衔接的情况下发送1500字节内容,现实包长度为包头长度和包体长度之和,为1505字节。包头长度为1505-1500=5字节,凭据SEND_MAX_LEN(1358)长度限度,能够发送的包体的长度为SEND_MAX_LEN-包头长度=1358-5=1353字节.
??[15:28:41.451]→◇AT+MQTTPUB=0,1,0,0,"","adebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcba
??bcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebd
??badebcbcbabcbdbbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdba
??debcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbef
??bbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebf
??bbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabad
??bceebbbebfadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbeb
??fbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbaba
??dbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbd
??bdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebc
??bcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbe
??bebdbadebcbcbabcbdbdbdbadbabadbceebbbebfadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbade
??bcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbb
??ebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbb
??abbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbc
??eebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbd
??badbabadbceebbbebfbbabbdbbefbbebebd
??[15:28:41.461]收←◆
??[Error]:Please don't send a message longer than 1358 bytes. Message length which?contains header and payload is 1505 bytes.
??[15:28:41.969]收←◆
??+MQTTCLOSE=0,128
??ERROR: 0,1,110
??ERROR