​STM32 + QT软件UI 环境参数监测通信系统

     本次接上篇基于linux的mplayer的Qt界面化音乐播放器文章中提到这期将简述“用户界面登录”界面的源码。刚好登录界面也应用到了下面文章,顺便一起说一下。本次设计自己也参考了一些思路,链接都不记得了。不对的地方可交流修正。

目录

简介

 设计架构

使用到的模块

​编辑

代码

上位机注册登录界面

源码

结果展示

单片机实物图

上位机展示图

​说明:


简介

     由STM32F103C8T6单片机作为系统底层(感知层)主控制部分、DH11温湿度传感器和光敏电阻传感器作为系统环境参数数据采集部分、TB6612电机驱动和LED以及OLED屏(用于显示ESP8266 WIFI模块组网连接过程状态和采集到的温湿度数据以及光照电压数据)为系统底层执行部分、ESP8266 WIFI为系统中间层(网络层)数据无线传输部分、Qt设计的上位机软件为系统顶层(应用层)监测和控制部分等部分组成,实现对环境光照强度、温度和湿度等环境参数的自动采集与传输,并在上位机上进行数据展示与分析以及指令下发,以实现自动化控制LED亮度和直流电机转速和转向来动态调整环境参数的目的。

     本次用的传感器较少,主要是实现感知层-网络层-应用层整体架构。如有需要可自行扩展各种各样的传感器用于不同场景。

8b21f329a96f41c5a098c89297b87741.png

 设计架构

     感知层:STM32C8T6单片机根据DH11温湿度传感器内部原理定义引脚,达到采集环境温度和湿度数据;同时,通过ADC通道的引脚对光敏电阻传感器模块进行定义,达到采集环境中的光照强度模拟信号转换为数字信号,再通过电压转换公式后的电压值大小来反映光照强弱。另外,通过STM32C8T6单片机根据I2C的SCL和SDA的引脚进行定义,达到在OLED 屏幕上数据。此外,通过定时器通道定义PWM来自动化控制LED亮度(光照电压越小,环境光照越强,LED亮度越暗直至熄灭),否则LED灯熄灭。最后,下发指令控制TB6612电机驱动模块的PWM占空比的输入进而控制电机的转速和转向。

     网络层:设置两个ESP8266 WIFI模块的AT指令。对于面向STM32C8T6单片机的ESP8266 WIFI模块,通过AT指令将其设置为AP模式下的服务器。对于面向客户端的ESP8266 WIFI模块,通过AT指令将其设置为STA模式下的客户端。都将其设置为TCP协议传输数据来确保服务器的数据上传和客户端的数据下发。

    应用层:通过QT5.11中的UI下的各种等控件设计上位机界面。先进行注册登录验证后,通过打开串口开关,然后通过两个ESP8266 WIFI模块每5秒客户端会接收到来自感知层上传的数据包,再通过解析自定义组包数据后得到温湿度和光照电压值,之后将温度、湿度和光照电压值存放到“通信日志”的表格中,方便保存到本地进行有必要的数据分析;同时,上位机中分别显示当前温湿度值、期间的最大和最小温湿度值。每1分钟会将温湿度平均值,最终以线条方式显示出来,可直观观察出温湿度变化。此外可自定义为配置控制温度和湿度阈值、电机的转速和转向和LED开关指令,无线下发给感知层提供数据判断依据。

d0aba3c101454fdcbd74fd4ca7bc219b.png

使用到的模块

还有常见的直流电机和LED没有展示出

48f786fcf39c4953afae62886c28bb63.png

9f8bfb29dffd498cb90c4ed32ab965e1.png

代码

上位机注册登录界面

e1176af7ba994b6787e5cacee0258ed5.png

5ad8122c56e2437fae90b2ff532c0127.png

源码

本次采用的是文件流,一开始用的图容器,每次打开就要重新注册,没有使用价值,采用文件流就能将账号和密码保存到本地端。如果还是感觉不安全也可以采用数据可以SQL存储。注册其实就向文件中写数据,登录就是往文件中读取数据再进行匹配验证。下面是登录按钮的触发事件源码,注册界面就是做了一个hide()和show()操作,然后进行注册界面上的操作。修改密码界面没截图。

//登录界面 登录按钮 ----> home 界面
void LOGIN::on_in_Home_butt_clicked()
{
    //文件流
       if((ui->Longin_ID->text().trimmed() != "")&&(ui->Longin_Password->text().trimmed() != ""))//用于验证两个文本输入框文本值是否都被填充了
       {
           flag = 0;
           QString qusername = ui->Longin_ID->text();
           QString quserpass = ui->Longin_Password->text();
           QString filename = "C:/Users/Admin/Desktop/date/user_date.txt";  // 文件路径和名称
           QFile file(filename);
           if(file.size()==0 || file.size()==2)//查看文件属性看文件为空的是为多少
           {
               QMessageBox::information(this, "出错", "暂时没有用户注册,请前往注册");
               return ;
           }

           if (file.open(QIODevice::ReadOnly | QIODevice::Text))
           {
               QTextStream stream(&file);
               while (!stream.atEnd()) {
                   QString line = stream.readLine();
                   QStringList parts = line.split("--");
                   if (parts.size() == 2)
                   {
                       QString id = parts[0].split("ID:")[1].trimmed();  //按格式截取字符
                       QString code = parts[1].split("Password:")[1].trimmed();
                       if (id == qusername && code == quserpass)
                       {
                           flag = 1;
                           this->hide();
                           Home->show();
                           break;
                       }
                   }
               }
               if(flag == 1){
                   QMessageBox::information(this, "登录成功", "欢迎使用智慧农业环境监测数据通信系统!");
                   emit start_find_serial();
                   flag = 0;
               }
               else{
                    QMessageBox::information(this, "登录失败", "用户或密码有误!");
               }
               file.close();
           }else{
                   qDebug() << "error";
           }
       }else{
           QMessageBox::information(this, "温馨提示", "请输入账号和密码!");
       }

}

结果展示

单片机实物图

201ba2e8a2a14b839e0bffaf08791ecc.png

上位机展示图

0301bed6c56b4dcaa3ee1e18ca0b50c2.png

04060794c3ea4cceaec96112b6d2f614.png

fccd1a18ea444a4bb818b45199518f30.png


​说明:

​1、各位可以自己参考扩展实现新的课题或用于竞赛或其他设计;
​2、整个系统包含单片机、传感器等硬件和上位机软件两部分,都有完整的源代码并都调试好的(自己编写的有详细注释)。
​3、系统硬件部分有绘制好的PCB板(嘉立创)项目工程;

a104160e3b40404082cdf8fd1f2c4222.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值