1、前言

        本设计以STM32F103C8T6单片机为主控芯片,WIFI模块ESP8266-01S作为通信模块连接onenet云平台,通过DHT11温湿度传感器采集温度和湿度、雨滴传感器检测是否下雨、光照传感器检测光照数据、紫外线传感器检测紫外线强度、时钟模块自动走时。OLED屏幕显示当前温度、湿度、光照强度、紫外线强度、天气情况是否下雨、晾衣架状态、系统时间和模式。通过WIFI连接ONENET云平台,手机APP连接ONENET云平台,APP可以查看当前环境信息数据,可调节阈值范围。操作简单易懂,手把手教小白完成整套设计,UniAPP开发环境搭建非常简单,可打包生成手机APP。

2、元器件组成

     本设计由STM32F103C8T6单片机+WIFI模块ESP8266-01S+OLED屏幕电路+SU03T语音识别模块+JQ8400语音播报模块+DHT11温湿度传感器+雨滴传感器+光照传感器+紫外线传感器+ULN2003步进电机+继电器+按键+电源电路组成

3、功能简介

1、环境采集:DHT11温湿度传感器采集温度和湿度、雨滴传感器检测是否下雨、光照传感器检测光照数据、紫外线传感器检测紫外线强度、时钟模块自动走时。
2、屏幕显示:OLED屏幕显示当前温度、湿度、光照强度、紫外线强度、天气情况是否下雨、晾衣架状态、系统时间和模式
3、下雨检测:通过雨滴传感器检测是否下雨。
4、阈值设置:可设置温度、湿度、紫外线强度和光照阈值
5、温度报警:温度大于设置的阈值时语音播报提醒
6、湿度报警:湿度大于设置的阈值时语音播报提醒
7、紫外线报警:紫外线大于设置的阈值时语音播报提醒
8、模式选择:选择自动模式和手动模式切换
9、手动晾晒:手动模式下,通过app远程控制晾衣架伸出和收回功能,也可通过按键控制晾衣架伸出和收回功能。
10、自动晾晒:自动模式下,当下雨了或者阳光太低时,能自动收起晾衣架上的衣服。当天气良好时,能自动伸展开衣架晒衣服。具有识别晴天雨天的功能,自动实现收晾衣服功能。
11、定时杀菌:自动模式下,通过按键设置定时开启杀菌和定时关闭杀菌,当定时杀菌开启时间到时自动开启杀菌,当定时杀菌关闭时间到时自动关闭杀菌。
12、语音控制:通过语音识别切换模式,手动模式下,通过语音控制晾衣架伸出和收回,控制杀菌开启和关闭
13、系统校时:通过按键设置系统时间
14、远程控制:通过WIFI连接ONENET云平台,手机APP连接ONENET云平台,APP可以查看当前环境信息数据,可调节阈值范围

4、设计实现效果

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1vCew6nEaF/?spm_id_from=333.1387.homepage.video_card.click

资料分享看文章末尾

5、设计原理图

6、设计PCB图

7、程序设计

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "timer.h" 
#include "menu.h"
#include "key.h"
#include "modules.h"
#include "oled.h"

#include "USART2/usart2.h"
#include "usart3.h"
#include "play.h"
#include "voice.h"

#include "adc.h"
#include "light.h"
#include "zwx.h"

#include "yudi.h"
#include "DHT11/dht11.h"

#include "DS1302/ds1302.h"
#include "uln2003.h"
#include "relay.h"
 
 
/****************洪科单片机工作室*******************
		              
***          破晓单片机											
***          项目:基于STM32单片机WiFi智能晾衣架设计
***          BILIBILI:洪科单片机
***          小红书:洪科单片机
***          授权IP:洪科单片机
***          淘宝:洪科单片机 
***          闲鱼:洪科单片机 
***          版本:V01.01
***          MCU:STM32F103C8T6
 
******************洪科单片机***********************/
 
//显示界面
CaiDanJieGouTi  KeyTab[SIZE_CAIDAN]=
{
    {0 ,0 ,0 ,0 ,0 ,Main_Menu0},  /
	{1 ,1 ,1 ,1 ,1 ,Main_Menu1},  
	{2 ,2 ,2 ,2 ,2 ,Main_Menu2},  
	{3 ,3 ,3 ,3 ,3 ,Main_Menu3},  
	{4 ,4 ,4 ,4 ,4 ,Main_Menu4},  
	{5 ,5 ,5 ,5 ,5 ,Main_Menu5},  
	{6 ,6 ,6 ,6 ,6 ,Main_Menu6},  
    {7 ,7 ,7 ,7 ,7 ,Main_Menu7},	
	{8 ,8 ,8 ,8 ,8 ,Main_Menu8},  
    {9 ,9 ,9 ,9 ,9 ,Main_Menu9},	
	{10,10,10,10,10,Main_Menu10},  
    {11,11,11,11,11,Main_Menu11},	
	{12,12,12,12,12,Main_Menu12},  
 
} ;
 
//传感器变量声明
typedef struct
{
 
	u8 temp; 
	u8 humi; 
	uint16_t ZWX; 		
	uint16_t light; 
	uint16_t YUDI; 	
	uint16_t yuyin; 
 
}SensorModulesValue;
 
typedef struct
{
	uint16_t tempTV;//
	uint16_t humiTV;//
	uint16_t lightTV;//
	uint16_t ZWXTV;//  
}SensorThresholdValue;
 
typedef struct
{
	uint16_t sendcount;	
	
 	uint8_t MODEFlag;		
 	uint8_t MOTORFlag;	
 	uint8_t MOTORKZFlag;		
 	uint8_t RELAYFlag;			
 
 	uint8_t BEEPFlag;	
 		
 	uint8_t BJ1Flag;			
 	uint8_t BJ2Flag;	
 	uint8_t BJ3Flag;	
 	uint8_t BJ4Flag;	 	 			
}DriveFlag;
 
int main(void)
 {
			delay_init();
			TIM3_Int_Init(499,7199);//1MS系统定时
			OLEDGUI_Config(); 				//OLED初始化 	
			OLEDGUI_DispString(30,0,"Init...",16,1);	  
	 		key_Init();//按键初始化
 
	 		Adc_Init();//Adc初始化
			light_Init();//light初始化 
			zwx_Init();//zwx初始化 
 			DHT11_Init();//DHT11初始化
			YUDI_Init();//YUDI初始化
			InitClock(); //时钟初始化
			ReadDS1302Clock(TM); 	//时钟初始化
			delay_ms(100);		 
 
			ULN2003_IO_Init();//ULN2003初始化
 			relay_Init(); //relay初始化
   
	 		delay_ms(100);
			uart2_init(115200);
			delay_ms(100);		 
			uart1_init(115200);
			delay_ms(100);		 
			OLEDGUI_DispString(0,0,"Hardware init OK",16,1);	  
			//WiFi初始化
			ESP8266_Init();					//初始化ESP8266
			OLEDGUI_Clear();			//OLED清屏
			OLEDGUI_DispString(0,0,"Connect MQTTs Server...",16,1);				
			while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
			DelayXms(500);
			OLEDGUI_DispString(0,16,"Connect MQTT Server Success",16,1);	
			DelayXms(500);
			OLEDGUI_Clear();			//OLED清屏
			OLEDGUI_DispString(0,0,"Device login ...",16,1);				
 			while(OneNet_DevLink())			//接入OneNET
			{
				OLEDGUI_DispString(0,32,"CONNECT",16,1);	
				ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT");
				DelayXms(500);
				OLEDGUI_DispString(0,32,"CONNECT",16,1);	
			}
			OneNET_Subscribe();
			OLEDGUI_Clear();			//OLED清屏
			SensorThresholdSet();//阈值设置
 			SensorDataGet();	//获取传感器数据	 	
			OLEDGUI_Clear();
 
	while(1)
	{	
            //获取按键值     
			key_scan();		
            //进入菜单界面显示处理数据
			GetKeylnput(&Keystatus); 
            //获取传感器数据
			SensorDataGet();
  
			delay_ms(100);	
 
	}	
 }
 
 
 
 
 
 

8、设计包含内容

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐