标题:
基于STM32单片机的智能家居监控系统程序
[打印本页]
作者:
1234898
时间:
2024-7-29 12:44
标题:
基于STM32单片机的智能家居监控系统程序
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "KEY.h"
#include "LED.h"
#include "oled.h"
#include "dht11.h"
#include "esp8266.h"
#include "Timer2.h"
#include "AD.h"
uint8_t KeyValue;
uint8_t ParaSet_Flag;
uint8_t temperature;
uint8_t Humidity;
uint16_t LightLux;
uint8_t ERR;
uint8_t TempSet = 25,HumidSet = 25,LuxSet = 25;
uint8_t JumpCnt;
uint8_t Temperature_Flag;
uint8_t Humidity_Flag;
uint8_t Lux_Flag;
uint16_t Raw_LightLux; //原始光敏
int main(void)
{
Key_Init();
PC13_LED_Init();
// Usart2_Init(115200);
// DHT11_Init();
AD_Init();
Timer2_Init();
OLED_Init();
OLED_Clear();
OLED_ShowString(24,0,"Smart Home",16);
OLED_ShowString(0,2,"Temp: C",16);
OLED_ShowString(0,4,"Humid: %",16);
OLED_ShowString(0,6,"Lux: %",16);
OLED_ShowNum(40,2,temperature,2,16);
OLED_ShowNum(48,4,Humidity,2,16);
OLED_ShowNum(32,6,LightLux,2,16);
// do
// {
// ERR = WiFi_Connect_IoTServer();
//
// }while(ERR); //连接阿里云直到成功
while(1)
{
//----------------------------------- Smart Home主界面 BEGIN -----------------------------------
KeyValue = Key_Scan();
if(KeyValue == 1) //当按键1按下,进入阈值设置界面
{
ParaSet_Flag = 1;
OLED_Clear();
OLED_ShowString(0,0,"Temp:",16);
OLED_ShowString(86,0,"*",16);
OLED_ShowString(0,2,"Humid:",16);
OLED_ShowString(0,4,"Lux:",16);
OLED_ShowNum(40,0,TempSet,2,16);
OLED_ShowNum(48,2,HumidSet,2,16);
OLED_ShowNum(32,4,LuxSet,2,16);
Temperature_Flag = 1; //进行温度阈值修改
Humidity_Flag = 0;
Lux_Flag = 0;
}
else if(KeyValue == 2) //当按键2按下
{
}
else if(KeyValue == 3) //当按键3按下
{
}
else if(KeyValue == 4) //当按键4按下
{
}
//----------------------------------- Smart Home主界面 END -----------------------------------
//----------------------------------- 阈值设置界面 BEGIN -----------------------------------
while(ParaSet_Flag == 1)
{
KeyValue = Key_Scan();
if(KeyValue == 1) //当按键1按下,退出阈值设置界面
{
ParaSet_Flag = 0;
OLED_Clear();
OLED_ShowString(0,0,"Smart Home",16);
}
else if(KeyValue == 2) //当按键2按下,上下移动选择需要设置的阈值
{
JumpCnt++;
if(JumpCnt == 1)
{
OLED_ShowString(86,0," ",16);
OLED_ShowString(86,2,"*",16);
OLED_ShowString(86,4," ",16);
Temperature_Flag = 0;
Humidity_Flag = 1;//进行湿度阈值修改
Lux_Flag = 0;
}
else if(JumpCnt == 2)
{
OLED_ShowString(86,0," ",16);
OLED_ShowString(86,2," ",16);
OLED_ShowString(86,4,"*",16);
Temperature_Flag = 0;
Humidity_Flag = 0;
Lux_Flag = 1; //进行光照阈值修改
}
else
{
JumpCnt = 0;
OLED_ShowString(86,0,"*",16);
OLED_ShowString(86,2," ",16);
OLED_ShowString(86,4," ",16);
Temperature_Flag = 1;//进行温度阈值修改
Humidity_Flag = 0;
Lux_Flag = 0;
}
}
else if(KeyValue == 3) //当按键3按下,阈值+
{
if(Temperature_Flag == 1)
{
TempSet++;
if(TempSet >= 99)
{
TempSet = 99;
}
OLED_ShowNum(40,0,TempSet,2,16);
}
else if(Humidity_Flag == 1)
{
HumidSet++;
if(HumidSet >= 99)
{
HumidSet = 99;
}
OLED_ShowNum(48,2,HumidSet,2,16);
}
else if(Lux_Flag == 1)
{
LuxSet++;
if(LuxSet >= 99)
{
LuxSet = 99;
}
OLED_ShowNum(32,4,LuxSet,2,16);
}
}
else if(KeyValue == 4) //当按键4按下,阈值-
{
if(Temperature_Flag == 1)
{
if(TempSet <= 0) TempSet = 0;
else TempSet--;
OLED_ShowNum(40,0,TempSet,2,16);
}
else if(Humidity_Flag == 1)
{
if(HumidSet <= 0) HumidSet = 0;
else HumidSet--;
OLED_ShowNum(48,2,HumidSet,2,16);
}
else if(Lux_Flag == 1)
{
if(LuxSet <= 0) LuxSet = 0;
else LuxSet--;
OLED_ShowNum(32,4,LuxSet,2,16);
}
}
}
//----------------------------------- 阈值设置界面 END -----------------------------------
//----------------------------------- 自动控制界面 BEGIN ---------------------------------
//----------------------------------- 自动控制界面 END -----------------------------------
if(Timer2_5s_Flag == 1)
{
Timer2_5s_Flag = 0;
DHT11_Read_Data(&temperature, &Humidity); //读取温湿度值
Raw_LightLux=AD_GetValue(ADC_Channel_0); //光照值获取
LightLux = (((float)(4095-Raw_LightLux) / 4095) * 100);
OLED_ShowString(0,2,"Temp: C",16);
OLED_ShowString(0,4,"Humid: %",16);
OLED_ShowString(0,6,"Lux: %",16);
OLED_ShowNum(40,2,temperature,2,16);
OLED_ShowNum(48,4,Humidity,2,16);
OLED_ShowNum(32,6,LightLux,2,16);
}
}
}
复制代码
原理图: 无
仿真: 无
代码:
STM32_Iot_OK.7z
(188.33 KB, 下载次数: 22)
2024-7-29 15:39 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
1234898
时间:
2024-7-29 12:44
(1)基本功能 实现温湿度、光照的数据采集并上传至云平台 可以通过按键和APP对相关设备进行自动或手动控制; 数据在OLED屏幕以及APP显示
作者:
1234898
时间:
2024-7-29 12:45
涉及知识储备:
1. C语言语法
2. STM32F1标准库的使用,GPIO、USART、TIMER、I2C
3. ESP8266-01S (重点)
4. MQTT协议(重点)
5. 云平台(重点)
作者:
1234898
时间:
2024-7-29 12:45
元器件清单
1、面包板
2、STM32F103C8T6最小系统
3、杜邦线
4、ESP8266-01S
5、按键
6、OLED屏
7、USB-TTL(CH340)模块
软件:
1、Keil
2、串口调试助手
作者:
1234898
时间:
2024-7-29 12:45
目标:
1、移植OLED驱动代码(I2C为例)
2、实现一个按键循环切换3个页面
目标:
1、创建4个文件,KEY.c KEY.h LED.c LED.h
2、实现按键通过点亮STM32F103C8T6的PC13 LED
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1