本文介绍一下使用协议连接ONENET的过程
#下载mqtt源码
https://github.com/emqx/qmqtt 本人是在这里下载的
https://github.com/qt/qtmqtt 也可以用这个Qt官方提供的

将源码解压后放在英文目录下,打开工程文件
在这里插入图片描述

要选择用到的qt环境
在这里插入图片描述
打开后用release编译即可
在这里插入图片描述
打开刚刚构建的release目录:找到lib文件夹,将lib这个目录全部复制到
将要使用的工程文件中,可以只保留这四个,其他的可删可不删:
在这里插入图片描述
打开需要用到的工程,这里拿我的light举例,复制完成之后,更改pro文件,将他们加入到工程中来,如果你没有按照我的步骤放在了其他文件夹这里就改成自己的文件目录

INCLUDEPATH += $$PWD/mqtt
LIBS += $$PWD/lib/libQt5Qmqttd.a $$PWD/lib/libQt5Qmqtt.a

在这里插入图片描述
然后构建你的工程,打开生成的Debug文件,将刚刚生成lib中的两个.dll文件拷贝到里面,或者说你将他们添加到环境变量中,这里就不做演示:
在这里插入图片描述
这样就大功告成了
这里贴出连接onenet代码:

.c文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mqtt/qmqtt.h"
#include <QDebug>
#include <QtNetwork>
#include <QHostAddress>

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    client = new QMQTT::Client(QHostAddress("183.230.40.39"),6002);
    client->setClientId("xxxxxxxxxx");//设备ID
    client->setUsername("xxxxxx");//产品id
    client->setPassword("xxxxxx");//鉴权信息
    client->setVersion(QMQTT::MQTTVersion::V3_1_1);
    connect(client,SIGNAL(connected()),this,SLOT(connect_success_slot()));
    connect(client,SIGNAL(received(const QMQTT::Message&)),this,SLOT(received_slot(const QMQTT::Message&)));
    connect(client,SIGNAL(error(const QMQTT::ClientError)),this,SLOT(connect_error_slot(const QMQTT::ClientError)));
    connect(client,SIGNAL(disconnected()),this,SLOT(disconnect_slot()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_btn_connect_clicked()
{
   client->connectToHost();
}

void MainWindow::on_btn_send_clicked()
{
    //Message(const quint16 id, const QString &topic,
    //const QByteArray &payload,
    //const quint8 qos = 0, const bool retain = false, const bool dup = false);
    QMQTT::Message msg(110,"app_topic",/*"hello KFB,I am APP"*/ui->le_send->text().toUtf8());
    client->publish(msg);
}

void MainWindow::on_btn_close_clicked()
{
    client->disconnectFromHost();
}

void MainWindow::received_slot(const QMQTT::Message& msg){
    QString strPayload(msg.payload());
    ui->le_receive->setText(strPayload);
}
void MainWindow::connect_success_slot(){
    qDebug() << "connect success";
    client->subscribe("topic",0);
}

void MainWindow::connect_error_slot(const QMQTT::ClientError error){
    qDebug() << "错误" << error;
}

void MainWindow::disconnect_slot(){
    qDebug() << "disconnect___";
}

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "mqtt/qmqtt.h"
#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_btn_connect_clicked();

    void on_btn_send_clicked();

    void on_btn_close_clicked();

    void connect_success_slot();

    void connect_error_slot(const QMQTT::ClientError error);

    void disconnect_slot();

    void received_slot(const QMQTT::Message& msg);

private:
    Ui::MainWindow *ui;
    QMQTT::Client *client;
};

#endif // MAINWINDOW_H

需要说明的是
在这里插入图片描述
如果你连接的是onenet那么它的地址和默认端口号不用做修改,只用该中间这三个替换即可
在这里插入图片描述

Logo

鸿蒙生态一站式服务平台。

更多推荐