赞
踩
本篇文章将带大家在Linux下运行MQTT库,我们首先会将MQTT库下载下来,然后进行编译,将编译出来的lib文件和include文件添加进入我们自己的工程代码中即可使用到MQTT库了。
源码地址
下载源码:
git clone https://gitcode.com/emqx/qmqtt.git
进入qmqtt目录中:
cd qmqtt/
修改.qmake.conf文件:
load(qt_build_config)
CONFIG += warning_clean
MODULE_VERSION = 5.9.1 #QT对应的版本
新建一个build目录用于保存编译出的文件:
mkdir build/
cd build/
使用qmake进行编译:
这里可以看到直接使用qmake进行编译是会报错的,因为他无法直接找到qmake,这个时候就需要直接指定qmake所在的路径了。
在QT的安装目录中寻找qmake:
find /opt/Qt5.9.1 -name qmake
找到qmake后我们就能继续进行编译了:
/opt/Qt5.9.1/5.9.1/gcc_64/bin/qmake ..
make -j4
使用ls命令查看编译出的文件:
我们需要的就是lib库文件和include文件;
可以使用file命令查看到编译出的库文件是什么版本的:
file libQt5Qmqtt.so.5.9.1
首先需要找到ARM平台下的qmake:
我的qmake路径如下:
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin/qmake
新建一个build目录用于保存编译出的文件:
mkdir build/
cd build/
找到qmake后我们就能继续进行编译了:
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin/qmake ..
make -j4
同样的可以编译出在ARM平台下的lib文件:
在QT工程中新建lib文件夹:
将编译出来的include文件夹和动态库加入到lib文件夹中:
在.pro文件中添加代码:
LIBS += -L$$PWD/lib -lQt5Qmqtt
INCLUDEPATH += lib/include
Widget.h文件中的代码:
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <qmqtt.h> #include <QtNetwork> #include <QHostAddress> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; QMQTT::Client * client;//MQTT客户端 void clientMqtt(); public slots: void onMQTT_Received( QMQTT::Message message); }; #endif // WIDGET_H
Widget.cpp文件中的代码:
#include "Widget.h" #include "ui_Widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { clientMqtt(); ui->setupUi(this); } void Widget::clientMqtt() { client = new QMQTT::Client(); // 初始化QMQTT客户指针 connect(client, SIGNAL(received(QMQTT::Message)),this, SLOT(onMQTT_Received(QMQTT::Message))); oneNet server /// QHostAddress host("192.168.0.xxx"); // 代理服务器 IP QByteArray password = "test"; // 设备名称 quint16 port = 2000; // 代理服务器端口 QString deviceId = "604219658"; // 设备 ID QString productId = "354215"; // 产品 ID client->setKeepAlive(120); // 心跳 client->setHost(host); // 设置 EMQ 代理服务器 client->setPort(port); // 设置 EMQ 代理服务器端口 client->setClientId(deviceId); // 设备 ID client->setUsername(productId); // 产品 ID client->setPassword(password); client->cleanSession(); client->setVersion(QMQTT::MQTTVersion::V3_1_1); // 设置mqtt版本 client->connectToHost(); // 连接 EMQ 代理服务器 QTimer::singleShot(1000, this, [=](){ client->subscribe("abcd",0); // 订阅abcd }); } void Widget::onMQTT_Received( QMQTT::Message message) { QString str = message.payload(); qDebug() <<"rcive: " << message.topic() << ":" <<str; } Widget::~Widget() { delete ui; }
使用MQTTX发布数据测试程序:
在ARM平台下测试也是比较简单的,直接将编译出的ARM lib文件和include文件替换之前编译的文件即可。
本篇文章就讲解到这里,大家可以自己将MQTT移植到自己的工程中,使用MQTT完成各类智能家居还是非常方便的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。