跳转至

华为云

一、华为云概述

华为云物联网平台设备接入云服务(IoTDA)提供海量设备的接入和管理能力,将物理设备连接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助您快速构筑物联网解决方案。

官网地址:设备接入-控制台 (huaweicloud.com)

注意:华为的账号分为华为账号,华为云账号,IAM 账号,注意区别

产品文档:成长地图_设备接入 IoTDA_华为云

二、演示功能概述

本文教你怎么使用 AT 命令,通过几个简单的步骤,就可以让合宙 4G 模组接入华为云。

1. 一机一密接入华为云 ; 2. 使用证书鉴权接入华为云;

三、准备硬件环境

工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下硬件环境。

本文章使用 Air700EMQ 核心板做演示;

参考:硬件环境清单,准备以及组装好硬件环境。

四、准备软件环境

工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下软件环境。

本文章使用到工具:Luatools 下载工具,SSCOM测试工具;

1. Luatools工具

2. SSCOM 串口通信工具

3. 本教程使用的AT固件版本号是:AirM2M_700EMQ_V2019_LTE_AT,如果版本号不正确,参考:固件版本确认和烧录检查确认。

五、需要用到的相关指令

本文主要使用 MQTT 协议接入华为云平台,相关指令点击链接查看合宙 4G 模组 MQTT 指令

六、 华为云操作实例

6.1 云平台配置

6.1.1 登录并开通 IoTDA 实例

登录官网设备接入-控制台 (huaweicloud.com)注册华为云账号开通物联网平台,填写实例名称,标签、实例描述可根据需要选填,完成之后点击立即创建。

注:华为云首页若找不到该入口,在搜索框输入 "设备接入 IoTDA” 关键字进入

点击上面链接,并按照提示完成认证操作(如果已经认证过,则跳过这一步骤)

完成认证后,进入 IoTDA 控制台,点击购买实例,如下图

这里我们为了测试,实例版本选择“标准版”、计费模式选择“按需计费”,实例名称填入“air780e”,收费结算为 0 元,点击立即购买,在弹出页面后点击“提交”。

开通实例后点击“详情”,如下图所示:

接入地址中.iotda 前的数据为 endpoint,即下图中红框处,此信息需要记录下来,供后续使用,如果忘了记录也没有关系,后续可以再重新点开实例详情查看

我们将MQTT连接信息整理如下

----接入地址:
9f36615343.st1.iotda-device.cn-north-4.myhuaweicloud.com
----端口号:
MQTT (1883)
MQTTS (8883)
MQTT over WebSocket (443)

6.1.2 创建产品

操作步骤为:产品---> 创建产品---> 填写信息---> 确定

创建产品后的产品 ID 要记录下来,后面会用到

ID:67235673fc8d5a4ea720bfe7

到此为止,创建产品工作已经完成,同时需要注意将 endpoint产品 ID 记录下来,后续会根据不同注册方式来进行实例讲解。

6.2 设备注册

华为云动态注册即自动注册相当于管理员用操作 api 强制注册,华为云本身并没有直接的自动注册 api,故不建议此方式,本文也不再介绍该注册方式,仅介绍密钥校验(手动注册)方式。

6.2.1 密钥校验(手动注册)

1. 创建设备并获取参数

此注册方式采用一机一密,需要手动创建设备预注册

点击所有设备---> 注册设备---> 填写信息(设备标识码可以填开发板的 IMEI 号)---> 设备认证类型选择密钥

设备创建成功后将密钥复制并记录下来,后面会用到

设备密钥:3a2efeb97b437f087c1fa59fa066454e
设备ID:67235673fc8d5a4ea720bfe7_869329069169988

进入设备详情-> 查看 MQTT 连接参数-> 一键复制后会自动下载一个 TXT 文件,内容包含连接参数

下载的 TXT 文档内容如下:

{
    "username": "67235673fc8d5a4ea720bfe7_869329069169988"    "password": "c37837cf81ed1692fb4a2afee3e47062f1fe2141d7ecb4001bb4038dce151ec3"    "clientId": "67235673fc8d5a4ea720bfe7_869329069169988_0_0_2024103110"    "hostname": "9f36615343.st1.iotda-device.cn-north-4.myhuaweicloud.com"    "port": 8883    "protocol": "MQTTS"
}

6.3 测试连接是否可用

MQTTS 接入方式

按照如上参数,我们可以用 MQTTX 工具测试连接是可以建立成功的,本文以 MQTTS 接入方式接入进行测试。

MQTT 接入方式

6.4 测试主题数据收发

6.4.1 平台预置主题数据收发

设备使用 MQTT 协议接入平台时,平台和设备通过 Topic 进行通信。平台预置的 topic 列表如下:

更详细的方法从参考:Topic 定义,我们选择设备消息相关 Topic 进行数据收发测试,主题分别为

$oc/devices/{device_id}/sys/messages/up            //注意此主题只有服务端可以订阅,{device_id}用创建设备的ID号代替即可
$oc/devices/{device_id}/sys/messages/down          //注意此主题只有设备端可以订阅{device_id}用创建设备的ID号代替即可

如本例中设备端发布主题和服务端发布主题分别为:
$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/up
$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/down

MQTTX 向主题“$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/up”发送{ "temp": "25.00" }平台可以成功接收消息,如下图:

平台向主题“$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/up”发送{ "msg": "ok" }MQTTX 可以成功接收消息,如下图:

接下来我们通过 AT 指令让模组接入华为云 IoTDA

七、Air700EMQ AT 实例

7.1 确认开发板正常开机并联网正常

依次发送如下指令序列确认模组开机正常

AT                    //测试AT指令

AT

OK

ATE0                //关闭回显

ATE0

OK

AT+CSQ            //查询模组信号质量

+CSQ: 3099

OK

AT+CPIN?

+CPIN: READY

OK

AT+CCID        //查询卡ccid,如果AT+CPIN? AT+CCID指令返回错误信息,请检查物联网卡正常(无卡,无流量、锁卡、欠费等)

898604F4152391195302

OK

AT+CGATT?    //AT+CGATT?查询是否注册网络收到+CGATT: 1值是1即为注册成功,正常情况下注册时间不会超过两分钟,如果超过两分钟没有注册可以进入飞行模式五秒后退出再查询,或者直接重启模块。

+CGATT: 1    

OK

AT+CSTT    //AT+CSTT配置网络,非私有APN以外Cat1的固件支持根据卡自动配置APN,直接输入AT+CSTT即可,模块会按照自动获取的APN设置CSTT的APN。

OK

AT+CIICR    //AT+CIICR激活网络,在IP START的状态使用AT+CIICR激活网络

OK

AT+CIFSR    //激活以后通过AT+CIFSR查询是否获取IP,如果成功就可以开始配置TCP连接了,如果不成功使用AT+CIPSHUT关闭移动网络,从AT+CSTT重新进行。

10.177.182.22

7.2 一机一密接入华为云

7.2.1 模组订阅主题与数据接收

执行如下指令序列,可以让模组与 MQTT 服务器建立连接

AT+CGREG?  //查询当前GPRS注册状态 

+CGREG: 01 //<n>=0,表示禁用URC上报,<stat>=1,标识已经注册GPRS网络,而且是本地网

OK 


AT+CGATT?  //查看当前GPRS附着状态

+CGATT: 1  //<state>=1,标明当前GPRS已经附着

OK 
// //_配置mqtt连接参数,分别为ClientID,MQTT用户名,MQTT密码_
AT+MCONFIG="67235673fc8d5a4ea720bfe7_869329069169988_0_0_2024103110""67235673fc8d5a4ea720bfe7_869329069169988""c37837cf81ed1692fb4a2afee3e47062f1fe2141d7ecb4001bb4038dce151ec3"   

OK

AT+SSLMIPSTART="9f36615343.st1.iotda-device.cn-north-4.myhuaweicloud.com_",_8883            //_建立mqtt连接通道,注意,MQTTS端口号为8883,_
OK
CONNECT OK

AT+MCONNECT=160                //_配置mqtt保活时间,60表示保活时间为60s_

OK
CONNACK OK


AT+MDISCONNECT            //关闭MQTT连接
OK

AT+MIPCLOSE                 //关闭TCP连接

OK

如下图华为云平台已经显示设备在线状态了 建立 mqtt 连接后,我们就可以进行后面的主题订阅与发布步骤了。

7.2.2 模组订阅主题与数据接收

模组订阅"$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/down"主题

AT+MSUB="$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/down"0        //_订阅主题_

OK

SUBACK

模组订阅主题成功后,通过平台发布往主题“$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/down”消息到模组 模组串口端输出如下消息:

+MSUB: "$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/down"80 byte{"name":null"id":"16473ca9-dc65-425a-94c7-98b8d4ab5f77""content":{"msg":"ok"}}

7.2.3 模组发布消息

模组通过如下指令往主题"$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/up"发布消息到平台

AT+MPUB="$oc/devices/67235673fc8d5a4ea720bfe7_869329069169988/sys/messages/up",0,0,"{\\22temp\\22:\\2225.00\\22}"


//最大4100个字节。字符串类型,须用双引号括住。
注:消息中内嵌的
双引号请用\22表达;
控制字符回车\r(0x0D)请用\0D表达;
控制字符换行\n(0x0A)请用\0A表达;
控制字符反斜杠(0x5C)请用\5C表达
如果是MCU发消息,可能需要用\\22,\\0D,\\0A,\\5C来表达,即\需要转义成\\
"{\\22temp\\22\\22:\\2225.00\\22}"

平台成功接收到消息,如下图所示

八、总结

本文详细介绍了如何使用 Air700EMQ 核心板通过 AT 指令集和华为云物联网平台实现两种物联网设备的连接与管理的方法。

九、参考资料

9.1 合宙 Air700EMQ 模组资料中心

https://docs.openluat.com/air700emq/

十、常见问题

10.1 连接服务器失败

1. 检查 SIM 卡是否欠费,模块信号、网络注册、网络附着、PDP 激活状态。
2. PC 端使用 mqtt 工具,连接服务器确认一下是否可以连接成功,排除服务器故障。
3. 在 MIPSTART /SSLMIPSTART 返 回 CONNECT OK 后 才 能 发 MCONNECT 命令,而且要立即发,否则会被服务器踢掉。

4. 检查接入方式对应的端口号等参数是否正确。

10.2 MQTT 连接总是断开是什么原因?

1. PC 端使用 mqtt 工具,连接服务器测试服务器稳定性,排除服务器不稳定因素。

2. 检查下模块信号弱导致网络不稳定,例如地下室、电梯、山区,天线匹配问题等。

3. 检查是否因为长时间无数据通讯导致服务器主动断开连接,需要根据实际情况设置 mqtt keep alive 时间。

10.3 模组订阅主题总是返回错误

1. 核对主题是否符合平台规范(主题订阅者有严格规范,如设备端只能订阅服务端的主题)

10.4 发送 json 格式消息平台无法解析

1. 我们一般发送消息使用 json 格式,比如{“Temp”:“25.00”}无法正确被 AT 指令解析的。C 语言的双引号使用转义字符反斜杠 + 双引号来表示,json 内嵌的双引号只能使用反斜杠字符 + 十六进制表示,而 C 语言字符串中反斜杠需要两个反斜杠表示。所以正确的格式为:{\22temp\22:\2225.00\22}