什么是MQTT?
作用是什么(适用场景)?
与其他通讯协议相比,优缺点在那里?
一.安装 MQTT 服务器
使用 EMQ X(开源且可视化管理)
下载 EMQX
下载的是 emqx-5.0.26-ubuntu18.04-amd64.deb
直接访问:127.0.0.1:18083
无法访问的解决办法:
- 查看配置文件的默认端口号 (一般在 /etc/emqx/emqx.conf)
- 查看端口是否占用
- sudo emqx console 查看报错情况
成功如下:
二. MQTT库移植
1.QMQTT下载
GitCode - 开发者的代码家园
使用qt打开项目:(注意所选 qmqtt 版本需要和 qt 版本一致)
直接编译,此时会报错 No file ,为路径错误:
将代码中头文件切换为绝对路径:
编译成功,将 release 版本编译后,复制 include 和 lib 两个文件夹 :
include 文件夹放到源码的 mqtt 文件夹下:
然后将源码的 mqtt 文件夹放到自己的工程文件目录:
lib 文件夹放到自己的项目工程目录下:
添加现有文件:
添加外部库:
成功如下:
三.简单连接使用
1.使用 QMTTX
本地回环地址/本机IP地址 + 端口号(一般默认 1883)
成功连接后,自定义 topic 数据:
代码测试:
#include "qmqttserver.h"
#include "ui_qmqttserver.h"
QMqttServer::QMqttServer(QWidget *parent) :
QWidget(parent),
ui(new Ui::QMqttServer)
{
ui->setupUi(this);
mqtt_client=new QMqttClient();
connect(mqtt_client,&QMqttClient::messageReceived,this,&QMqttServer::recvMsg);
connect(mqtt_client,&QMqttClient::connected,[=]()
{
qDebug()<<"成功连接!";
subscribeMsg();
});
ip_="127.0.0.1";
port_="1883";
connectToMqtt();
}
QMqttServer::~QMqttServer()
{
delete ui;
}
int QMqttServer::connectToMqtt()
{
mqtt_client->setHostname(ip_.trimmed());
mqtt_client->setPort(port_.trimmed().toUInt());
mqtt_client->connectToHost();
}
void QMqttServer::subscribeMsg()
{
mqtt_client->subscribe(QMqttTopicFilter("testtopic/msg/"));
qDebug()<<"订阅: testtopic/msg/";
}
void QMqttServer::recvMsg(const QByteArray &message, const QMqttTopicName &topic_)
{
QByteArray byte_message=const_cast<QByteArray&>(message);
byte_message.replace("\\","");
// QString recv_str="["+topic_+"]"+message;
qDebug()<<topic_.name()<<": "<<QString::fromUtf8(byte_message);
}
成功订阅:
参考:
MQTT通信协议(mosquitto)在Linux上的环境构建与测试_linux展示mqtt连接状态-CSDN博客
Linux下QT编程之MQTT实战_linux上编译mqtt时#include <private/qobject_p.h>找不到-CSDN博客文章来源:https://www.toymoban.com/news/detail-810278.html
文章来源地址https://www.toymoban.com/news/detail-810278.html
到了这里,关于Ubuntu18.04 Qt 实现MQTT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!