本系列博客学习由 安信可科技 - 官方博客 技术分享,如有疑问请留言或联系邮箱。
- 1、A9G环境在windows上搭建并编译,串口打印 Hello GPRS
- 2、A9G在微信公众号上的定位功能笔记分享;
- 3、安信可A9G模块连接机智云APP教程;
- 4、A9G模块/开发板GPS定位注意事项 && 坐标系转换
- 5、A9G模组AT指令MQTT接入阿里云实现APP控制
一、前言
A9G 是安信可推出的GSM/GPRS+GPS模组,提供串口转GPRS/短信息/语音通话/GPS定位等信息传输功能,被广泛应用于物联网/车载/电力环境检测等领域。今天带大家把A9G接入阿里云实现APP远程控制。
准备工作:
- 安信可A9G模组/开发板
- USB-TTL
- 阿里云飞燕平台账号
二、创建产品
这里我们创建一个插座,联网方式选择蜂窝(2G/3G/4G/5G)
选择设备面板,可以选择现有的面板,也可以自己创建面板,面板一定要和功能定义一致
生成配网二维码,每台设备都是由DeviceName生成唯一的配网二维码,设备激活后用云智能APP扫码即可绑定接入APP
三、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确定的加密方法一致。
当然我们也可以在程序里面实现这个算法
- 拼接参数
把clientId、deviceName、productKey依次连接起来,这里我的clientId为12345,deviceName为HfUjaa2xtA2deN7W7l0z,productKey为a1uDrbj3G5U,则拼接起来是这样的:
clientId12345
deviceNameHfUjaa2xtA2deN7W7l0z
productKeya1uDrbj3G5U
- 加密
指令中我选择了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
转载:https://blog.csdn.net/Boantong_/article/details/109790279