stm32---室内温湿度监控系统

本文介绍了一个基于STM32的室内温湿度监控系统的开发,系统能实时监测并显示环境温湿度,具备阈值报警功能,采用DHT11传感器,通信协议采用232总线。文章涵盖了硬件选择、存储单元、显示设备、通信介质等方面的详细内容。
摘要由CSDN通过智能技术生成

项目处于开发阶段,尚未完成,仍在不断更新

一、系统功能要求

  1. 设备能够检测并显示环境温湿度值
  2. 系统监控软件能够实时监控环境温湿度值
  3. 系统监控软件能够设置设备温度值的上下阈值, 设备能够发出声光报警, 监控软件能够发出报警提示或者取消报警
  4. 设备及监控软件能够查看对应设备的温度阈值信息
  5. 设备能够显示时间
    二、软硬件需求

这里写图片描述

三、软硬件精选

1、处理器:stm32 / CC2530(常用于做智能家具,支持 Z-Stack 协议栈<基于ZigBee实现的>),stm32W系列的芯片也支持 Z-Stack 协议栈。
我们选用 STM32F103VBT6

2、温湿度传感器:(1)Pt100 (热电偶),使用时需要进行校准,但是精度高。
(2)DS18B20, 单总线的
(3)DHT11:温湿度传感器(精度低) ,学习过程中暂时选用 DHT11

3、存储单元:存储阈值,
外部存储单元:AT24C02,2K存储空间,(EEPROM); Flash,128M。
内部存储单元:ROM(单片机内部的 Flash)。我们选用内部存储单元。
选用存储单元要考虑其寿命,存储单元的寿命与擦写次数有关(一般为10万次)

4、输出设备:(1)数码管:占用 16 个I/O口,显示的内容有限。
(2)LCD1602:占用 11 个I/O口(八根data线,三根电源线),两行,每行显示16个字符,不能显示汉字。
(3)TFT:多彩屏,可现实各种颜色的字以及汉字,有65536中颜色可选
有三种驱动方式:并口驱动,SPI驱动,FSMC驱动(刷屏频率更快)。
(4)LCD12864:每行显示128个字符,共64行(可显示汉字)。
(5)串口屏:串口驱动(三根线:Rx,Tx,GND),工作中使用最多。

5、通信协议:

6、传输介质:IIC、USB、SPI、SDIO 的传输近距离太近,不适合;
CAN 配置比较麻烦,但是更可靠更安全,多用于汽车以及军用;
无线,需要买一个无线模块,然后与 I/O 口连接,可以选用;
这里我们选用有线传输介质:485总线,232总线,先使用232总线,后期换为485总线。

7、输入设备:键盘、触摸屏
8、发声设备:蜂鸣器、喇叭
9、发光设备:LED
10、时钟电路:32内部的RTC
11、操作系统:uC/OS-II,创建多个任务(1、根据协议接收指令;2、指令响应;3、温湿度采样;4、输入的检测,切屏)

四、代码实现

1、由定时器控制串口接收一个字符串,并发送给上位机。

串口、定时器的配置函数略去,,

中断函数:
接收中断:接收数据,打开定时器;
定时器中断:关闭接收中断,关闭定时器,定时器计数值清零,打开发送中断;
发送中断:发送数据,发送完成后,打开接收中断,关闭发送中断。

unsigned char rsvbuff[100];
unsigned char *rsvBufferPoint;

unsigned intrsvbuffcnt;

void USART1_IRQHandler(void)           
{
if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) == SET)
{
USART_ClearFlag(USART1, USART_FLAG_ORE);
USART_ReceiveData(USART1);
}
if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
rsvbuff[rsvbuffcnt++] = USART_ReceiveData(USART1);

USART_ClearFlag(USART1, USART_IT_RXNE);

TIM_Cmd(TIM2, ENABLE);      
rsvBufferPoint = rsvbuff;
}


if (USART_GetITStatus(USART1, USART_IT_TXE) == SET)
{
if (rsvbuffcnt != 0)
{
USART_ClearFlag(USART1, USART_IT_TXE);

  USART_SendData(USART1, (char)*rsvBufferPoint);
rsvBufferPoint++;
rsvbuffcnt--;
}else
{
while (USART_GetITStatus(USART1, USART_IT_TC) == SET) ; 
USART_ClearFlag(USART1, USART_IT_TC);

USART_ClearFlag(USART1, USART_IT_TXE);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
}
}
}
void TIM2_IRQHandler(void)
{
if (TIM_GetFlagStatus(TIM2, TIM_IT_Update) == SET)
{
TIM_ClearFlag(TIM2, TIM_IT_Update);

USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);

TIM_Cmd(TIM2, DISABLE);
TIM_SetCounter(TIM2, 0x0000);

USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
}
}

2、DHT11 采集温湿度,并显示在 LCD1602 上

配置好 LCD1602、DHT11:

LCD1602的配置:参考《LCD1602数据手册》的时序图,和《LCD1602液晶完整中文资料》的11条指令

void LCD_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);

    //LCD1602
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值