基于STM32F407、QT上位机的电子元器件仓库环境检测系统

设计以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();

 }

欢迎大家批评指正!

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
STM32F407是STMicroelectronics公司推出的一款基于Cortex-M4内核的32位微控制器。QT上位机是一种基于QT框架开发的图形化界面软件,用于与STM32F407等嵌入式系统进行通信和控制。 要在STM32F407QT上位机之间进行通信,可以使用串口通信或者USB通信。下面以串口通信为例进行说明。 首先,在STM32F407上配置串口通信相关的GPIO引脚和配置串口参数,包括波特率、数据位、停止位等。然后,在STM32F407的代码中编写接收和发送数据的函数。 在QT上位机中,使用QT的串口通信库对串口进行初始化,并设置相应的串口参数。然后,在QT的界面中添加串口接收和发送的按钮或者其他控件。通过编写相关的代码,实现接收和发送数据的功能,可以通过串口收到来自STM32F407的数据,并实现STM32F407的控制。 在通信过程中,STM32F407发送数据时,将数据发送到串口的发送缓冲区,并通过串口模块发送出去。QT上位机通过串口接收缓冲区接收到STM32F407发送的数据,可以对接收到的数据进行解析和处理。同时,QT上位机也可以通过串口发送数据给STM32F407实现STM32F407的控制。 总之,通过在STM32F407上配置串口通信参数,并在STM32F407QT上位机中编写相应的代码,就可以实现二者之间的通信。这样,可以方便地进行数据传输和控制,提高嵌入式系统的灵活性和交互性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值