QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-2 项目开发

这篇具有很好参考价值的文章主要介绍了QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-2 项目开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章主要是分享QT智能家居项目的代码

在我看来,QT MQTT的使用主要难点就是对于环境的搭建,在我们把环境搭建完之后,接下来就是传统手艺了,我们只要知道相应的库函数,调用它,就能实现我们所需要的功能了。

所以,在这里我也只是简单的分享一下我写的第一版代码,希望能够对各位提供到帮助。

若是有什么疑问,或者有什么更好的想法,也可以联系我,我尽量帮你们解决。

我们主要是使用MQTT协议以及ONENET云来实现数据从硬件端到PC端的传输以及控制指令的下发。

mainwindows.h代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "QMqtt/qmqtt.h"
#include <QTime>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void on_btn_connect_clicked();

    void on_btn_send_clicked();

    void on_btn_close_clicked();

    void connect_success_slot();

    void connect_error_slot(const QMQTT::ClientError error);

    void disconnect_slot();

    void received_slot(const QMQTT::Message& msg);

    void on_clear_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void ClickButton0();

    void ClickButton1();

    void ClickButton2();

    void ClickButton3();


//    void onTimeOut();



private:
    Ui::MainWindow *ui;
    QMQTT::Client *client;
    int flag0;
    int flag1;
    int flag2;
    int flag3;
    QTimer *tim;

};
#endif // MAINWINDOW_H

mainwindows.cpp代码

这几句代码是用来设置你连接的ONENET设备的,因为我不需要更改onenet平台设备,所以直接将其内置在代码中了

qt连接onenet,智能家居,qt5,物联网,c++,嵌入式硬件,Powered by 金山文档
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMqtt/qmqtt.h"
#include <QtNetwork>
#include <QHoverEvent>



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //连接onenet云平台
    client = new QMQTT::Client(QHostAddress("183.230.40.39"),6002);
    client->setClientId("943137931");//设备ID
    client->setUsername("506581"); //产品ID
    client->setPassword("123456"); //鉴权信息ID
    client->setVersion(QMQTT::MQTTVersion::V3_1_1);

    connect(client,SIGNAL(connected()),this,SLOT(connect_success_slot()));
    connect(client,SIGNAL(received(const QMQTT::Message&)),this,SLOT(received_slot(const QMQTT::Message&)));
    connect(client,SIGNAL(error(const QMQTT::ClientError)),this,SLOT(connect_error_slot(const QMQTT::ClientError)));
    connect(client,SIGNAL(disconnected()),this,SLOT(disconnect_slot()));

    //
    connect(ui->btn_send, SIGNAL(clicked()), this, SLOT(ClickButton0()));
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(ClickButton1()));
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(ClickButton2()));
    connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(ClickButton3()));


    flag0 = 0;
    flag1 = 0;
    flag2 = 0;
    flag3 = 0;


    tim = new QTimer();
    tim->setInterval(5000);
    connect(tim,SIGNAL(timeout()),this,SLOT(onTimeOut()));
    tim->start();    

}

MainWindow::~MainWindow()
{
    delete ui;

}

//连接onenet云
void MainWindow::on_btn_connect_clicked()
{
   client->connectToHost();

}

// 连接成功后输出“connect success”并订阅主题
void MainWindow::connect_success_slot(){
    qDebug() << "connect success";
    client->subscribe("Celsius",0);
    client->subscribe("Humidity",0);
    client->subscribe("Rain",0);
    client->subscribe("Smoke",0);
    client->subscribe("Light",0);
    client->subscribe("Far",0);
    client->subscribe("test",0);
    ui->output->setText("连接成功");

}

//连接出现错误时在控制台输出错误
void MainWindow::connect_error_slot(const QMQTT::ClientError error){
    qDebug() << "错误" << error;
}

// 断开连接输出disconnect___
void MainWindow::disconnect_slot(){
    qDebug() << "disconnect___";
    ui->output->setText("断开连接");
}

//断开onenet云
void MainWindow::on_btn_close_clicked()
{
    client->disconnectFromHost();
}

// 将对应主题的数据输出到对用的文本框中
void MainWindow::received_slot(const QMQTT::Message& msg){
    QString strPayload(msg.payload());
    if(msg.topic() == "Celsius")
        ui->le_receive->setText(strPayload);
    if(msg.topic() == "Humidity")
        ui->le_send->setText(strPayload);
    if(msg.topic() == "Rain")
        ui->rain->setText(strPayload);
    if(msg.topic() == "Smoke")
        ui->smoke->setText(strPayload);
    if(msg.topic() == "Light")
        ui->light->setText(strPayload);
    if(msg.topic() == "Far")
        ui->far->setText(strPayload);
    if(msg.topic() == "test")
     ui->lineEdit->setText(strPayload);

}

//清空文本框
void MainWindow::on_clear_clicked()
{
    ui->le_receive->setText("");
    ui->le_send->setText("");
    ui->far->setText("");
     ui->rain->setText("");
      ui->light->setText("");
       ui->smoke->setText("");
       ui->lineEdit->setText("");
}

//下发指令
void MainWindow::on_btn_send_clicked()
{
    if(ui->btn_send->text() == "打开水泵"){
        QString controal = "t";
        QMQTT::Message msg(110,"Controal",controal.toUtf8());
        client->publish(msg);


    }
    if(ui->btn_send->text() == "关闭水泵"){
        QString controal = "y";
        QMQTT::Message msg(110,"Controal",controal.toUtf8());
        client->publish(msg);


    }

}

void MainWindow::on_pushButton_clicked()
{


    if(ui->pushButton->text() == "开灯"){
            QString controal = "q";
            QMQTT::Message msg(110,"Controal",controal.toUtf8());
            client->publish(msg);
    }
    if(ui->pushButton->text() == "关灯"){

            QString controal = "w";
            QMQTT::Message msg(110,"Controal",controal.toUtf8());
            client->publish(msg);
    }
}

void MainWindow::on_pushButton_2_clicked()
{
    if(ui->pushButton_2->text() == "开警报"){
        QString controal = "e";
        QMQTT::Message msg(110,"Controal",controal.toUtf8());
        client->publish(msg);


    }
    if(ui->pushButton_2->text() == "关警报"){
        QString controal = "r";
        QMQTT::Message msg(110,"Controal",controal.toUtf8());
        client->publish(msg);


    }
}

void MainWindow::on_pushButton_3_clicked()
{
    if(ui->pushButton_3->text() == "打开风扇"){
        QString controal = "d";
        QMQTT::Message msg(110,"Controal",controal.toUtf8());
        client->publish(msg);


    }
    if(ui->pushButton_3->text() == "关闭风扇"){
        QString controal = "f";
        QMQTT::Message msg(110,"Controal",controal.toUtf8());
        client->publish(msg);



    }
}

void MainWindow::on_pushButton_4_clicked()
{
        QString controal = "z";
        QMQTT::Message msg(110,"Controal",controal.toUtf8());
        client->publish(msg);
}

void MainWindow::ClickButton0()
{
    if(!flag0){
    ui->btn_send->setText("关闭水泵");
    flag0 = 1;
    }
    else{
     ui->btn_send->setText("打开水泵");
     flag0 = 0;
    }

}

void MainWindow::ClickButton1()
{
    if(!flag1){
    ui->pushButton->setText("关灯");
    flag1 = 1;
    }
    else{
     ui->pushButton->setText("开灯");
     flag1 = 0;
    }

}

void MainWindow::ClickButton2()
{
    if(!flag2){
    ui->pushButton_2->setText("关警报");
    flag2 = 1;
    }
    else{
     ui->pushButton_2->setText("开警报");
     flag2 = 0;
    }

}

void MainWindow::ClickButton3()
{
    if(!flag3){
    ui->pushButton_3->setText("关闭风扇");
    flag3 = 1;
    }
    else{
     ui->pushButton_3->setText("打开风扇");
     flag3 = 0;
    }

}


//void MainWindow::onTimeOut()
//{
//    QString controal = "i";
//    QMQTT::Message msg(110,"Controal",controal.toUtf8());
//    client->publish(msg);
//}

运行结果

连接成功状态

qt连接onenet,智能家居,qt5,物联网,c++,嵌入式硬件,Powered by 金山文档

断开连接状态

qt连接onenet,智能家居,qt5,物联网,c++,嵌入式硬件,Powered by 金山文档

这次代码只是第一版,简单的实现了数据接收与指令下发的功能,若是以后有改进,会在之后分享给大家。

代码链接:

百度网盘:

链接:https://pan.baidu.com/s/1Qh5EV0x_xVEhUhfWkLMQpQ?pwd=flas

提取码:flas

希望对诸君有所帮助文章来源地址https://www.toymoban.com/news/detail-602564.html

到了这里,关于QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-2 项目开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OneNet平台使用可视化界面(MQTT协议)

    项目效果: 在OneNet平台建立一个可视化界面,实现效果是下位机的温度,湿度可以在该界面显示,同时该界面可以控制下位机的灯亮与灭。 搭建环境: 软件:keil(编写C语言-修改硬件的程序)+onenet平台(建立可视化界面-上位机功能); 硬件:野火指南者开发板; 可视化界面:

    2024年02月05日
    浏览(38)
  • android studio 使用MQTT协议连接onenet 注意事项和相关函数

    一、注意事项: 1.添加依赖: 2.在注册表允许打开网络 3.在application     /application之间添加用于支持 MQTT(Message Queuing Telemetry Transport)通信协议的 Eclipse Paho Android 服务。 4.打开项目中的 gradle.properties 文件,并确保以下属性设置为true------更新所有的支持库到AndroidX中。 二、

    2024年04月26日
    浏览(35)
  • MQTT协议(新版)接入OneNET平台

    MQTT.fx (用于模拟设备接入) token (计算密钥工具) 首先我们先进入到中移物联官方网站:https://open.iot.10086.cn/ 点击左上角产品服务→基础服务→MQTT物联网套件,然后点击屏幕上方【 立即使用 】,进入MQTT协议平台 接下来点击屏幕上【 添加产品 】,如下图添加一个产品,可参考:官方

    2024年02月08日
    浏览(31)
  • 基于STM32与OneNet平台的智能家居系统设计(代码开源含自制APP代码)_onenet 编程

    请求方式: GET URL: http://api.heclouds.com/devices/device_id/datapoints 服务器或上位机下发主题报文(控制下位机): API函数: 请求方式: POST URL: http://api.heclouds.com/mqtt?topic=xxx 以上2个网络通讯的 API函数 至关重要,就是实现常规情况下OneNet物联网开发的 关键性技术支持。 ( 情况允许

    2024年04月12日
    浏览(51)
  • STM32连接--OneNET,阿里云(MQTT协议)详细教程

    物联网一词在2009年由Kevin Ashton首次使用。物联网指的是通过互联网来连接物理设备。物理设备可以相互之间通过互联网交换数据或由其他设备控制。物联网设备可以是冰箱、交通信号灯、工业控制系统等电子装置或电气设备。最常见的用例之一是传感器数据的收集,传输,分

    2024年02月06日
    浏览(30)
  • 新版ONENET物联网开放平台AT+MQTT指令连接

    ONENET物联网平台自4月28日更新后,暂时没有完整的教程,本文目的旨在帮助大家通过AT+MQTT指令连接到ONENET云平台: 本教程在B站录制有视频教程两个教程结合使用效果更佳: 新版ONENET物联网开放平台ESP8266的AT+MQTT固件库串口通信模拟连接_哔哩哔哩_bilibili 新版ONENET物联网开放

    2024年02月08日
    浏览(30)
  • 中国移动物联网开放平台OneNET学习笔记(2)——设备接入测试(MQTT协议)OneNET Studio篇

    进入Studio平台后,展开菜单栏中的「设备接入与管理」,点击「设备管理」,进入设备列表页面。 点击「添加设备」,选中单个设备(默认方式)输入设备详情,点击「确定」创建设备。 按照提示填写产品的基本信息,进行产品创建;请按照提示尽可能完整、全面地填写相

    2024年02月02日
    浏览(39)
  • 基于STM32和oneNET云平台的数据采集系统(MQTT协议)

    该篇为基于stm32+esp8266通过 mqtt 协议连接 onenet 物联网云平台,单片机部分将采集到的数据(温湿度、光照强度、压强等等)上传至云平台服务器,云平台可下发指令操控单片机,实现远程通信。 1. 第一步,注册账号后点击右上角 控制台 2. 第二步,看左上角 选择切换旧版本 3.

    2024年02月06日
    浏览(39)
  • 【智能家居入门4】(FreeRTOS、MQTT服务器、MQTT协议、微信小程序)

    主控仍旧是STM32F103C8T6,实时操作系统选择的是FreeRTOS。 主要功能: ①环境信息采集并上传至微信小程序 ②微信小程序下发指令控制家电 ③由雨滴传感器和步进电机能够实现下雨自动收起衣服,停雨自动晒出衣服(由于驱动板和步进电机不在身边,这里代码中就用舵机来模拟

    2024年04月11日
    浏览(38)
  • (Onenet)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到Onenet物联网平台

    1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内(注意不要弄错方向) 同时接入天线 2.2 连接ST-Link仿真器 用3条杜邦线接入STM32L的 DIO、GND、CLK中 另

    2024年02月15日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包