最近在学习嵌入式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”}
评论前必须登录!
注册