0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

stm32單片機畢業(yè)設(shè)計——物聯(lián)網(wǎng)智能家居源代碼原理圖

機智云 ? 2024-11-30 01:03 ? 次閱讀

一、設(shè)計簡介

本畢業(yè)設(shè)計項目是基于STM32單片機物聯(lián)網(wǎng)機智云智能家居系統(tǒng),包含原理圖PCB手機APP。智能家居系統(tǒng)以STM32C8T6單片機為核心,結(jié)合多種傳感器和執(zhí)行器,通過ESP8266實現(xiàn)與機智云平臺的通信,用戶可通過手機APP進行遠程監(jiān)控和管理。系統(tǒng)具有網(wǎng)絡(luò)化、數(shù)字化和智能化的特點,能夠?qū)崿F(xiàn)對家居環(huán)境的全方位監(jiān)視和智能調(diào)節(jié)。

二、功能設(shè)計

溫濕度監(jiān)控模塊

使用DHT11溫濕度傳感器采集室內(nèi)溫濕度數(shù)據(jù)。

數(shù)據(jù)通過STM32單片機處理后,在0.96寸OLED顯示屏上實時顯示。

當(dāng)溫濕度超過設(shè)定閾值時,觸發(fā)蜂鳴器和LED報警燈進行警示。

氣體檢測模塊

使用MQ-2、MQ-7和MQ-135氣體傳感器檢測室內(nèi)可燃氣體、有害氣體等。

當(dāng)檢測到有害氣體濃度超標(biāo)時,系統(tǒng)通過蜂鳴器和LED報警燈進行警示,并通過ESP8266將報警信息上傳至機智云平臺。

氣壓監(jiān)測模塊

使用BMP290氣壓傳感器監(jiān)測室內(nèi)氣壓變化。

數(shù)據(jù)通過STM32單片機處理后,可在OLED顯示屏上顯示,或上傳至機智云平臺進行遠程監(jiān)控。

光照強度監(jiān)測模塊

使用光敏電阻ADC檢測室內(nèi)光照強度。

當(dāng)光照強度低于設(shè)定閾值時,系統(tǒng)可自動開啟LED照明燈,或通過ESP8266發(fā)送報警信息至手機APP。

舵機控制模塊

使用SG90舵機控制窗簾、窗戶等家居設(shè)備的開關(guān)。

用戶可通過手機APP發(fā)送控制指令至機智云平臺,再通過ESP8266將指令傳輸至STM32單片機,最終控制舵機的動作。

智能報警模塊

當(dāng)系統(tǒng)檢測到異常情況(如溫濕度超標(biāo)、有害氣體濃度超標(biāo)等)時,觸發(fā)蜂鳴器和LED報警燈進行本地警示。

同時,通過ESP8266將報警信息上傳至機智云平臺,用戶可通過手機APP接收報警信息。

遠程監(jiān)控模塊

用戶可通過機智云手機APP實時查看家居環(huán)境的溫濕度、氣壓、光照強度等數(shù)據(jù)。

可通過手機APP發(fā)送控制指令至機智云平臺,再通過ESP8266將指令傳輸至STM32單片機,實現(xiàn)對家居設(shè)備的遠程控制。

三、所需硬件連接

STM32最小系統(tǒng)板

ESP8266 Wi-Fi模塊

BMP280氣壓傳感器

MQ-2煙霧傳感器

MQ-7、MQ-135氣體傳感器

DHT11溫濕度傳感器

光敏電阻ADC

SG90舵機

蜂鳴器、LED報警

0.96OLED顯示屏

繼電器模塊

四、軟件環(huán)境

Keil5 MDK:stm32單片機源代碼程序編寫及下載代碼

ST-Link 驅(qū)動程序:用于下載程序到 STM32。

機智云手機APP

五、所需硬件以及傳感器模塊

1.1 stm32f103c8t6(1個)

STM32F103C8T6單片機是一款非常用的單片機型號,可以方便靈活的進行嵌入式系統(tǒng)開發(fā)。首先,它的處理器基于Cortex-M3內(nèi)核,最高工作頻率達72MHz。STM32F103C8T6擁有64KB閃存和20KB SRAM,非常適合中小型單片機開發(fā)項目。

具有非常豐富的外設(shè)接口,如串口USART、SPI通信、I2C通訊、CAN通訊和USB,在與單片機外設(shè)通信方面非常方便。有多個GPIO通用IO口,定時器,中斷系統(tǒng),靈活配置為輸入,輸出、模擬輸入或PWM輸出,可以連接各類傳感器和模塊。

內(nèi)部集成的12位逐次逼近型ADC和DAC,支持高精度模擬信號處理。STM32F103C8T6還支持低功耗模式,適合電池供電的應(yīng)用場景。結(jié)合強大的STM32開發(fā)生態(tài),包括庫函數(shù)和工具鏈,可以讓開發(fā)者很方便的完成單片機項目的開發(fā)。

ccfffae8-ae73-11ef-8084-92fbcf53809c.png

cd11ad88-ae73-11ef-8084-92fbcf53809c.png

1.2 wifi模塊ESP8266(ESP01s)(1個)

ESP-01S是安信可出品的一款功能強大的Wi-Fi模塊采用ESP8266處理器,ESP-01S模塊需要與主控制器(如Arduino、STM32等)進行連接,通過串口通信UART接口與單片機進行數(shù)據(jù)傳輸。ESP-01S是一款功能強大、易于使用的Wi-Fi模塊,適用于各種物聯(lián)網(wǎng)和智能家居應(yīng)用。

Wi-Fi功能:支持標(biāo)準(zhǔn)的IEEE802.11 b/g/n協(xié)議和完整的TCP/IP協(xié)議棧,可以方便地與其他設(shè)備或網(wǎng)絡(luò)進行通信。

工作模式:支持STA模式和AP模式。在STA模式下,可以通過路由器連接到互聯(lián)網(wǎng),使手機或電腦能夠?qū)崿F(xiàn)對設(shè)備的遠程控制。在AP模式下,可以作為熱點,使其他設(shè)備能夠連接到它。

AT指令支持:初始情況下,ESP-01S通常預(yù)裝了Espressif提供的AT指令固件,這意味著可以通過發(fā)送簡單的AT指令來控制模塊的Wi-Fi連接和數(shù)據(jù)傳輸。

cd22f1ba-ae73-11ef-8084-92fbcf53809c.jpgcd2ad7e0-ae73-11ef-8084-92fbcf53809c.png

二、軟件配置

固件燒錄:用戶可以根據(jù)需要進行固件燒錄和配置,以滿足特定的應(yīng)用需求。

串口通信參數(shù):通常ESP-01S默認波特率為115200,數(shù)據(jù)位為8位,停止位為1位,無校驗。

1.3MQ系列傳感器(3個)

MQ-2、MQ-7和MQ-135都是MQ系列的氣體傳感器模塊,

MQ-2氣體傳感器所使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫(SnO2)。當(dāng)傳感器所處環(huán)境中存在可燃氣體時,傳感器的電導(dǎo)率隨空氣中可燃氣體濃度的增加而增大。利用簡單的電路即可將電導(dǎo)率的變化轉(zhuǎn)換為與該傳感器氣體濃度相對應(yīng)的輸出信號。MQ-2氣體傳感器對液化氣、丙烷、氫氣的靈敏度高,對天然氣和其他可燃蒸汽的檢測也很理想。這種傳感器可檢測多種可燃性氣體,是一款適合多種應(yīng)用的低成本傳感器。

cd34dbdc-ae73-11ef-8084-92fbcf53809c.png

cd3959e6-ae73-11ef-8084-92fbcf53809c.png

引腳說明

VCC:電源正極接口,可外接3.3~5V供電電源。

GND:電源負極接口,可外接電源負極或地線(GND)。

DO:數(shù)字信號輸出接口(0和1),可外接單片機的GPIO。

AO:模擬信號輸出接口,可外接單片機的ADC采樣通道。

MQ-7是一氧化碳傳感器模塊,屬于氣敏傳感器檢測報警模塊。它能夠靈敏地檢測一氧化碳氣體的濃度,并輸出相應(yīng)的電信號。MQ-7一氧化碳傳感器模塊廣泛應(yīng)用于家庭用氣體泄漏報警器、工業(yè)用可燃氣體報警器等領(lǐng)域,用于監(jiān)測一氧化碳氣體的濃度

1.4BMP280氣壓傳感器(3個)

BMP280是一款由博世公司推出的數(shù)字氣壓傳感器,它采用了先進的APSM(Advanced Porous Silicon Membrane)工藝,具有小封裝、低功耗的特點:

cd475596-ae73-11ef-8084-92fbcf53809c.jpg

cd4e8ca8-ae73-11ef-8084-92fbcf53809c.png

一、外觀與引腳

BMP280傳感器通常具有六個引腳,具體名稱與功能如下

(VCC):3.3V供電,切記不可以接5V,以避免燒毀。

(GND):接地。

(SCL):I2C通信模式時鐘信號。

SDA):I2C通信模式數(shù)據(jù)信號。

(CSB):SPI通信模式下用到的引腳,片選引腳,拉低后啟用。

(SDO):傳感器地址控制位。

有些BMP280傳感器版本可能有8個引腳,但常用的仍是上述6個引腳。

二、功能與參數(shù)

BMP280傳感器能夠測量環(huán)境溫濕度和大氣壓強,其主要參數(shù)如下:

溫度測量

測量范圍:-40~85°C。

測量誤差:±0.5℃。

分辨率:0.1℃。

測量范圍:0%~100%。

濕度響應(yīng)時間:大于1秒。

濕度測量誤差:±2%。

分辨率:0.8%。

測量范圍:300~1100hPa(百帕斯卡)。

測量誤差:±1hPa。

分辨率:0.18Pa。

相對精度:±0.12hPa(相當(dāng)于±1米)。

三、通信方式

BMP280支持I2C和SPI兩種通信方式

I2C通信:通過SCL(時鐘線)和SDA(數(shù)據(jù)線)進行數(shù)據(jù)傳輸,SDO用于設(shè)置傳感器的I2C地址。

SPI通信:通過SCL(時鐘線)、SDI(數(shù)據(jù)輸入線,三線模式下為雙向數(shù)據(jù)線)和SDO(數(shù)據(jù)輸出線,三線模式下無用)進行數(shù)據(jù)傳輸,CSB用于片選。

四、工作模式

BMP280傳感器有三種工作模式

睡眠模式:傳感器不工作,功耗最低。

觸發(fā)模式:執(zhí)行單次測量后,傳感器進入睡眠狀態(tài),以節(jié)省資源。

正常模式:傳感器在活動測量周期和非活動待機周期之間自動循環(huán)。

五、應(yīng)用與特點

BMP280傳感器廣泛應(yīng)用于無人機定高、天氣監(jiān)控、增強GPS導(dǎo)航、室內(nèi)導(dǎo)航、戶外休閑和體育應(yīng)用、天氣預(yù)報、醫(yī)療保?。ㄈ绶位盍繙y定)等領(lǐng)域。其特點包括:

六、使用注意事項

在使用BMP280傳感器時,需要注意供電電壓不能超過3.3V,以避免損壞傳感器。

在進行數(shù)據(jù)采集之前,需要對傳感器進行初始化,包括讀取補償參數(shù)、設(shè)置工作模式、配置過采樣參數(shù)等。

在讀取數(shù)據(jù)時,需要按照數(shù)據(jù)手冊中的說明進行寄存器操作,以確保數(shù)據(jù)的正確性和穩(wěn)定性。

六、原理圖及設(shè)計流程圖

cd651680-ae73-11ef-8084-92fbcf53809c.png

cd6a1b94-ae73-11ef-8084-92fbcf53809c.png

七、程序代碼

#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];//參數(shù)顯示緩存數(shù)組
u8 count;
dataPoint_t currentDataPoint;//云端數(shù)據(jù)點
u8 wifi_sta;//wifi連接狀態(tài)標(biāo)志
u8 mode=0;//模式控制自動和手動
u8 NTP_sta=0;//網(wǎng)諾時間獲取狀態(tài)
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;//空氣質(zhì)量檢測值

u16 A_DHT11_Temp=35;//溫度閾值 高于閾值時報警
u16 A_DHT11_Hum=20;//濕度閾值 低于閾值時報警
u16 A_pre=1500;//氣壓閾值 低于閾值時報警
u16 A_gz_value=1000;//光照強度閾值 低于閾值時打開窗簾和照明燈
u16 A_m2_value=4000;//煙霧閾值 高于閾值時報警
u16 A_m7_value=4000;//一氧化碳閾值 高于閾值時報警
u16 A_m135_value=1500;//空氣質(zhì)量閾值 低于閾值時報警

//協(xié)議初始化
void Gizwits_Init(void)
{
TIM3_Int_Init(9,7199);//1MS系統(tǒng)定時
usart3_init(9600);//WIFI初始化
memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//設(shè)備狀態(tài)結(jié)構(gòu)體初始化
gizwitsInit();//緩沖區(qū)初始化
}

//數(shù)據(jù)采集
void userHandle(void)
{
currentDataPoint.valueLED=!LED0;
currentDataPoint.valueCurtain=curtain_flag;
currentDataPoint.valueTemp=DHT11_Temp;
currentDataPoint.valueHum=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);//獲取傳感器數(shù)據(jù)
void WIFI_Contection(u8 key);//WiFi連接控制
void Canshu_Change(u8 key);//系統(tǒng)參數(shù)調(diào)節(jié)
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(); //延時函數(shù)初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
Adc1_Channe_Init();//ADC通道初始化
KEY_Init();//按鍵引腳初始化
bmp280Init();
while(DHT11_Init());
LED_Init(); //初始化與LED連接的硬件接口
OLED_Init();//OLED初始化
OLED_Clear();//OLED清屏
Gizwits_Init();
BEEP = 0;
//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);//開機讀取空氣質(zhì)量閾值

//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);//開機讀取空氣質(zhì)量閾值

while(1)
{
Get_Data(0);
if(gz_value<=A_gz_value&&mode==0)
{
LED0=0;
curtain_flag=0;
}else if(gz_value>A_gz_value&&mode==0){
LED0=1;
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==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);//顯示空氣質(zhì)量
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數(shù)據(jù)

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數(shù)據(jù)

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數(shù)據(jù)

}
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();//用戶數(shù)據(jù)采集
WIFI_Contection(key_value);//WiFi連接控制
gizwitsHandle((dataPoint_t *)¤tDataPoint);//機智云協(xié)議處理

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復(fù)位,請重新配置連接\r\n");
gizwitsSetMode(WIFI_RESET_MODE);//WIFI復(fù)位
}
}

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);//開機讀取空氣質(zhì)量閾值
OLED_Clear();
break;
}

}
}
}

void Get_Data(u16 count)//獲取傳感器數(shù)據(jù)
{
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);
}
}
}

八、實物圖片

cd7d7694-ae73-11ef-8084-92fbcf53809c.jpg

九、資料內(nèi)容清單

cd885528-ae73-11ef-8084-92fbcf53809c.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635217
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    355981
  • 智能家居
    +關(guān)注

    關(guān)注

    1928

    文章

    9560

    瀏覽量

    185096
收藏 人收藏

    評論

    相關(guān)推薦

    【Tisan聯(lián)網(wǎng)申請】基于Tisan的聯(lián)網(wǎng)智能家居設(shè)計

    申請理由:1,在校學(xué)生,聯(lián)網(wǎng)專業(yè)。熟悉單片機開發(fā),和聯(lián)網(wǎng)開發(fā)。2,本學(xué)期正在著手一個CDIO項目,項目為
    發(fā)表于 11-06 09:50

    怎樣去設(shè)計一種基于單片機智能家居語音控制系統(tǒng)

    基于單片機智能家居語音控制系統(tǒng),該系統(tǒng)可通過語音控制家用電器或其它電器的開啟與關(guān)閉;(內(nèi)附有原理圖單片機源代碼,開題報告,語音芯片
    發(fā)表于 07-20 06:59

    基于51單片機實現(xiàn)智能家居產(chǎn)品

    ?51單片機也可以實現(xiàn)一個小小的智能家居√(smart-home)開源所有代碼?文章目錄?51單片機也可以實現(xiàn)一個小小的智能家居√(smar
    發(fā)表于 09-08 06:21

    求一種基于單片機的藍牙智能家居設(shè)計方案

    畢業(yè)設(shè)計】【單片機俱樂部】基于單片機的藍牙智能家居的設(shè)計【仿真設(shè)計】設(shè)計簡介:項目名:基于單片機的藍牙
    發(fā)表于 03-01 06:55

    單片機,智能家居設(shè)計

    跪求基于單片機STM32F103ZET6的智能家居控制系統(tǒng)設(shè)計(包含燈光,傳感器,報警,驅(qū)動電路設(shè)計原理圖
    發(fā)表于 03-29 08:34

    STM32單片機實現(xiàn)智能家居控制系統(tǒng)的方案

    詳細介紹的是使用STM32單片機實現(xiàn)智能家居控制系統(tǒng)的方案介紹和源代碼等資料合集
    發(fā)表于 09-25 06:23

    智能家居管理系統(tǒng)設(shè)計資料

    智能家居管理系統(tǒng)設(shè)計(原理圖+APP+源代碼等)使用51單片機作為主控 提供完整源碼 可實現(xiàn)智能家居控制網(wǎng)上下載的資源 侵權(quán)刪!
    發(fā)表于 10-07 08:22

    使用STM32單片機實現(xiàn)智能家居控制系統(tǒng)的方案介紹和源代碼等資料

    本文檔的主要內(nèi)容詳細介紹的是使用STM32單片機實現(xiàn)智能家居控制系統(tǒng)的方案介紹和源代碼等資料合集免費下載。
    發(fā)表于 04-08 08:00 ?45次下載
    使用<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>實現(xiàn)<b class='flag-5'>智能家居</b>控制系統(tǒng)的方案介紹和<b class='flag-5'>源代碼</b>等資料

    使用STM32單片機實現(xiàn)無人機的源代碼原理圖資料合集

    本文檔的主要內(nèi)容詳細介紹的是使用STM32單片機實現(xiàn)無人機的源代碼原理圖資料合集免費下載。
    發(fā)表于 07-30 08:00 ?99次下載
    使用<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>實現(xiàn)無人機的<b class='flag-5'>源代碼</b>和<b class='flag-5'>原理圖</b>資料合集

    基于單片機智能小車畢業(yè)設(shè)計

    基于單片機智能小車畢業(yè)設(shè)計免費下載。
    發(fā)表于 06-18 09:39 ?100次下載

    基于ESP8266智能家居自學(xué)習(xí)紅外遙控設(shè)計 單片機源代碼+PCB電路

    基于ESP8266智能家居自學(xué)習(xí)紅外遙控設(shè)計 單片機源代碼+PCB電路(51單片機)-基于ESP8266
    發(fā)表于 07-22 15:11 ?88次下載
    基于ESP8266<b class='flag-5'>智能家居</b>自學(xué)習(xí)紅外遙控設(shè)計 <b class='flag-5'>單片機</b><b class='flag-5'>源代碼</b>+PCB電路<b class='flag-5'>圖</b>

    800多套單片機畢業(yè)設(shè)計

    、停車場管理系統(tǒng)、萬年歷、智能插座等不同方向的典型設(shè)計實例,每個實例都提供了設(shè)計報告、源代碼、電路等全部設(shè)計資料,這些設(shè)計資料有利于即將畢業(yè)的同學(xué)分析、理解并進行
    發(fā)表于 11-11 11:36 ?115次下載
    800多套<b class='flag-5'>單片機</b><b class='flag-5'>畢業(yè)設(shè)計</b>

    【畢設(shè)狗】【單片機畢業(yè)設(shè)計】基于單片機的藍牙智能家居的設(shè)計(實物+proteus仿真+源碼+原理圖+軟件設(shè)計流程

    【畢設(shè)狗】【單片機畢業(yè)設(shè)計】基于單片機的藍牙智能家居的設(shè)計(實物+proteus仿真+源碼+原理圖+軟件設(shè)計流程+硬件清單+視頻講解)
    發(fā)表于 11-12 20:51 ?29次下載
    【畢設(shè)狗】【<b class='flag-5'>單片機</b><b class='flag-5'>畢業(yè)設(shè)計</b>】基于<b class='flag-5'>單片機</b>的藍牙<b class='flag-5'>智能家居</b>的設(shè)計(實物+proteus仿真+源碼+<b class='flag-5'>原理圖</b>+軟件設(shè)計流程

    【畢設(shè)狗】【單片機畢業(yè)設(shè)計】基于單片機智能密碼鎖的設(shè)計(實物+proteus仿真+源碼+原理圖+軟件設(shè)計流程

    【畢設(shè)狗】【單片機畢業(yè)設(shè)計】基于單片機智能密碼鎖的設(shè)計(實物+proteus仿真+源碼+原理圖+軟件設(shè)計流程+硬件清單+視頻講解)
    發(fā)表于 11-13 09:06 ?34次下載
    【畢設(shè)狗】【<b class='flag-5'>單片機</b><b class='flag-5'>畢業(yè)設(shè)計</b>】基于<b class='flag-5'>單片機</b>的<b class='flag-5'>智能</b>密碼鎖的設(shè)計(實物+proteus仿真+源碼+<b class='flag-5'>原理圖</b>+軟件設(shè)計流程

    STM32畢業(yè)設(shè)計項目

    STM32畢業(yè)設(shè)計項目文章目錄STM32畢業(yè)設(shè)計項目1、基于STM32單片機大棚環(huán)境參數(shù)無線藍牙
    發(fā)表于 12-24 19:19 ?112次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>畢業(yè)設(shè)計</b>項目