admin管理员组文章数量:1662788
概述
上一篇文章介绍了如何在阿里云物联网平台创建产品和设备,那么今天就来看看如何用MQTT连接到阿里云IOT,本文主要介绍基于TCP的MQTT连接,客户端直连。
官方介绍文档在这里
正文
我们先来看看官方提供的MQTT连接说明,如下:
根据该文档,我们大致了解了各个参数的封装方式,那么接下来我们就通过QtMqtt的接口来传入这些参数并连接到阿里云IOT。
代码片段
来看一些基本的参数初始化:
m_strProductKey="xxxxx"; //需要跟阿里云Iot平台一致;
m_strDeviceName="xxxxx"; //需要跟阿里云Iot平台一致;
m_strDeviceSecret="xxxxx"; //需要跟阿里云平台一致
m_strRegionId="cn-shanghai";
m_strPubTopic = "/sys/" + m_strProductKey + "/" + m_strDeviceName + "/thing/event/property/post";//发布topic
m_strSubTopic = "/sys/" + m_strProductKey + "/" + m_strDeviceName + "/thing/service/property/set";//订阅topic
m_strTargetServer = m_strProductKey + ".iot-as-mqtt." + m_strRegionId + ".aliyuncs";//域名
m_client->setHostname(m_strTargetServer);
m_client->setPort(1883);
参数说明:
- m_strProductKey:产品密钥
- m_strDeviceName:设备名
- m_strDeviceSecret:设备密码
- m_strRegionId:地域和可用区,具体查看
以上这三个参数是在我们创建设备(创建设备介绍)后可以直接查看到的,所以这里必须要和阿里云上创建的设备信息保持一致。
连接iot:
QString clientId="abcdefg"; //表示客户端ID,建议使用设备的MAC地址或SN码,64字符内。
QString signmethod = "hmacsha1"; //加密方式
QString message ="clientId"+clientId+"deviceName"+m_strDeviceName+"productKey"+m_strProductKey;
m_client->setUsername(m_strDeviceName + "&" + m_strProductKey);
m_client->setClientId(clientId + "|securemode=3,signmethod=" + signmethod + "|");
m_client->setPassword(QMessageAuthenticationCode::hash(message.toLocal8Bit(),
m_strDeviceSecret.toLocal8Bit(),
QCryptographicHash::Sha1).toHex());
m_client->connectToHost();//连接阿里云
在文档中还提到timestamp参数,表示时间毫秒值,但是可以不用填,我们这里就不写了。
- signmethod:表示签名算法类型。支持hmacmd5,hmacsha1和hmacsha256,默认为hmacmd5,我们这里用的是hmacsha1。
- clientId:表示客户端ID,建议使用设备的MAC地址或SN码,64字符内。
- securemode:表示目前安全模式,可选值有2 (TLS直连模式)和3(TCP直连模式)。
注意,这里加密方式,由于Qt自带了接口可以进行加密,使用QMessageAuthenticationCode类,所以我们直接用现成的,否则需要把加密算法提供进来,这算法C语言实现的。 有现成的我们就直接用了,省了好多事。
这样我们就可以直接连接到服务器啦。
接下来看看如何发送消息:
QString payload2="{\"method\":\"thing.event.property.post\",\"params\":{\"Version\":\"2.0.13\"}}";;
//发布消息
if (m_client->publish(m_strPubTopic, payload2.toLocal8Bit(),0,true) == -1)
QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not publish message"));
在前一篇文章中我们创建了一个设备,并添加了自定义功能“Version”,所以这里将版本号发送给服务器。
结果
所有工作准备完毕,看看运行效果:
点连接connect,然后再点击发布消息 Publish
可以看到,已经正常连接到服务器,并且正常发布了消息。
然后我们在阿里云终端打开设备详情,可以看到设备已经是在线状态,找到运行状态,就可以查看到上传的信息了
文中demo下载
版权声明:本文标题:MQTT连接阿里云IoT(二) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729970335a1218061.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论