本次接上篇基于linux的mplayer的Qt界面化音乐播放器文章中提到这期将简述“用户界面登录”界面的源码。刚好登录界面也应用到了下面文章,顺便一起说一下。本次设计自己也参考了一些思路,链接都不记得了。不对的地方可交流修正。
目录
简介
由STM32F103C8T6单片机作为系统底层(感知层)主控制部分、DH11温湿度传感器和光敏电阻传感器作为系统环境参数数据采集部分、TB6612电机驱动和LED以及OLED屏(用于显示ESP8266 WIFI模块组网连接过程状态和采集到的温湿度数据以及光照电压数据)为系统底层执行部分、ESP8266 WIFI为系统中间层(网络层)数据无线传输部分、Qt设计的上位机软件为系统顶层(应用层)监测和控制部分等部分组成,实现对环境光照强度、温度和湿度等环境参数的自动采集与传输,并在上位机上进行数据展示与分析以及指令下发,以实现自动化控制LED亮度和直流电机转速和转向来动态调整环境参数的目的。
本次用的传感器较少,主要是实现感知层-网络层-应用层整体架构。如有需要可自行扩展各种各样的传感器用于不同场景。
设计架构
感知层: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开关指令,无线下发给感知层提供数据判断依据。
使用到的模块
还有常见的直流电机和LED没有展示出
代码
上位机注册登录界面
源码
本次采用的是文件流,一开始用的图容器,每次打开就要重新注册,没有使用价值,采用文件流就能将账号和密码保存到本地端。如果还是感觉不安全也可以采用数据可以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, "温馨提示", "请输入账号和密码!");
}
}
结果展示
单片机实物图
上位机展示图
说明:
1、各位可以自己参考扩展实现新的课题或用于竞赛或其他设计;
2、整个系统包含单片机、传感器等硬件和上位机软件两部分,都有完整的源代码并都调试好的(自己编写的有详细注释)。
3、系统硬件部分有绘制好的PCB板(嘉立创)项目工程;
版权归原作者 TechCat_ 所有, 如有侵权,请联系我们删除。