Linux MQTT智能家居(Linux下运行MQTT)

文章目录


前言

本篇文章将带大家在Linux下运行MQTT库,我们首先会将MQTT库下载下来,然后进行编译,将编译出来的lib文件和include文件添加进入我们自己的工程代码中即可使用到MQTT库了。

一、下载源码编译

1.编译出64位的库文件

源码地址

下载源码:

bash 复制代码
git clone https://gitcode.com/emqx/qmqtt.git

进入qmqtt目录中:

bash 复制代码
cd qmqtt/

修改.qmake.conf文件:

bash 复制代码
load(qt_build_config)
CONFIG += warning_clean
MODULE_VERSION = 5.9.1 	#QT对应的版本

新建一个build目录用于保存编译出的文件:

bash 复制代码
mkdir build/
cd build/

使用qmake进行编译:

这里可以看到直接使用qmake进行编译是会报错的,因为他无法直接找到qmake,这个时候就需要直接指定qmake所在的路径了。

在QT的安装目录中寻找qmake:

bash 复制代码
find /opt/Qt5.9.1 -name qmake

找到qmake后我们就能继续进行编译了:

bash 复制代码
/opt/Qt5.9.1/5.9.1/gcc_64/bin/qmake ..
make -j4

使用ls命令查看编译出的文件:

我们需要的就是lib库文件和include文件;

可以使用file命令查看到编译出的库文件是什么版本的:

bash 复制代码
file libQt5Qmqtt.so.5.9.1

2.编译出ARM平台下的库文件

首先需要找到ARM平台下的qmake:

我的qmake路径如下:

bash 复制代码
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin/qmake

新建一个build目录用于保存编译出的文件:

bash 复制代码
mkdir build/
cd build/

找到qmake后我们就能继续进行编译了:

bash 复制代码
/home/book/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin/qmake ..
make -j4

同样的可以编译出在ARM平台下的lib文件:

二、将lib库文件和include文件加入自己的工程

1.ubuntu下测试

在QT工程中新建lib文件夹:

将编译出来的include文件夹和动态库加入到lib文件夹中:

在.pro文件中添加代码:

bash 复制代码
LIBS += -L$$PWD/lib -lQt5Qmqtt

INCLUDEPATH += lib/include

Widget.h文件中的代码:

cpp 复制代码
#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文件中的代码:

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发布数据测试程序:

2.ARM平台测试

在ARM平台下测试也是比较简单的,直接将编译出的ARM lib文件和include文件替换之前编译的文件即可。

总结

本篇文章就讲解到这里,大家可以自己将MQTT移植到自己的工程中,使用MQTT完成各类智能家居还是非常方便的。

相关推荐
用户31187945592188 小时前
Kylin Linux 10 安装 glib2-devel-2.62.5-7.ky10.x86_64.rpm 方法(附安装包)
linux
涛啊涛9 小时前
Centos7非LVM根分区容量不足后扩容,对调硬盘挂载/
linux·磁盘管理
CYRUS_STUDIO1 天前
用 Frida 控制 Android 线程:kill 命令、挂起与恢复全解析
android·linux·逆向
熊猫李1 天前
rootfs-根文件系统详解
linux
dessler1 天前
Hadoop HDFS-高可用集群部署
linux·运维·hdfs
泽泽爱旅行1 天前
awk 语法解析-前端学习
linux·前端
轻松Ai享生活2 天前
5 节课深入学习Linux Cgroups
linux
christine-rr2 天前
linux常用命令(4)——压缩命令
linux·服务器·redis
三坛海会大神5552 天前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
東雪蓮☆2 天前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs