这东西也折腾我好几天来着,我也看了无数篇博主的教程博客,最后也登不上去物联网平台。正当我发愁且找不到原因时,还好我一个朋友做过类似的项目并为我解答疑惑,最后我才能实现这个功能。现在我就来留下我的学习笔记。
QT版本:QT5.9 Mingw32
操作系统:win11
步骤一:Qt移植mqtt库
csdn论坛上也有很多教程,我也是看别人的教程的
Qt 移植mqtt库(非官方库)并连接到eMQ、onenet
步骤二:使用Qt的QMqttClient库来连接物联网平台
1、在工程的.pro文件内添加代码
QT += network
2、在对应的文件内添加如下的头文件
#include "QtMqtt/qmqttclient.h"
3、编译工程会提醒部分头文件无法找到,只需要将报错的文件的<>改为“”引用即可,大概需要修改3个文件内的头文件,一直修改到编译不报错即可。
4、添加如下的代码,初始化QMqttClient对象、异步连接回调、接收消息异步回调
protected: QMqttClient *client;//mqtt服务器对象 protected slots: void connected_isr();//连接回调函数 private slots: void recv_message(QByteArray message);//接收消息回调
5、添加如下的代码,实例化QMqttClient对象,连接服务器
//下面的内容根据腾讯物联网平台信息进行替换 QHostAddress host("106.55.124.154");//腾讯物联网平台IP地址 QByteArray password = "password";//填写密码 quint16 port = 1883; client=new QMqttClient(this); client->setKeepAlive(120); client->setHost(host);//设置EMQ代理服务器IP client->setPort(port);//设置EMQ代理服务器端口号 client->setClientId("ClientID");//onenet设备ID client->setUsername("Username");//onenet的产品ID client->setPassword(password);//设置一个客户端密码 client->cleanSession();//清除缓存 // client->setVersion(QMQTT::MQTTVersion::V3_1_1);//设置mqtt版本,onenet平台规定为mqtt3.1.1版本 client->connectToHost();//连接EMQ代理服务器
6.需要发布消息的时候这样发布消息
QString topic="test";//发布的频道 QString payload="123456";//消息内容体 client->publish(QMqttTopicName(topic),payload.toLocal8Bit());//发布消息
注意!!!我这里用的是腾讯云的物联网通信,并不是物联网平台。
不知道为什么他官方文档给的ip地址域名不行,而且我这是广州腾讯云的ip地址,不知道我同学在哪里搞来的,用上他就能登陆了。这地方我也不懂,希望有大佬能够为我解惑
物联网通信
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/31642