本文描述如何将MCU+广域网通信模组形态的设备接入物联网平台。
MCU+广域网模组设备指设备通过广域网模组连接互联网,MCU本身并不支持TCP/IP协议栈,设备的结构示意图如下:
MCU+支持连接阿里云物联网平台的模组
如果模组已支持连接阿里云物联网平台,您可以咨询模组厂商获取模组的AT指令将设备连接到阿里云物联网平台即可。支持连接阿里云物联网平台的模组请参见阿里云认证查询。
MCU+支持MQTT的模组
本场景中的模组支持MQTT、但是不提供接入阿里云物联网平台的AT指令,因此您需要在MCU上生成遵循阿里云物联网平台规范的MQTT Username、Password、ClientID,用于建立设备与物联网平台之间MQTT连接。
请参见MQTT-TCP连接通信了解通过MQTT连接阿里云物联网平台的细节,为了避免您在理解连接协议时出错导致连接失败,我们也提供了相关的C代码参考,让您只用输入设备的ProductKey、DeviceName、DeviceSecret、服务器站点信息,就自动生成MQTT连接需要的各种参数。
设备获取到MQTT连接时需要的Username、Password、ClientID以及阿里云物联网平台服务器站点信息之后,调用模组提供的MQTT AT指令去连接到阿里云物联网平台。
连接如果失败,请参见错误码了解连接失败原因。
连接建立之后,请参见自定义topic了解如何发送消息到物联网平台,以及如何从物联网平台接收消息。
MCU+支持TCP的模组
本场景是最困难的一种场景,由于MCU的RAM与Flash有限,在MCU上移植MQTT Client比较占用存储空间,并且您需要了解MQTT Client的细节才能让MQTT Client与模组能够完美的配合工作,这样通常导致移植时间较长。
阿里云物联网平台提供了基于TCP的接入方案,目前还处于试用阶段,您可以按照以下模板,发送消息联系我们。
- 主题:设备接入Link SDK产品申请TCP接入解决方案
- 内容:
- 公司名称
- 联系人以及职位
- 联系电话
- 模组型号
- 产品简单描述
- 产品规模及开发计划
MCU+支持HTTPS的模组
如果设备只是需要上报数据,不需要远程对设备进行控制,并且模组支持HTTPS,那么设备可以通过HTTPS连接阿里云物联网平台。请参见“HTTP协议接入”了解物联网平台的HTTPS接入规范,并调用模组的HTTPS AT指令接入物联网平台。
设备动态注册
如果在产线上为每个设备烧写不同的ProductKey、DeviceName、DeviceSecret难于实现,但是每个设备都有自己唯一的设备标识,比如ICCID、MAC地址、序列号等,那么您可以使用动态注册方案来实现类似于一型一密的效果,从而不必在产线上为每个设备烧写设备的密钥。
本方案是在设备的固件中预置ProductKey、ProductSecret(这两个参数对于一款产品下的所有设备都是相同的),然后将设备的唯一标识作为阿里云物联网平台中设备的DeviceName,设备上电之后从云端通过动态注册去获取设备的DeviceSecret,当设备具有了ProductKey、DeviceName、DeviceSecret之后,就可以使用上面描述的过程通过MQTT连接阿里云物联网平台了。
为了避免因为ProductKey、ProductSecret泄漏导致攻击者伪造设备连接到物联网平台,您需要预先将设备的唯一标识上传到物联网平台作为白名单使用,如何打开产品的动态注册功能请参考文档一型一密,请参考“批量创建设备”了解如何批量上传设备唯一标识,在“上传方式”中需要选择“批量上传”。
模组如果提供HTTPS AT指令,可以参见“设备身份注册”中的章节“直连设备使用一型一密动态注册”实现动态注册;如果模组提供MQTTS AT指令,可以参见文档“基于MQTT通道实现动态注册”。
注意:
- 当一个设备通过动态注册获取到DeviceSecret之后需要将其保存在设备上,设备重启之后直接使用ProductKey、DeviceName、DeviceSecret连接物联网平台即可,也即动态注册无需每次连接物联网平台时都执行;
- 如果一个设备已经使用ProductKey、DeviceName、DeviceSecret连接过物联网平台,那么再次进行动态注册将会失败