第一次参加物联网比赛,什么也不会,遇到了一些问题,在网上搜索相关资料还很少,于是把遇到的问题和看到别人遇到的问题稍微整理了一下放在这里,供后人参考。(主要是AT指令遇到的一些问题)
文章参考了华为的文档。关于指令的具体内容可以看链接里的内容,以下是遇到的一些问题。
AT+HMCON ERROR
这条指令的格式如下
AT+HMCON=bsmode,lifetime,serverip,serverport,deviceid,passwd,codec
其中bsmode表示一个模式,默认值为0;lifetime表示保持心跳时间,默认值为300,建议大于等于30;serverip是设备接入服务器地址或者BS地址,这个值可以在总览的当前实例下的接入信息按钮中查看。
把对应的接入地址保存下来,例如我们的是设备接入,使用的是MQTT协议,把对应的地址保存一下就行了。serverport在刚刚查看接入地址的地方可以顺带查看,例如我们使用MQTT协议,对应的就是1883端口。deviceid就是设备id,在设备栏的所有设备分栏中可以查看不同设备对应的设备id。pwd是用户在注册设备时自己设置的。codec是payload的编码方式,默认为0,表示原始编码,1表示十六进制编码。如下是一个指令的模板,只要把具体信息填进入就行。
AT+HMCON=0,60,"网址","1883","设备ID","pwd",0
如果出现ERROR可以检查一下自己的接入网址有没有搞错,接入网址的后面一部分一般是服务所在的区域加上华为的后缀,例如北京四的后缀是cn-north-4.myhuaweicloud.com,如果没有错可以看下自己的端口有没有搞错。根据群里的老师说error后面的数字代表的是哪一块有问题,例如error6,可能就是密码有问题,但实际上可能需要把每一块都核对一下。
这里还有一个特殊情况,如果出现了AT+HMCON error11
,这代表你之前已经连接上华为云了,现在重复连接导致报错,可以加一条AT+HMDIS
指令,先断开连接,然后重新连接。
AT+HMPUB
原先用的AT+HMSUB
指令,但是没有摸索明白,最后用这条指令实现了。这条指令格式如下
AT+HMPUB=qos,topic,payload_len,payload
其中qos是mqtt的qos,取值0~2,默认值为0;topic是指定的topic,默认为上报属性的topic;len是待发送数据长度,单位为字节;payload是转换为ascii码的数据,最大长度为1024字节。
指令示例如下:
AT+HMPUB=1,"$oc/devices/设备ID/sys/properties/report",74,"{\"services\":[{\"service_id\":\"服务ID\",\"properties\":{\"属性名称\":属性值}}]}"
只要把示例中的中文和ID替换成实际的值就可以了。其中服务ID可以在产品中点击查看,然后在模型定义中查看,属性名称就在模型定义这一块里。
这条指令最容易出现的一个问题就是len的数值与实际的数据长度不符,这样就会导致error,所以一定要核实payload的长度,数长度时要把{\"services\":[{\"service_id\":\"服务ID\",\"properties\":{\"属性名称\":属性值}}]}
中除了\
符号以外的符号数上。