概述
设计以STM32开发板为硬件基础,QT作为上位机实现电子元器件仓库环境的实时采集,并将采集的数据实时上传至上位机。具体功能如下:
(1)实时监测仓库的空气温湿度、光照强度等参数。
(2)能够将采集的参数上传至上位机。
(3)具有报警功能,当超出设定参数值时,蜂鸣器报警,并伴有灯光闪烁。
(4)通过按键关闭报警。
(5)能够调节仓库环境,当温度超过设置的阈值,风扇开启,达到通风降温的效果。
(6)显示屏显示环境数据信息。
(7)上位机可以控制下位机调整温度、湿度等环境参数值,具有一键关闭报警功能。
QT界面:
光敏传感器代码:
void Lsens_Init(void)//光敏传感器初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOF, &GPIO_InitStructure);
Adc3_Init();
}
u8 Lsens_Get_Val(void)//获取光敏传感器数值
{
u32 temp_val=0;
u8 t;
for(t=0;t<LSENS_READ_TIMES;t++)
{
temp_val+=Get_Adc3(ADC_Channel_5);
delay_ms(5);
}
temp_val/=LSENS_READ_TIMES;
if(temp_val>4000)temp_val=4000;
return (u8)(100-(temp_val/40));
}
DHT11.c:
#include "dht.h"
void DHT11_IO_IN (void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
}
void DHT11_IO_OUT (void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_SetBits(GPIOF,GPIO_Pin_0);
}
void DHT11_Rst(void)
{
DHT11_IO_OUT();
DHT11_DQ_Low;
delay_ms(20);
DHT11_DQ_High;
delay_us(30);
}
u8 DHT11_Check(void)
{
u8 retry=0;
DHT11_IO_IN();
while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)
{
retry++;
delay_us(1);
};
if(retry>=100)
return 1;
else retry=0;
while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)
{
retry++;
delay_us(1);
};
if(retry>=100)
return 1;
return 0;
}
u8 DHT11_Read_Bit(void)
{
u8 retry=0;
while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)
{
retry++;
delay_us(1);
};
retry=0;
while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)
{
retry++;
delay_us(1);
};
delay_us(50);
if(GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)
return 1;
else
return 0;
}
u8 DHT11_Read_Byte(void)
{
u8 i,dat;
dat=0;
for (i=0;i<8;i++)
{
dat<<=1;
dat|=DHT11_Read_Bit();
}
return dat;
}
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{
u8 buf[5];
u8 i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for (i=0;i<5;i++)
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*temp=buf[2];
*humi=buf[0];
}
}
else return 1;
return 0;
}
void DHT11_Init(void)
{
DHT11_Rst();
DHT11_Check();
}
部分QT上位机代码:
void send::ReadData()
{
QByteArray buf; //提供一个字节数组,QByteArray可用于存储原始字节
buf = serial->readAll();
QString str;
int i=0;
int j=0;
for(i=0;i<6;i++)
{
if(!recData[i].isEmpty())
{
recData[i].clear();
}
foreach(str,buf)
{
if(str=="~")
{
j++;
continue;
}
recData[j].append(str);
}
for(int i=0;i<6;i++){
if(!recData[i].isEmpty()){
qDebug()<<recData[i];
}
}
if(!recData[0].isEmpty())
{
ui->lineEdit->setText(recData[1]);//显示温度
ui->lineEdit_5->setText(recData[2]);//显示湿度
ui->lineEdit_6->setText(recData[0]);//显示光敏
ui->lineEdit_2->setText(recData[4]);//温度预设值
ui->lineEdit_3->setText(recData[5]);//湿度预设值
ui->lineEdit_4->setText(recData[3]);//光照强度预设值
}
buf.clear();
}
欢迎大家批评指正!
最后
以上就是时尚大门为你收集整理的基于STM32F407、QT上位机的电子元器件仓库环境检测系统的全部内容,希望文章能够帮你解决基于STM32F407、QT上位机的电子元器件仓库环境检测系统所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复