本设计的硬件构成:
STM32F103C8T6单片机最小系统板(包含+3.3V稳压电路+时钟晶振电路+复位电路(上电自复位,手动复位)),DHT11温湿度传感器、OLED12864显示屏、按键、蜂鸣器、LED指示灯、蓝牙通信模块组合而成;
功能介绍:
1、本设计采用DHT11数字型温湿度传感器,可同时监控当前环境的温度和湿度。单片机将读取到的温度、湿度值显示在OLED显示屏上。
2、系统可分别设定温度、湿度的上限值、下限值。当检测温度或湿度超过上下限值时,开启蜂鸣器报警。同时在显示屏进行相应的提示,如:温度、湿度均在范围内,显示屏提示:环境正常;当温度(湿度)超过上限值,显示屏提示:温度(湿度)过高;当温度(湿度)超过下限值,显示屏提示:温度(湿度)过低;
3、按键功能分别为:按键1为设置键;按键2为加建;按键3为减键;在设定完成后,系统退出设置状态,并对设置值进行保存(重新上电无需再重新设置)。
4、通过蓝牙模块,可使用手机APP对系统进行监控,也可对设置值进行调整(功能与按键相同)。
主要物料清单及型号:
显示屏:OLED12864-3.3V;
单片机:STM32F103C8T6;
蓝牙模块:JDY-31-SPP;
蜂鸣器:5V有源蜂鸣器;
温湿度传感器:DHT11;
PCB图:
部分程序源码:
int main(void)
{
u8 key_value;
u8 buffer[5];
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
TIM3_Int_Init(49,7199);//50ms
// EXTIX_Init(); // 初始化外部中断
LED_Init();
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,4);
if(datatemp[0]!=0xffff)
Humi_min=datatemp[0],Humi_max=datatemp[1],Temp_min=datatemp[2],Temp_max=datatemp[3];
buzzer=0;
delay_ms(200);
buzzer=1;
OLED_ShowChinese(16,0,0,16);//环境监控系统
OLED_ShowChinese(32,0,1,16);
OLED_ShowChinese(48,0,2,16);
OLED_ShowChinese(64,0,3,16);
OLED_ShowChinese(80,0,4,16);
OLED_ShowChinese(96,0,5,16);
OLED_ShowChinese(0,16,6,16); //温度
OLED_ShowChinese(16,16,9,16);
OLED_ShowString(32,16,": --.- C ",16);
OLED_ShowChinese(80,16,8,16);
OLED_ShowChinese(0,32,7,16);//湿度
OLED_ShowChinese(16,32,9,16);
OLED_ShowString(32,32,": 00% ",16);
OLED_ShowChinese(0,48,10,16);
OLED_ShowChinese(16,48,11,16);
OLED_ShowString(32,48,": ",16);
OLED_ShowChinese(48,48,12,16);
OLED_ShowChinese(48,48,13,16);
OLED_Refresh();
delay_ms(500);
while(1)
{
key_value=KEY_Scan(0);
key_handle(key_value);
APP_Receive();
if (dht11_read_data(buffer) == 0)
{
Humi = (buffer[0]*10) + buffer[1] ;
Temp = (buffer[2]*10) + buffer[3];
warn_process();
}
if(disFlag==1) //显示标志
{
disFlag = 0;
if(set==0)
{
display_dht11(Temp,Humi);
if(warn_flag!=0)
{
buzzer=buzzer_state%2;
buzzer_state++;
}
else
{
buzzer=1;
buzzer_state=0;
}
}
}
if(appFlag==1)
{
appFlag=0;
APP_Data_Update();
}
}
}