基于STM32单片机的智能衣柜设计

描述

功能说明

功能如下:

1、用stm32控制ds18b20采集温度

2、然后按键可以设置上下限温度

3、采集的温度低于下限温度时候打开加热片开始加热

4、加热到上限温度关闭加热片停止加热

5、采集的温度可以在oled显示

6、然后弄个按键控制一个紫外线灯模块,按一下打开紫外线灯一段时间,30s后自动关闭

7、将采集的温度上传到物联网平台onenet

系统框图

STM32

 

原理图

 

STM32

 

程序源代码-部分

 

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);


}


}

 

 审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分