云计算百科
云计算领域专业知识百科平台

正点原子IMX6ULL+QT实现MQTT通信连接EMQ X服务器

最近在学习嵌入式Linux,想通过MQTT将数据传输到云端 

本文内容:

1.在Windows11中搭建本地EMQ X服务器

2.在IMX6ULL中通过QT编译MQTT的client

3.实现IMX6ULL与EMQ X服务器的通信

一、在windows环境中搭建EMQ X服务器

①在官网中下载EMQ X的源码

5.3.2以后的Windows版本不再更新,请参考以下网址

[https://www.emqx.com/zh/downloads/broker]

②下载至本地,解压

③管理员身份打开Windows shell终端

④进入到解压文件下的\\bin\\目录下

运行.\\emqx install        .\\emqx console        .\\emqx start

⑤浏览器输入127.0.0.1:18083进入服务器

登入成功后,搭建结束。

二、在Ubuntu环境下通过QT 5.12.9实现MQTT的客户端

①创建QT工程

使用正点原子的虚拟机镜像,Ubuntu16.04。

configure时勾选ATK-I.MX6U(交叉编译器已经自带mqtt模块,无需编译qtmqtt源码)

②在.pro文件加入mqtt

③在mainwindow.h中加入

声明对象指针 QMqttClient *client;

④在Mainwindow的构造函数中加入

     client = new QMqttClient;      client->setHostname("192.168.233.6");//保证imx6ull与windows连一个局域网,这里的是windows的ip     client->setPort(1883);     client->setClientId("imx6ull");

⑤使用client->connectToHost();进行客户端连接

⑥使用 client->publish(topic,ba);进行发布

⑦使用 client->subcribe(topic);进行订阅

⑧使用connect()连接信号与槽;

MainWindow::MainWindow(QWidget *parent)     : QMainWindow(parent)     , ui(new Ui::MainWindow) {     ui->setupUi(this);     client = new QMqttClient;     client->setHostname("192.168.233.6");     client->setPort(1883);     client->setClientId("imx6ull");

    connect(client, &QMqttClient::connected,this,&MainWindow::connectSuccessSlots);//连接成功源 } 此槽函数为连接成功后触发

void MainWindow::connectSuccessSlots() {     qDebug() <<  "Connect successful!";     connect(client, &QMqttClient::messageReceived, this, &MainWindow::recvMessageSlot); }

收到消息后触发

void MainWindow::recvMessageSlot(const QByteArray &ba, const QMqttTopicName &topic) {     QString str = topic.name() + QString(ba);     ui->textEdit->setText(str); }

⑨交叉编译后进行移植

三、实现imx6ull与EMQ X及MQTTX之间的通信

原理为:EMQ X作为broker,imx6ull与MQTTX作为client 进行订阅和发布

订阅相同的topic,例如 /dht

向相同的topic中发布消息,例如/dht {mag:“hello”}

赞(0)
未经允许不得转载:网硕互联帮助中心 » 正点原子IMX6ULL+QT实现MQTT通信连接EMQ X服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!