(三)stm32+dht11+esp8266、MQTT+阿里云采集温湿度数据,进行可视化显示。

该文介绍了如何使用STM32F103C8T6微控制器、ESP826601SWiFi模块和DHT11温湿度传感器构建硬件系统,结合QT软件和阿里云MQTT服务,创建一个能够接收和显示温湿度信息的QT客户端。QT客户端利用MQTT官方库与阿里云设备进行通信,实现了数据的发布与订阅功能。
摘要由CSDN通过智能技术生成
  1. 介绍

前两篇文章主要说了如何使用阿里云和MQTT.fx。已经实现了设备与设备之间的通信,如果还不会使用阿里云实现设备之间通信的,先移步去看我的前两篇文章,按着步骤来小白也行。这篇文章主要展示实际应用,以及QT客户端核心代码。

  1. 选型

2.1硬件:采用keil搭建代码

主控芯片:stm32f103 c8t6

wifi模块:esp8266 01s

温湿度模块:dht11传感器

usb转ttl进行串口调试,stlink _v2进行程序下载。还有面包板,连接线若干。

连接好之后就是这个样子了:

2.2软件:QT

QT提供了MQTT官方库,下载库之后直接使用就可以了,使用起来是非常的方便好用。我的QT界面1.0版本就是下面这样了。可以收到硬件发送过来的信息:这是收到的温度信息。现在显示的是Json字符串数据,可以用解析后拿到具体的数据,你们可以再做一个可视化的label什么的显示出来。

连接成功后串口调试助手就会显示如下数据:

顺便可以去阿里云去看看硬件、软件有没有连接上:

我这里QT客户端连接的qt_client这个设备,stm32硬件连接的iot_mq2这个设备,都是已经在线了。

  1. 代码

QT代码:

mainwindow.c

#include "mainwindow.h"
#include "ui_mainwindow.h"

static QString HostName=" ";
static quint16 Port = 1883;
static QString username = "" ;
static QString password = "";
static QString ClientId = "";
static QString m_topic_publish= "/i8sh22T2TuH/qt_client/user/update";
static QString m_topic_get= "/i8sh22T2TuH/qt_client/user/get";

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    mqtt_client=new QMqttClient;
    ConnectOrDisConnect();


    Publish(m_topic_publish);

}

MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::ConnectOrDisConnect()
{
    connect(ui->pushButton_connect,&QPushButton::clicked,this,[=](){
        if(mqtt_client->state()==QMqttClient::Disconnected)
        {
            mqtt_client->setHostname(HostName);
            mqtt_client->setPort(Port);
            mqtt_client->setUsername(username);
            mqtt_client->setPassword(password);
            mqtt_client->setClientId(ClientId);
            mqtt_client->connectToHost();

            if(mqtt_client->state()==QMqttClient::Disconnected)
            {
                qDebug()<<mqtt_client->error();
            }
            else if(mqtt_client->state()==QMqttClient::Connecting)
            {
                ui->pushButton_connect->setText("断开");
                ui->label_state->setText("Connect");
                Subcribe();
            }
        }
        else
        {
            mqtt_client->disconnectFromHost();
            ui->pushButton_connect->setText("连接");
            ui->label_state->setText("DisConnect");
        }
    });

}

void MainWindow::Subcribe()
{
    if(mqtt_client->state()==QMqttClient::Connecting)
    {
        qDebug()<<"connect success";
        mqtt_client->subscribe(m_topic_get);
        connect(mqtt_client, SIGNAL(messageReceived(QByteArray,QMqttTopicName)), this, SLOT(receiveMess(QByteArray,QMqttTopicName)));
    }


}

void MainWindow::Publish(QString topic)
{
    connect(ui->pushButton_publish,&QPushButton::clicked,this,[=](){
        if(ui->lineEdit_publish->text()!="")
        {
            if (mqtt_client->publish(topic, ui->lineEdit_publish->text().toUtf8()) == -1)
                   QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not publish message"));
        }
    });

}

void MainWindow::receiveMess(QByteArray message, QMqttTopicName name)
{
    Q_UNUSED(name);
    QString msg=message;
    qDebug()<<msg;
    ui->textBrowser_recv->append(msg);
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "QDebug"
#include "QLabel"
#include "QFile"
#include "QtMqtt/qmqttclient.h"
#include "QJsonObject"
#include "QJsonDocument"
#include "QJsonArray"
#include "QMessageBox"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void init_mqtt();

    void sendTopic(QString data);

    void ConnectOrDisConnect();

    void Subcribe();

    void Publish(QString topic);

public slots:
    void receiveMess(QByteArray message,QMqttTopicName name);



private:
    QMqttClient *mqtt_client;
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.ui

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多读书少上班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值