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完成各类智能家居还是非常方便的。

相关推荐
2035去旅行4 小时前
bootcmd 详细讲解
linux·嵌入式·arm·soc
陈希1235 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡5 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
且从容.9 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道9 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.12 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落14 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨14 小时前
WSL2的安装与使用
linux·wsl
微小的鱼14 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng14 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器