基于STM32的物联网智能家电控制系统-编号:S5J

一、功能介绍

基于STM32的智能家电控制系统 / 智能家居系统 / 居家环境监测系统。

功能如下:

1)显示功能:通过温湿度传感器检测温度和湿度,显示在oled屏幕上。

2)接入云平台:系统通过WIFI连接网诺,接入机智云服务器。

3)远程控制:可以通过APP查看系统温湿度和控制系统开关灯光,风扇,窗帘。

4)状态反馈:通过屏幕显示当前系统灯光风扇和窗帘的开关状态。

5)报警功能:系统设置有温湿度报警阈值,当温度或者湿度超过阈值蜂鸣器报警

6)阈值调节:系统温湿度阈值大小可以通过按键自行设置调节。

二、材料清单

  • 0.stm32f103c8t6核心板
  • 1.DHT11 温湿度传感器
  • 2.OLED屏幕
  • 3.蜂鸣器模块
  • 4.继电器
  • 5.28BYJ-48步进电机和ULN2003驱动
  • 6.风扇、LED灯
  • 7.独立按键
  • 8.ESP8266 wifi模块
  • 9.云平台机智云

 

三、APP介绍

该设计接入了机智云来实现远程控制的功能,通过移植机智云自动生成的代码,可以很方便的使用机智云的调试APP来实现实物的远程控制.

四、主程序代码

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	OLED_Init();
	DHT11_UserConfig();
	MOTOR_UserConfig();
	Key_Init();
	USB_Init();
	Buzzer_Init();
	
	Temp_value = FLASH_R(FLASH_START_ADDR);	//从指定页的地址读FLASH
	Humi_value = FLASH_R(FLASH_START_ADDR+2);	//从指定页的地址读FLASH
	
	Timer2_Init(9,14398);
	uart2_init(9600);
	uart1_init(115200);
	
	GENERAL_TIM_Init();
	userInit();	//完成初始赋值
	gizwitsInit();
	IWDG_Init();

	Delay_ms(1000);
	scanGizwitsModeKey();

	while (1)
	{
		IWDG_ReloadCounter(); //重新加载计数值 喂狗
		switch(Menu)
		{
				case 1:
					Menu1();	//显示菜单1
					
					/*按键2控制LED灯*/
					if(KeyNum == 2)
					{
						KeyNum = 0;
						LEDFlag = !LEDFlag;
						currentDataPoint.valueLED = LEDFlag;
						OLED_ShowString(2,11,"   ");
						if (LEDFlag == RESET)
						{
							USB_OFF(1);
						}
						else
						{
							USB_ON(1);
						}
					}
				
					/*按键3控制风扇*/
					if(KeyNum == 3)
					{
						KeyNum = 0;
						FanFlag = !FanFlag;
						currentDataPoint.valuefan = FanFlag;
						OLED_ShowString(3,11,"   ");
						if (FanFlag == RESET)
						{
							USB_OFF(2);
						}
						else
						{
							USB_ON(2);
						}
					}
							
				
					/*按键3控制步进电机的运行*/
					if(KeyNum == 4)
					{
						KeyNum = 0;
						CurtainFlag = !CurtainFlag;
						currentDataPoint.valuecurtain = CurtainFlag;
						OLED_ShowString(4,11,"   ");
						if (CurtainFlag == RESET)
						{
							Curtain_OFF_Flag = 1;
						}
						else
						{
							Curtain_ON_Flag = 1;
						}
					}
					
					/*判断电机启动标志位是否为1*/
					if(Curtain_ON_Flag == 1)
					{
						MOTOR_Direction_Angle(1,0,180,1);	//顺时针电机旋转 180度
						MOTOR_STOP();	//电机停止
						Curtain_ON_Flag = 0;
					}
					
					/*判断电机关闭标志位是否为1*/
					if(Curtain_OFF_Flag == 1)
					{
						MOTOR_Direction_Angle(0,0,180,1);	//逆时针电机旋转 180度
						MOTOR_STOP();	//电机停止
						Curtain_OFF_Flag = 0;
					}
					break;
					
				case 2:
					OLED_Clear();	//清屏
					Menu2();	//显示菜单2
					Menu = 3;	
				case 3:
					OLED_Option(SetNum);	//显示当前选择的位置
					OLED_ShowNum(2,10,Temp_value,2);	//显示温度阈值数据
					OLED_ShowNum(3,10,Humi_value,2);	//显示湿度阈值数据
				
					/*累计按键1按下的次数*/
					if(KeyNum == 1)
					{
						KeyNum = 0;
						SetNum++;
						if(SetNum > 2)
						{
							SetNum = 1;
						}
					}
					
					/*当位置指向温度阈值根据按键3或4调节数值*/
					if(SetNum == 1)
					{
						if(KeyNum == 3)
						{
							KeyNum = 0;
							Temp_value++;
							if(Temp_value >= 100)
							{
								Temp_value = 0;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							Temp_value--;
							if(Temp_value >= 100)
							{
								Temp_value = 99;
							}
						}
					}

					/*当位置指向湿度阈值根据按键3或4调节数值*/
					if(SetNum == 2)
					{
						if(KeyNum == 3)
						{
							KeyNum = 0;
							Humi_value++;
							if(Humi_value >= 100)
							{
								Humi_value = 0;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							Humi_value--;
							if(Humi_value >= 100)
							{
								Humi_value = 99;
							}
						}
					}
					
					/*当按键2按下时回到主菜单*/
					if(KeyNum == 2)
					{
						KeyNum = 0;
						
						/*将更改过的阈值存入Flash中*/
						FLASH_W(FLASH_START_ADDR,Temp_value,Humi_value);
						OLED_Clear();	//清屏
						Menu = 1;	//显示菜单1
					}
					break;
				case 4:	
					if (gizwitsModeFlag == 1)
					{
						//显示“热点配网”
						OLED_ShowChinese(2,3,22);
						OLED_ShowChinese(2,4,23);
						OLED_ShowChinese(2,5,24);
						OLED_ShowChinese(2,6,25);
					}
					else if (gizwitsModeFlag == 2)
					{
						//显示“一键配网”
						OLED_ShowChinese(2,3,18);
						OLED_ShowChinese(2,4,19);
						OLED_ShowChinese(2,5,20);
						OLED_ShowChinese(2,6,21);
					}
					if (!gizwitsModeFlag)
					{
						KeyNum = 0;
						OLED_Clear();
						Menu = 1;
					}	
						break;
				default : break;
		}
		userHandle();
		gizwitsHandle((dataPoint_t *)&currentDataPoint);
	}
}

五、配套资料

对此项目有需求请私信联系我,备注对应项目名称号

(非免费,伸手党勿扰,价格公道,售后负责)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值