功能说明
功能如下:
1、用stm32控制ds18b20采集温度
2、然后按键可以设置上下限温度
3、采集的温度低于下限温度时候打开加热片开始加热
4、加热到上限温度关闭加热片停止加热
5、采集的温度可以在oled显示
6、然后弄个按键控制一个紫外线灯模块,按一下打开紫外线灯一段时间,30s后自动关闭
7、将采集的温度上传到物联网平台onenet
系统框图
原理图
程序源代码-部分
int main(void)
{
unsigned char *dataPtr = NULL;
unsigned short timeCount = 0; //发送间隔变量
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
uart2_init(115200);//串口2初始化
YHGUI_Config(); //OLED初始化
YHGUI_DispString(0,0,"正在初始化>>>>>>",16,1); //OLED显示初始化
YHGUI_DispString(0,32,"正在连接onenet",16,1);
ESP8266_Init(); //初始化ESP8266
printf("8266_INIT_END
");
RELAY=1;
LED0=1;
while(DS18B20_Init())//温度初始化
{
}
DS18B20_Get_Temp();//温度初始化
while(OneNet_DevLink()) //接入OneNET
YHGUI_DispString(0,32,"连接onenet成功 ",16,1);
delay_ms(500);
printf("接入onenet成功");
YHGUI_DispString(0,32," ",16,1);
YHGUI_DispString(0,0," ",16,1);
while(1)
{
keyscan();
temperature = DS18B20_Get_Temp();//获取温度
temperature=temperature/10;
if(temperature<0)
{
temperature=-temperature; //转为正数
}
if(set_flag==0){
if(time_miao==1)
sprintf(dis1," 恒温外卖柜 %02ds ",add_miao);
else
sprintf(dis1," 恒温外卖柜 ");
YHGUI_DispString(0,0,dis1,16,1);}
else if(set_flag==1)YHGUI_DispString(0,0," 温度上限设置 ",16,1);
else if(set_flag==2)YHGUI_DispString(0,0," 温度下限设置 ",16,1);
sprintf(dis1," 当前温度:%02d℃ ",temperature);
YHGUI_DispString(0,16,dis1,16,1); //显示
sprintf(dis1," 温度上限:%02d℃ ",temp_high);
YHGUI_DispString(0,32,dis1,16,1); //显示
sprintf(dis1," 温度下限:%02d℃ ",temp_low);
YHGUI_DispString(0,48,dis1,16,1); //显示
if(temperaturetemp_high)RELAY=0;
if(++timeCount >= 5) //时间间隔1s
{
if(time_miao==1){add_miao++;LED0=1;}else LED0=0;
if(add_miao>30){add_miao=0;time_miao=0;}
delay_ms(100);
humidityH=11;
humidityL=22;
temperatureH=temperature; //温度整数部分
temperatureL=0; //温度小数部分
printf("hum temp=%d .%d %d .%d
",humidityH,humidityL,temperatureH,temperatureL);
printf( "OneNet_SendData
");//通过串口1发送提示信息(要开始发送数据了)
OneNet_SendData();//发送数据给onenet
printf("send_data_end
");
timeCount = 0;
ESP8266_Clear();
}
dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据
if(dataPtr != NULL)//如果返回数据不为空
OneNet_RevPro(dataPtr);//平台返回数据检测
delay_ms(10);
}
}