赞
踩
本设计是基于51单片机esp8266 wifi温湿度继电器开关控制系统设计,主要实现以下功能:
1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51都可通用。
2、WiFi通讯模块和单片机之间的通讯方式采用串口通讯;
3、LCD1602液晶显示屏可以实时动态的显示采集的温度,湿度的数据,并且显示设定的温度,湿度上下限报警阀值的数据;
4、采集的温度,湿度的数值,不在设定的区间内的时候,便会触发蜂鸣器报警,以及指示灯明确的指示当前的报警触发数据;
5、手机APP无线WiFi通讯连接,实时动态和液晶显示屏同步的显示温度,湿度的数据;
6、手机端可以自由的控制继电器组的开关,模拟空调加热制冷设备的打开和关闭;
7、按键可以自由的设定报警的阀值区间
主要硬件组成:
电源5V供电、单片机最小系统电路(复位电路+时钟晶振电路)、ESP8266串口WiFi通讯模块电路、DHT11温湿度检测传感器电路、按键设定电路、蜂鸣器报警电路、继电器控制电路、LCD1602液晶显示屏电路、报警指示灯电路、电源电路。
部分代码:
U8 outdata[5]; //定义发送的字节数
U8 indata[5];
U8 count, count_r=0;
U8 str[5]={"RS232"};
U16 U16temp1,U16temp2;
void Delay(U16 j)
{ U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us(void)
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void DelayUs2x_1602(uchar ttt)
{
while(--ttt);
}
void DelayMs_1602(uchar tttt)
{
while(tttt--)
{
//大致延时1mS
DelayUs2x_1602(245);
DelayUs2x_1602(245);
}
}
//注意,无论接收到信号还是发送完信号,都会进中断服务程序的
/*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/
void SerialInti()//初始化程序(必须使用,否则无法收发)
{
TMOD=0x20;//定时器1操作模式2:8位自动重载定时器
#ifdef FOSC_12M //在这里根据晶振大小设置不同的数值初始化串口
TH1=0xf3;//装入初值,波特率2400
TL1=0xf3;
#else
TH1=0xfd;//装入初值,波特率9600
TL1=0xfd;
#endif //end of SOC_12M
TR1=1;//打开定时器
SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)
SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据
REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)
EA=1;//开总中断
ES=1;//开串行口中断
}
void Uart1Send(uchar c)
{
SBUF=c;
while(!TI);//等待发送完成信号(TI=1)出现
TI=0;
}
/*
LCD1602写入命令函数
*/
void LCD_Write_Com(uchar com)
{
DelayMs_1602(5);
rs=0;
rw=0;;
en=1;
P0= com;
_nop_();
en=0;
}
/*
LCD1602写入数据函数
*/
void LCD_Write_Data(uchar Data)
{
DelayMs_1602(5);
rs=1;
rw=0;
en=1;
P0= Data;
_nop_();
en=0;
}
/*
LCD1602清屏函数
*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs_1602(5);
}
/*
LCD1602写入字符函数
*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*
LCD1602写入字符串函数
*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) //写入字符串的函数
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*
LCD1602初始化函数
*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs_1602(5);
LCD_Write_Com(0x38);
DelayMs_1602(5);
LCD_Write_Com(0x38);
DelayMs_1602(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/
LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/
DelayMs_1602(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/
}
//DHT11温湿度传感器读取数据的函数
void COM(void)
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!P2_0)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(P2_0)U8temp=1;
U8FLAG=2;
while((P2_0)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void RH(void)
{
//主机拉低18ms
P2_0=0;
Delay(180);
本项目包含的所有文件都可以点击下面的名片,发送 “ 48、基于51单片机esp8266 wifi温湿度继电器开关控制系统设计 ” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。