久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于stm32的智能家居系統程序
[打印本頁]
作者:
fbdyf
時間:
2024-11-1 22:27
標題:
基于stm32的智能家居系統程序
#include "sys.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "ADC.h"
#include "usart3.h"
#include "key.h"
#include "oled.h"
#include "math.h"
#include "dht11.h"
#include "bmp280.h"
#include "gizwits_product.h"
u32 STM32_xx0=0X4E4C4A;
u32 STM32_xx1=0X364B1322;
u32 STM32_xx2=0X132D13 ;
#define FLASH_SAVE_ADDR 0x08010000
u8 buff[30];//參數顯示緩存數組
u8 count;
dataPoint_t currentDataPoint;//云端數據點
u8 wifi_sta;//wifi連接狀態標志
u8 mode=0;//模式控制自動和手動
u8 NTP_sta=0;//網絡時間獲取狀態
u8 display_contrl=0;
u8 curtain_flag=0;
u8 last_curtain_flag=0;
extern u8 DHT11_Temp,DHT11_Hum; //溫濕度
u16 Pre; //氣壓檢測值
u16 gz_value; //光照檢測值
u16 m2_value; //煙霧檢測值
u16 m7_value; //一氧化碳檢測值
u16 m135_value; //空氣質量檢測值
u16 A_DHT11_Temp=35; //溫度閾值 高于閾值時報警
u16 A_DHT11_Hum=60; //濕度閾值 低于閾值時報警
u16 A_pre=1500; //氣壓閾值 低于閾值時報警
u16 A_gz_value=4000; //光照強度閾值 低于閾值時打開窗簾和照明燈
u16 A_m2_value=4000; //煙霧閾值 高于閾值時報警
u16 A_m7_value=4000; //一氧化碳閾值 高于閾值時報警
u16 A_m135_value=1500; //空氣質量閾值 低于閾值時報警
//協議初始化
void Gizwits_Init(void)
{
TIM3_Int_Init(9,7199);//1MS系統定時
usart3_init(9600);//WIFI初始化
memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//設備狀態結構體初始化
gizwitsInit();//緩沖區初始化
}
//數據采集
void userHandle(void)
{
currentDataPoint.valueled=!LED0;
currentDataPoint.valueCurtain=curtain_flag;
currentDataPoint.valuetemp=DHT11_Temp;
currentDataPoint.valuehumidity=DHT11_Hum;
currentDataPoint.valuepre=Pre;
currentDataPoint.valueGZ_Value=gz_value;
currentDataPoint.valueMQ2_Value=m2_value;
currentDataPoint.valueMQ7_Value=m7_value;
currentDataPoint.valueMQ135_Value=m135_value;
}
void Get_Data(u16 count);//獲取傳感器數據
void WIFI_Contection(u8 key);//WiFi連接控制
void Canshu_Change(u8 key);//系統參數調節
void Mode_Change(u8 key);//模式切換
void BUJING_Cotrol(u8 mode,u16 time,u16 count);
int main(void)
{
u8 t=0;
int key_value; //按鍵值
uart_init(115200); //串口初始化為115200
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
Adc1_Channe_Init(); //ADC通道初始化
KEY_Init(); //按鍵引腳初始化
bmp280Init();
while(DHT11_Init());
LED_Init(); //初始化與LED連接的硬件接口
OLED_Init(); //OLED初始化
OLED_Clear(); //OLED清屏
Gizwits_Init(); //協議初始化
BEEP = 0;
printf("初始化完成!\r\n");
// STMFLASH_Write(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2); //開機讀取溫度閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2); //開機讀取濕度閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+14,&A_pre,2); //開機讀取氣壓閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+18,&A_gz_value,2); //開機讀取光照強度閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+20,&A_m2_value,2); //開機讀取煙霧閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+22,&A_m7_value,2); //開機讀取一氧化碳閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+24,&A_m135_value,2); //開機讀取空氣質量閾值
// STMFLASH_Read(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2); //開機讀取溫度閾值
// STMFLASH_Read(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2); //開機讀取濕度閾值
// STMFLASH_Read(FLASH_SAVE_ADDR+14,&A_pre,2); //開機讀取氣壓閾值
// STMFLASH_Read(FLASH_SAVE_ADDR+18,&A_gz_value,2); //開機讀取光照強度閾值
// STMFLASH_Read(FLASH_SAVE_ADDR+20,&A_m2_value,2); //開機讀取煙霧閾值
// STMFLASH_Read(FLASH_SAVE_ADDR+22,&A_m7_value,2); //開機讀取一氧化碳閾值
// STMFLASH_Read(FLASH_SAVE_ADDR+24,&A_m135_value,2); //開機讀取空氣質量閾值
while(1)
{
Get_Data(0);
if(gz_value<=A_gz_value&&mode==0) //光照強度小于閾值
{
LED0=0; //LED12亮
curtain_flag=0; //打開窗簾
}else if(gz_value>A_gz_value&&mode==0){
LED0=1; //LED12關閉
curtain_flag=1; //關閉窗簾
}
if(last_curtain_flag!=curtain_flag&&mode==0)
{
BUJING_Cotrol(curtain_flag,3,270); //控制步進電機旋轉模擬窗簾的關閉和打開
last_curtain_flag = curtain_flag;
}
if(last_curtain_flag!=currentDataPoint.valueCurtain&&mode==1)
{
BUJING_Cotrol(currentDataPoint.valueCurtain,3,270);
curtain_flag = currentDataPoint.valueCurtain;
last_curtain_flag = currentDataPoint.valueCurtain;
}
// if(mode==0)
// {
// key_value = KEY_Scan(0);
// if(key==2)
// {
// curtain_flag=0; //打開窗簾
// }
// if(key==3)
// {
// curtain_flag=1; //關閉窗簾
// }
// }
if(mode==1)
{
LED0=!currentDataPoint.valueled;
}
if(DHT11_Temp>=A_DHT11_Temp||DHT11_Hum<=A_DHT11_Hum||Pre>=A_pre||m135_value<=A_m135_value||m2_value>=A_m2_value||m7_value>=A_m7_value)
{
BEEP=!BEEP;
}else BEEP = 0;
key_value = KEY_Scan(0);
if(key_value==4)
{
display_contrl++;
}
if(display_contrl%2==0&&t>=10)
{
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(16,0,2);
sprintf((char*)buff,":%2dC",DHT11_Temp);
OLED_ShowString(32,0,buff,16); //顯示溫度
OLED_ShowCHinese(64,0,1);
OLED_ShowCHinese(82,0,2);
sprintf((char*)buff,":%2d%%",DHT11_Hum);
OLED_ShowString(96,0,buff,16);//顯示濕度
OLED_ShowCHinese(0,2,3);
OLED_ShowCHinese(16,2,4);
sprintf((char*)buff,":%2dhpa ",Pre);
OLED_ShowString(32,2,buff,16);//顯示氣壓
OLED_ShowCHinese(0,4,5);
OLED_ShowCHinese(16,4,6);
OLED_ShowCHinese(32,4,7);
OLED_ShowCHinese(48,4,8);
sprintf((char*)buff,":%4dppm",gz_value);
OLED_ShowString(64,4,buff,16);//顯示光照強度
OLED_ShowCHinese(0,6,21);
OLED_ShowCHinese(16,6,22);
OLED_ShowCHinese(32,6,23);
OLED_ShowCHinese(48,6,24);
//sprintf((char*)buff,":%4dppm",m135_value);
//OLED_ShowString(64,6,buff,16);//顯示空氣質量
OLED_ShowString(64,6,":",16);
}else if(display_contrl%2==1&&t>=10)
{
OLED_ShowCHinese(0,0,13);
OLED_ShowCHinese(16,0,14);
OLED_ShowCHinese(32,0,15);
OLED_ShowCHinese(48,0,16);
sprintf((char*)buff,":%4dppm",m2_value);
OLED_ShowString(64,0,buff,16);//顯示M2數據
OLED_ShowCHinese(0,2,17);
OLED_ShowCHinese(16,2,18);
OLED_ShowCHinese(32,2,19);
OLED_ShowCHinese(48,2,20);
sprintf((char*)buff,":%4dppm",m7_value);
OLED_ShowString(64,2,buff,16);//顯示M7數據
OLED_ShowCHinese(0,4,5);
OLED_ShowCHinese(16,4,6);
OLED_ShowCHinese(32,4,7);
OLED_ShowCHinese(48,4,8);
sprintf((char*)buff,":%4dppm",gz_value);
OLED_ShowString(64,4,buff,16);//顯示光照強度
OLED_ShowCHinese(0,6,21);
OLED_ShowCHinese(16,6,22);
OLED_ShowCHinese(32,6,23);
OLED_ShowCHinese(48,6,24);
// sprintf((char*)buff,":%4dppm",m135_value);
// OLED_ShowString(64,6,buff,16);//顯示M135數據
}
// if(t>10)
// {
// if(m135_value>100)
// {
// OLED_ShowCHinese(80,6,23);//有人
// OLED_ShowCHinese(96,6,24);
// //報警
// BEEP=!BEEP;
//
//
// }
// else
// {
// OLED_ShowCHinese(80,6,25);//無人
// OLED_ShowCHinese(96,6,24);
// BEEP = 0;
// }
// }
userHandle(); //用戶數據采集
WIFI_Contection(key_value);//WiFi連接控制
gizwitsHandle((dataPoint_t *)¤tDataPoint);//機智云協議處理
Canshu_Change(key_value);
t++;
delay_ms(100);
}
}
void WIFI_Contection(u8 key)//WiFi連接控制
{
if(key==2)
{
printf("WIFI進入AirLink連接模式\r\n");
gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
}
if(key==3)
{
printf("WIFI復位,請重新配置連接\r\n");
gizwitsSetMode(WIFI_RESET_MODE);//WIFI復位
}
}
void Canshu_Change(u8 key)
{
u8 obj=7;
if(key==1)
{
BEEP=0;
OLED_Clear();
while(1)
{
key = KEY_Scan(0);
if(key==1)
{
obj++;
if(obj>=8)
{
obj=0;
}
}
sprintf((char *)buff,"Working md:%4d",mode);
OLED_ShowString(8,0,buff,12);
sprintf((char *)buff,"A_Temp :%4d",A_DHT11_Temp);
OLED_ShowString(8,1,buff,12);
sprintf((char *)buff,"A_Hum :%4d",A_DHT11_Hum);
OLED_ShowString(8,2,buff,12);
sprintf((char *)buff,"A_pre :%4d",A_pre);
OLED_ShowString(8,3,buff,12);
sprintf((char *)buff,"A_gz_val :%4d",A_gz_value);
OLED_ShowString(8,4,buff,12);
sprintf((char *)buff,"A_m2_val :%4d",A_m2_value);
OLED_ShowString(8,5,buff,12);
sprintf((char *)buff,"A_m7_val :%4d",A_m7_value);
OLED_ShowString(8,6,buff,12);
sprintf((char *)buff,"A_m135_val:%4d",A_m135_value);
OLED_ShowString(8,7,buff,12);
if(obj==0)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1,">",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==1)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2,">",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==2)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3,">",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==3)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4,">",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==4)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5,">",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==5)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6,">",12);
OLED_ShowString(0,7," ",12);
}
if(obj==6)
{
OLED_ShowString(0,0," ",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7,">",12);
}
if(obj==7)
{
OLED_ShowString(0,0,">",12);
OLED_ShowString(0,1," ",12);
OLED_ShowString(0,2," ",12);
OLED_ShowString(0,3," ",12);
OLED_ShowString(0,4," ",12);
OLED_ShowString(0,5," ",12);
OLED_ShowString(0,6," ",12);
OLED_ShowString(0,7," ",12);
}
if(obj==0)
{
if(key==3)
{
A_DHT11_Temp+=1;
}
if(key==2)
{
A_DHT11_Temp-=1;
}
}
if(obj==1)
{
if(key==3)
{
A_DHT11_Hum+=1;
}
if(key==2)
{
A_DHT11_Hum-=1;
}
}
if(obj==2)
{
if(key==3)
{
A_pre+=20;
}
if(key==2)
{
A_pre-=20;
}
}
if(obj==3)
{
if(key==3)
{
A_gz_value+=50;
}
if(key==2)
{
A_gz_value-=50;
}
}
if(obj==4)
{
if(key==3)
{
A_m2_value+=50;
}
if(key==2)
{
A_m2_value-=50;
}
}
if(obj==5)
{
if(key==3)
{
A_m7_value+=50;
}
if(key==2)
{
A_m7_value-=50;
}
}
if(obj==6)
{
if(key==3)
{
A_m135_value+=50;
}
if(key==2)
{
A_m135_value-=50;
}
}
if(obj==7)
{
if(key==3)
{
mode+=1;
}
if(key==2)
{
mode-=1;
}
if(mode >= 2) mode = 0;
}
if(key==4)
{
// STMFLASH_Write(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2); //開機讀取溫度閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2); //開機讀取濕度閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+14,&A_pre,2); //開機讀取氣壓閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+18,&A_gz_value,2); //開機讀取光照強度閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+20,&A_m2_value,2); //開機讀取煙霧閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+22,&A_m7_value,2); //開機讀取一氧化碳閾值
// STMFLASH_Write(FLASH_SAVE_ADDR+24,&A_m135_value,2); //開機讀取空氣質量閾值
OLED_Clear();
break;
}
}
}
}
void Get_Data(u16 count)//獲取傳感器數據
{
static float bmp280_press,bmp280; //氣壓
DHT11_Read_Data(&DHT11_Temp,&DHT11_Hum);
bmp280GetData(&bmp280_press,&bmp280,&bmp280);
Pre = bmp280_press;
gz_value = 4096 - get_Adc_Value(0x04);
m2_value = get_Adc_Value(0x07);
m7_value = get_Adc_Value(0x05);
m135_value = 4096 - get_Adc_Value(0x06);
}
//void Mode_Change(u8 key)
//{
// if(key==2)
// {
// mode++;
// if(mode>=2) mode = 0;
// }
// if(mode==0) OLED_ShowString(0,0,"MODE:Auto",12); //HM
// if(mode==1) OLED_ShowString(0,0,"MODE:H_M_",12); //HM
//}
void BUJING_Cotrol(u8 mode,u16 time,u16 count)
{
if(mode==0)
{
while(count--)
{
BUJ1=1; BUJ2=0; BUJ3=0;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=1; BUJ3=0;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=0; BUJ3=1;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=0; BUJ3=0;BUJ4=1;
delay_ms(time);
}
}
if(mode==1)
{
while(count--)
{
BUJ1=0; BUJ2=0; BUJ3=0;BUJ4=1;
delay_ms(time);
BUJ1=0; BUJ2=0; BUJ3=1;BUJ4=0;
delay_ms(time);
BUJ1=0; BUJ2=1; BUJ3=0;BUJ4=0;
delay_ms(time);
BUJ1=1; BUJ2=0; BUJ3=0;BUJ4=0;
delay_ms(time);
}
}
}
復制代碼
原理圖: 無
仿真: 無
代碼:
基礎程序.7z
(310.56 KB, 下載次數: 5)
2024-11-2 01:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
hongsehuasheng
時間:
2024-11-2 22:24
沒有原理圖,只是一個程序沒有什么用,能否補上原理圖呢?
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色一级片免费
|
黄视频网站在线观看
|
亚洲免费在线播放
|
成年人免费在线观看
|
亚洲伦理在线观看
|
白白色免费视频
|
天天操综合
|
又黄又爽又色视频
|
天天干天天操天天摸
|
一级黄色录像视频
|
精品国产精品三级精品av网址
|
日韩av一区二区在线观看
|
91免费福利
|
欧美成视频
|
一区二区三区视频在线播放
|
国产午夜精品久久
|
精品国产乱码久久久久久蜜柚
|
国产麻豆一区二区三区
|
九色自拍
|
亚洲视频区
|
不卡av在线播放
|
成人做受黄大片
|
91污视频在线观看
|
98国产精品
|
精品国产三级
|
久久精品一区二区三区四区五区
|
久久久久免费
|
午夜国产视频
|
日韩国产在线播放
|
波多野结衣一区二区
|
一区二区三区免费
|
三级视频在线观看
|
99视频在线观看免费
|
欧美日韩中文字幕
|
免费国产精品视频
|
亚洲视频一区二区三区四区
|
一区二区久久久
|
欧美日韩中文字幕在线观看
|
成 人 黄 色 片 在线播放
|
人人爽爽人人
|
久久av网站
|