【安信可A9G专题⑤】A9G模组AT指令MQTT接入阿里云实现APP控制

本系列博客学习由 安信可科技 - 官方博客 技术分享,如有疑问请留言或联系邮箱。

一、前言

    A9G 是安信可推出的GSM/GPRS+GPS模组,提供串口转GPRS/短信息/语音通话/GPS定位等信息传输功能,被广泛应用于物联网/车载/电力环境检测等领域。今天带大家把A9G接入阿里云实现APP远程控制。
准备工作:

  1. 安信可A9G模组/开发板
  2. USB-TTL
  3. 阿里云飞燕平台账号

二、创建产品

这里我们创建一个插座,联网方式选择蜂窝(2G/3G/4G/5G)
在这里插入图片描述

选择设备面板,可以选择现有的面板,也可以自己创建面板,面板一定要和功能定义一致

在这里插入图片描述
生成配网二维码,每台设备都是由DeviceName生成唯一的配网二维码,设备激活后用云智能APP扫码即可绑定接入APP
在这里插入图片描述

三、MQTT接入

阿里云关于MQTT接入介绍传送门

3.1 MQTT接入 && 加密算法浅析

阅读完官方文档我们开始接入

AT+CGATT=1 //附着网络
AT+CGDCONT=1,"IP","CMNET" //设置 PDP 参数
AT+CGACT=1,1 //激活 PDP,正确激活以后就可以上网了

MQTT直连,第一次接入后设备状态变为激活状态,激活后即可扫码(上述由DeviceName生成唯一的配网二维码)绑定app

AT+MQTTCONN="a1uDrbj3G5U.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,"12345|securemode=3,signmethod=hmacmd5|",120,0,"HfUjaa2xtA2deN7W7l0z&a1uDrbj3G5U","650FC5786F4E143E9E24783B8D31A752"

这一串字符是什么意思呢,我们来看一下,
a1uDrbj3G5U.iot-as-mqtt.cn-shanghai.aliyuncs.com这一段是接入域名,格式为
${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com
其中${YourProductKey}为设备的ProductKey,${YourRegionId}为地域,国内可使用cn-shanghai
端口号固定为1883;
12345|securemode=3,signmethod=hmacmd5|这一段为mqttClientId,用于MQTT的底层协议报文,格式为:

${clientId}|securemode=3,signmethod=hmacmd5|
其中
${clientId}为设备的ID信息。可取任意值,长度在64字符以内;
securemode为安全模式,TCP直连模式设置为securemode=3,TLS直连为securemode=2;
signmethod为算法类型,支持hmacmd5和hmacsha1;

HfUjaa2xtA2deN7W7l0z&a1uDrbj3G5U这一段是User Name,格式为

${YourDeviceName}&${YourProductKey}
其中${YourDeviceName}为设备的DeviceName,${YourProductKey}为设备的ProductKey
650FC5786F4E143E9E24783B8D31A752这一段为Password,可用password生成小工具生成

使用Password生成小工具的输入参数:

productKey:设备所属产品Key。可在控制台设备详情页查看。
deviceName:设备名称。可在控制台设备详情页查看。
deviceSecret:设备密钥。可在控制台设备详情页查看。
timestamp:(可选)时间戳。
clientId:设备的ID信息,与Client ID中${clientId}一致。
method:选择签名算法类型,与Client ID中signmethod确定的加密方法一致。

当然我们也可以在程序里面实现这个算法

  1. 拼接参数
    把clientId、deviceName、productKey依次连接起来,这里我的clientId为12345,deviceName为HfUjaa2xtA2deN7W7l0z,productKey为a1uDrbj3G5U,则拼接起来是这样的:
    clientId12345deviceNameHfUjaa2xtA2deN7W7l0zproductKeya1uDrbj3G5U
  2. 加密
    指令中我选择了signmethod=hmacmd5,即加密算法为hmacmd5 ,对拼接结果进行hmacmd5加密,加密密钥为设备的DeviceSecret,加密后得到650FC5786F4E143E9E24783B8D31A752
    前面的博客中我有对hmacmd5的代码实现有过介绍,可以参考一下,传送门

3.2 订阅主题

设备属性设置的Topic为:

/sys/${productKey}/${deviceName}/thing/service/property/set

AT+MQTTSUB="/sys/a1uDrbj3G5U/HfUjaa2xtA2deN7W7l0z/thing/service/property/set",1,0

3.3 发布消息

设备属性上报的Topic为:
/sys/${productKey}/${deviceName}/thing/event/property/post

payload的格式为:
"{"id":"123","version":"1.0","params":{"powerstate":1},"method":"thing.event.property.post"}"
其中id可以为随机值,version为版本号,“params”:{“powerstate”:1}为上报的参数,“method”:"thing.event.property.post"固定就可以了。得到上报的指令为:
AT+MQTTPUB="/sys/a1uDrbj3G5U/HfUjaa2xtA2deN7W7l0z/thing/event/property/post","{"id":"123","version":"1.0","params":{"powerstate":1},"method":"thing.event.property.post"}",0,0,0

但是以上字符在模组上是识别不了,部分字符需要转义,所以,下面是正确的格式!

原字符转义后
"\22
\r\0D
\n\0A

转义后得到的指令为:

AT+MQTTPUB="/sys/a1uDrbj3G5U/HfUjaa2xtA2deN7W7l0z/thing/event/property/post","{\22id\22:\22123\22,\22version\22:\221.0\22,\22params\22:{\22powerstate\22:1},\22method\22:\22thing.event.property.post\22}",0,0,0

消息成功发布后,app上的状态会同步
在这里插入图片描述

    到这里我们就已经实现了A9G接入阿里云飞燕平台,并实现APP远程控制,如果需要开通语音控制的话,在阿里云控制台开通就可以了。用同样方法我们可以接入各种物联网设备,如电工照明、家居安防、智慧农业、智能楼宇等,实现远程控制!

  • 有疑问请留言,或邮箱:support@aithinker.com
已标记关键词 清除标记