QT采用MQTT协议远程控制LED灯
2016-05-09 15:38
1271 查看
测试环境:
mqtt_client(Publish) QT 5.6.0 win10
mqtt_client(Subscribe) ubuntu 12.04
mqtt_broker mosquitto ubuntu 12.0.4
开发QT程序使用了QMQTT library 下载地址
效果:
QT Client代码:
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "qmqtt.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; QMQTT::Client *_client; private slots: void onConnect(); void onDisconnect(); void ledonSlot(); void ledoffSlot(); void adjustLightNess(); }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QString> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->luxHorizontalSlider->setMinimum(0); ui->luxHorizontalSlider->setMaximum(100); _client = new QMQTT::Client(); QObject::connect(ui->connectBtn,SIGNAL(clicked(bool)),this,SLOT(onConnect())); QObject::connect(ui->disconnectBtn,SIGNAL(clicked(bool)),this,SLOT(onDisconnect())); QObject::connect(ui->ledOnBtn,SIGNAL(clicked(bool)),this,SLOT(ledonSlot())); QObject::connect(ui->ledOffBtn,SIGNAL(clicked(bool)),this,SLOT(ledoffSlot())); QObject::connect(ui->luxHorizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(adjustLightNess())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::onConnect() { QHostAddress host("127.0.0.1"); quint16 port = 1883; _client->setHost(host); _client->setPort(port); _client->setClientId("client_id_1"); _client->setUsername("sagarfan"); _client->setPassword("password"); _client->connectToHost(); if(_client->isConnectedToHost()) { ui->statusTextEdit->setText("connected"); } } void MainWindow::onDisconnect() { if(_client->isConnectedToHost()) { _client->disconnectFromHost(); ui->statusTextEdit->setText("disconnected"); } } void MainWindow::ledonSlot() { QString payload = "{\"cmd\":1}"; qDebug() << payload; QMQTT::Message msg(0,"cmd",payload.toLatin1()); if(_client->isConnectedToHost()) { _client->publish(msg); } else { qDebug() << "not connected"; } } void MainWindow::ledoffSlot() { QString payload("{\"cmd\":0}"); qDebug() << payload; QMQTT::Message msg(0,"cmd",payload.toLatin1()); if(_client->isConnectedToHost()) { _client->publish(msg); } else { qDebug() << "not connected"; } } void MainWindow::adjustLightNess() { QString tmp = "\"lux\":"; QString postfix; postfix = QString::number(ui->luxHorizontalSlider->value()); qDebug() << ui->luxHorizontalSlider->value(); tmp += postfix; tmp += "}"; QString prefix("{\"cmd\":3,"); QString payload(prefix+tmp); qDebug() << payload; QMQTT::Message msg(0,"cmd",payload.toLatin1()); if(_client->isConnectedToHost()) { _client->publish(msg); } else { qDebug() << "not connected"; } }
main.cpp
#include <QApplication> #include "mainwindow.h" #include "qmqtt.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
相关文章推荐
- Qt实现IP输入框
- [Qt入门篇]6 Qt的属性系统——READ/WRITE/MEMBER
- QT ini配置文件的读写(使用QTextStream类)
- [Qt入门篇]5 Qt的属性系统——声明属性
- 基于FFMPEG的裸眼3D播放器
- QT 连接SQLServer
- emqtt 1 (初初初初稿)
- emqtt 4 (我要publish消息了)
- emqtt 2 (我要连服务器)
- emqtt 3 (我要subscribe 这个topic)
- QT5.4,VS2010
- Qt 5.7 亮瞎眼的更新
- Qt Model/View( 一)
- QT ini配置文件的读写(使用QSettings类)
- Qt路径问题
- Qt 编译时遇到 error: [debug/qrc_music.cpp] Error 1
- Qt PropertyAnimation动画残影
- Qt5+opencv程序打包发布
- 专访安晓辉:Qt是最佳的跨平台解决方案
- Qt5解析json文件