1 基于51单片机温湿度检测系统无线蓝牙APP上传设计
1.1 功能概述
本系统以STC89C52单片机为核心控制模块,结合DHT11温湿度传感器、蓝牙通信模块以及电源管理电路,实现了对环境温湿度的实时采集、处理与无线传输。单片机负责接收来自DHT11传感器的温湿度数据,经过数据解码与处理后,通过蓝牙模块将结果传输至手机APP端进行显示。APP端可实时显示数据,格式为“T:23℃ H:72%”,从而实现对环境温湿度的远程监测。
系统的主要功能包括:
- 通过DHT11温湿度传感器获取环境温度与湿度数据。
- STC89C52单片机对传感器数据进行解码与处理。
- 通过蓝牙模块将采集数据发送到手机,实现无线传输。
- 手机端APP实时显示温湿度信息,便于用户随时掌握环境情况。
该系统整体具有电路结构简单、功耗低、稳定性强、交互直观等特点,广泛适用于家居环境监测、农业温室监控、仓储管理等场景。
2 系统电路设计
2.1 单片机最小系统电路
本设计采用STC89C52单片机作为主控芯片。其最小系统电路包括时钟电路、复位电路和电源电路。
- 时钟电路:采用12MHz晶振电路,为单片机提供稳定的工作时钟。
- 复位电路:通过上电复位电容与电阻的配合,保证单片机在通电瞬间能进入正常的初始化工作状态。
- 电源电路:单片机工作电压为5V,通过电源模块为其供电,同时在VCC与GND之间加入去耦电容,以增强系统的抗干扰能力。
该最小系统电路为整个项目的运行提供了稳定的硬件基础,是保证程序正常执行的关键。
2.2 DHT11温湿度传感器电路
DHT11是一种常用的数字式温湿度传感器,其输出为单总线信号,具有响应快、精度适中、价格低廉等优点。
- 接口方式:DHT11通过单总线与单片机相连,一般接在P2.0端口。
- 电源要求:工作电压为3.3V~5V,本系统采用5V供电。
- 信号传输:数据采用特定时序的脉冲编码方式,单片机需按照协议进行数据采集。
DHT11内部包含一个NTC温度测量元件和一个电容湿度测量元件,能够同时提供温度与湿度的数字信号。
2.3 蓝牙通信电路
本系统选用常见的HC-05蓝牙串口模块,实现单片机与手机之间的数据无线传输。
- 接口方式:通过UART串口通信与单片机相连,模块的TXD接单片机RXD,RXD接单片机TXD。
- 电源需求:模块工作电压为3.6V~6V,本设计中采用5V供电。
- 通信协议:模块支持标准串口通信协议,波特率可设定为9600bps,保证与单片机的串口通信稳定。
蓝牙模块的加入,使系统具备无线数据上传功能,方便用户通过手机APP实时监测环境参数。
2.4 电源电路
电源部分采用常见的直流稳压电路,将外部电源电压稳定转换为5V直流电,分别供给单片机、传感器及蓝牙模块。为了保证系统稳定运行,在电源输出端加入电解电容和陶瓷电容,用于滤波和抑制高频干扰。
3 程序设计
程序设计分为单片机主控程序、DHT11数据采集程序和蓝牙通信程序三部分,三者相互配合,实现数据的完整采集、处理和传输。
3.1 主程序设计
主程序负责初始化单片机外设、循环采集温湿度数据,并将结果通过蓝牙模块发送至手机APP。主要流程如下:
- 系统初始化,包括定时器、中断、串口等模块的配置。
- 调用DHT11采集程序,获取温度与湿度值。
- 格式化数据,转换为字符串形式。
- 通过串口将数据发送至蓝牙模块。
- APP端接收数据并显示。
主程序示例代码:
#include <reg52.h>
#include "dht11.h"
#include "uart.h"
unsigned char temp, humi;
void main() {
UART_Init(); // 初始化串口
DHT11_Init(); // 初始化DHT11
while(1) {
if(DHT11_Read_Data(&temp, &humi) == 1) {
UART_Send_String("T:");
UART_Send_Byte(temp/10 + '0');
UART_Send_Byte(temp%10 + '0');
UART_Send_String("'C ");
UART_Send_String("H:");
UART_Send_Byte(humi/10 + '0');
UART_Send_Byte(humi%10 + '0');
UART_Send_String("%\r\n");
}
Delay_ms(1000); // 每秒采集一次
}
}
3.2 DHT11传感器驱动程序设计
DHT11的数据传输需严格遵循时序协议,单片机通过控制IO口实现初始化信号,并读取传感器返回的40位数据(温度高8位、温度低8位、湿度高8位、湿度低8位、校验位)。
DHT11驱动代码示例:
#include <reg52.h>
#include "delay.h"
sbit DHT11_IO = P2^0;
unsigned char DHT11_Read_Byte(void) {
unsigned char i, dat = 0;
for(i=0; i<8; i++) {
while(!DHT11_IO); // 等待低电平结束
Delay_us(30);
if(DHT11_IO) dat |= (1<<(7-i));
while(DHT11_IO); // 等待高电平结束
}
return dat;
}
bit DHT11_Read_Data(unsigned char *temp, unsigned char *humi) {
unsigned char i, buf[5];
// 发送起始信号
DHT11_IO = 0;
Delay_ms(20);
DHT11_IO = 1;
Delay_us(30);
// 等待响应
if(!DHT11_IO) {
while(!DHT11_IO);
while(DHT11_IO);
// 读取5字节数据
for(i=0;i<5;i++) {
buf[i] = DHT11_Read_Byte();
}
// 校验
if(buf[4] == (buf[0]+buf[1]+buf[2]+buf[3])) {
*humi = buf[0];
*temp = buf[2];
return 1;
}
}
return 0;
}
3.3 串口通信与蓝牙传输程序设计
蓝牙模块通过单片机串口实现数据传输,波特率设为9600bps。通过发送字符串方式,将采集到的温湿度数据显示到手机端。
串口初始化及发送程序如下:
#include <reg52.h>
void UART_Init(void) {
SCON = 0x50; // 串口工作方式1
TMOD |= 0x20; // 定时器1,8位自动重装
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
TR1 = 1; // 启动定时器1
}
void UART_Send_Byte(unsigned char dat) {
SBUF = dat;
while(!TI);
TI = 0;
}
void UART_Send_String(unsigned char *str) {
while(*str) {
UART_Send_Byte(*str++);
}
}
通过上述程序,单片机能够将采集到的温湿度值转换为字符串数据,并通过蓝牙模块实时上传到手机APP,实现无线环境监测功能。
4 总结
本设计基于STC89C52单片机,结合DHT11温湿度传感器与HC-05蓝牙模块,实现了温湿度的实时采集与无线传输功能。系统结构清晰,硬件电路简单,程序设计合理,能够稳定完成环境参数的采集与数据上传工作。通过手机端APP实时显示温湿度信息,用户可以随时掌握环境变化情况,具备较强的实用价值与推广意义。在后续扩展中,可以增加数据存储功能、报警功能,甚至与物联网平台对接,进一步提升系统的智能化水平。