一、功能介绍
基于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 *)¤tDataPoint);
}
}
五、配套资料
对此项目有需求请私信联系我,备注对应项目名称号
(非免费,伸手党勿扰,价格公道,售后负责)