QT采用MQTT协议远程控制LED灯

测试环境:

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();
}
时间: 2024-11-08 20:42:06

QT采用MQTT协议远程控制LED灯的相关文章

玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制

授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 一.你如果想学基于Arduino的ESP8266开发技术 一.基础篇 ESP8266开发之旅 基础篇① 走进ESP8266的世界 ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境 ESP8266开发之旅 基础篇③ ESP826

NodeMCU实现远程控制LED灯

NodeMCU是一块集成了ESP8266的单片机,它具有体积小,扩展性强的特点.在物联网应用领域将迸发出强大的能量.我们通过入门一个NodeMCU的程序来展示一下它的强大功能. NodeMCU的WIFI模块有三种模式,AP模式(即路由器模式),STA模式(我的理解是无线网卡模式),AP+STA模式.我们下面要讲的一个案例是用STA模式.在该种模式下,你可以把NodeMCU当作一个无线网中的一个客户端,这个客户端连上一个无线热点,然后通过无线路由器的DHCP功能获取客户端IP地址,然后我们写上简单

深度剖析MQTT协议的整个通信流程

http://www.elecfans.com/d/587483.html MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet.百度的云平台也都支持MQTT的接入.虽然MQTT很火,但是目前对MQTT的很少,尤其是在如何移植到嵌入式上来.大部分的平台商的做法都是跟模块商合作把MQTT协议集成到WiFi模块跟GPRS模块里面,捆绑一销售,不让用户过多的了解物联网最核心的东西. 在还没有深入去了解MQTT协议之前,总

海鑫智圣:物联网漫谈之MQTT协议

什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端应用系统之间通信的问题. 为什么需要MQTT(或类似)协议 随着智能硬件和移动互联网技术的快速发展,传统的互联网协议越来越难以满足物联网的需要,体现在:移动网络代价昂贵,带宽低.可靠性差:在嵌入设备中运行,处理器和内存资源有限:海量在线设备产生庞大数据,给云端带来很大的网络开销和处理压力. MQTT

单片机远程控制步进电机、LED灯和蜂鸣器

通过采用C#语言实现的上位机控制单片机的步进电机模块.LED灯和蜂鸣器模块,使步进电机进行正.反转和停止并控制转速:LED灯模块进行有选择的呼吸式表达:蜂鸣器模块的开始和终止. 上位机通过串口和自定义的通信协议(8字节)控制单片机的步进电机.LED灯和蜂鸣器模块.其中在控制步进电机的过程中,为了使操作能够及时响应,使用了INT0中断来进行及时性速度响应:LED灯使用位运算控制灯的闪烁位置,合理利用了单片机的模块和操作. 注意:由于定时器个数的限制,没能控制更多的模块. #include<reg5

PHP再学习5——RESTFul框架 远程控制LED

0.前言 去年(2013年)2月第一次接触yeelink平台,当时该平台已经运行了一些时间也吸引了不少极客.试想自己也将投身IoT(物联网)行业,就花了些时间研究了它.陆陆续续使用和研究了一年,大致围绕两个问题展开——1.yeelink平台如何使用,2.如何构造一个功能简单些的yeelink平台.    [PHP学习笔记——索引博文] 本文将讨论如何构造一个简单restful架构平台(该平台有点像yeelink,不过功能比yeelink少的多),并结合树莓派实现LED的远程控制(网络控制).构建

MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用

0 前言 MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制.Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用. 若初次接触MQTT协议,可先理解以下概念: [MQTT协议特点]--相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制. [MQTT协议角色]--在RESTful架构的物联网

物联网MQTT协议分析和开源Mosquitto部署验证

在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定并力推,其具有开放.简单.轻量级以及易于实现的特点使得其即便在资源受限的环境中也能得到很好的使用,比如运行在资源紧缺型的嵌入式系统中或网络带宽非常昂贵的环境中,除此之外,它也被广泛用于遥感勘测.智能家居.能源监测和医疗应用程序等各个领域,是物联网的重要组成部分,将来可能会成为物联网的事实标准. 本篇文章将帮助

MQTT协议简记

 一.定义 MQTT - MQ Telemetry Transport 轻量级的 machine-to-machine 通信协议. publish/subscribe模式. 基于TCP/IP. 支持QoS. 适合于低带宽.不可靠连接.嵌入式设备.CPU内存资源紧张. 是一种比较不错的Android消息推送方案. FacebookMessenger采用了MQTT. MQTT有可能成为物联网的重要协议. MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽和远程设备连接.例