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

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

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

基于STM32設(shè)計(jì)的智能家居控制系統(tǒng)(華為云IOT)

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-07-11 13:58 ? 次閱讀

1. 功能介紹

隨著物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,智能家居控制系統(tǒng)成為了人們追求便捷、舒適和安全生活的重要組成部分。為了滿足用戶對(duì)智能家居的需求,設(shè)計(jì)了一款基于華為云物聯(lián)網(wǎng)平臺(tái)的智能家居控制系統(tǒng),硬件采用了STM32ESP8266的組合,實(shí)現(xiàn)了設(shè)備的上云連接。

傳統(tǒng)的家居控制系統(tǒng)存在一些不足,比如需要人工操作、無(wú)法實(shí)現(xiàn)遠(yuǎn)程控制等。而我們的智能家居控制系統(tǒng),通過(guò)與華為云物聯(lián)網(wǎng)平臺(tái)的連接,可以實(shí)現(xiàn)遠(yuǎn)程控制各種電器開(kāi)關(guān),并且可以遠(yuǎn)程收集家里煤氣、天然氣、煙霧、光照度、溫度濕度等信息,為用戶提供更加智能化和便捷的家居體驗(yàn)。

智能家居控制系統(tǒng)具有以下主要特點(diǎn)和功能:

  1. 遠(yuǎn)程控制:通過(guò)與華為云物聯(lián)網(wǎng)平臺(tái)的連接,用戶可以通過(guò)手機(jī)APP或者Web界面實(shí)現(xiàn)對(duì)家里各種電器開(kāi)關(guān)的遠(yuǎn)程控制。比如,可以遠(yuǎn)程打開(kāi)空調(diào)、關(guān)閉燈光等,無(wú)論身在何處都能夠?qū)崿F(xiàn)對(duì)家居設(shè)備的控制。
  2. 多種傳感器數(shù)據(jù)采集:系統(tǒng)采用了多種傳感器,包括煤氣傳感器、天然氣傳感器、煙霧傳感器、光照度傳感器、溫濕度傳感器等,可以實(shí)時(shí)采集家里的環(huán)境信息。這些數(shù)據(jù)通過(guò)ESP8266模塊上傳到華為云物聯(lián)網(wǎng)平臺(tái),用戶可以隨時(shí)查看家居環(huán)境的狀態(tài)。
  3. 安全監(jiān)測(cè):通過(guò)煤氣傳感器、天然氣傳感器和煙霧傳感器等,我們的系統(tǒng)可以實(shí)時(shí)監(jiān)測(cè)家里的安全狀況。一旦檢測(cè)到異常情況,比如煤氣泄漏或者火災(zāi),系統(tǒng)會(huì)立即發(fā)送警報(bào)通知用戶,保障家庭安全。
  4. 智能化場(chǎng)景設(shè)置:基于華為云物聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù)處理能力,智能家居控制系統(tǒng)可以實(shí)現(xiàn)智能化的場(chǎng)景設(shè)置。比如,用戶可以根據(jù)時(shí)間、溫度、濕度等條件,設(shè)置自動(dòng)調(diào)節(jié)空調(diào)溫度,實(shí)現(xiàn)節(jié)能和舒適的效果。

硬件介紹:

主控MCU: STM32F103ZET6

煙霧檢測(cè)傳感器: MQ2

天然氣檢測(cè)傳感:MQ5

溫度濕度檢測(cè)傳感器: DHT11

光照強(qiáng)度檢測(cè)傳感器: BH1750

物聯(lián)網(wǎng)云平臺(tái): 華為云物聯(lián)網(wǎng)平臺(tái)

電器開(kāi)關(guān)模擬采用板載的LED燈、繼電器。

WIFI: ESP8266 這是支持串口AT指令控制的WIFI模塊,聯(lián)網(wǎng)比較方便。

與華為云物聯(lián)網(wǎng)平臺(tái)通信的協(xié)議: MQTT

說(shuō)明: 當(dāng)前程序里的MQTT協(xié)議代碼是參考MQTT官方文檔編寫(xiě)的,不是使用ESP8266內(nèi)置的,所以程序并不依賴ESP8266專用或者指定的SDK,使用任意可以上網(wǎng)的網(wǎng)卡都可以套用,并不是一定非要使用ESP8266。

2. 登錄華為云創(chuàng)建云端設(shè)備

2.1 創(chuàng)建產(chǎn)品

華為運(yùn)官網(wǎng): https://www.huaweicloud.com/

image-20211130093052619

image-20211130093130834

image-20211130093332117

在這里可以查看接入的協(xié)議的端口號(hào)和地址。

image-20211130093421386

image-20211130093603183

MQTT (1883) a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com

我們?cè)O(shè)備接入的協(xié)議選擇MQTT,端口對(duì)應(yīng)是1883

接下來(lái)繼續(xù)創(chuàng)建產(chǎn)品,點(diǎn)擊產(chǎn)品頁(yè)面,點(diǎn)擊右上角創(chuàng)建產(chǎn)品:

image-20211130093745795

image-20211130093959379

image-20211130094029260

2.2 創(chuàng)建設(shè)備

image-20211130094202682

image-20211130094444452

這是我的設(shè)備信息:

設(shè)備ID
 61a580fad28ce3028832c2d8_esp8266_iot
 ?
 設(shè)備密鑰
 1126626497
     
 {
     "device_id": "61a580fad28ce3028832c2d8_esp8266_iot",
     "secret": "1126626497"
 }

2.3 產(chǎn)品模型定義

這一步就是設(shè)置上報(bào)設(shè)備的屬性,也就是設(shè)備的數(shù)據(jù)類型定義。

image-20211130095128692

image-20211130095303483

image-20211130095419588

image-20211130095504351

2.4 生成MQTT登錄密匙

創(chuàng)建完產(chǎn)品、設(shè)備之后,接下來(lái)就需要知道如何通過(guò)MQTT協(xié)議登陸華為云服務(wù)器。

官方的詳細(xì)介紹在這里: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112

image-20211130101143554

image-20211130101210816

MQTT設(shè)備登陸密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

image-20211130101436487

下面就得到了MQTT協(xié)議設(shè)備登錄的參數(shù)

2.5 使用MQTT客戶端軟件登錄

所有的參數(shù)已經(jīng)得到,接下來(lái)采用MQTT客戶端登錄華為云進(jìn)行測(cè)試。

下面這個(gè)軟件是自己開(kāi)發(fā)的,為了方便測(cè)試MQTT協(xié)議登錄。

華為云物聯(lián)網(wǎng)平臺(tái)的域名是: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com

華為云物聯(lián)網(wǎng)平臺(tái)的IP地址是: 121.36.42.100

image-20211130101631861

在軟件里參數(shù)填充正確之后,就看到設(shè)備已經(jīng)連接成功了。

接下來(lái)打開(kāi)設(shè)備頁(yè)面,可以看到設(shè)備已經(jīng)在線了。

image-20211130102000677

2.6 上報(bào)數(shù)據(jù)

官方文檔: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112

在這個(gè)文檔里介紹了MQTT上報(bào)數(shù)據(jù)的格式。

image-20211130102227428

image-20211130104332330

image-20211130104437937

總結(jié)的格式:

//訂閱主題: 平臺(tái)下發(fā)消息給設(shè)備
 $oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/messages/down
 ?
 //設(shè)備上報(bào)數(shù)據(jù)
 $oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/properties/report
 ?
 //上報(bào)的屬性消息 (一次可以上報(bào)多個(gè)屬性,在json里增加就行了)
 {"services": [{"service_id": "dht11","properties":{"DHT11-C":50}}]}

下面采用MQTT軟件上報(bào)數(shù)據(jù):

image-20211130104628591

image-20211130104709827

到此,設(shè)備數(shù)據(jù)已經(jīng)上報(bào)成功,如果需要增加更多的屬性,按照流程繼續(xù)增加即可。

3. STM32+ESP8266上報(bào)數(shù)據(jù)到華為云

項(xiàng)目源碼下載 https://download.csdn.net/download/xiaolong1126626497/81993720

3.1 硬件設(shè)備效果圖

image-20211130135133532

image-20211130105710464

3.2 BH1750.c 光照度傳感器

#include "bh1750.h"
float Read_BH1750_Data()
{
    unsigned char t0;
    unsigned char t1;
    float t;
    u8 r_s=0;
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:1\\r\\n");
    IIC_WriteOneByteData(0x01);
    r_s=IIC_GetACK();//獲取應(yīng)答
     if(r_s)printf("error:2\\r\\n");
    IIC_Stop(); //停止信號(hào) 
    
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:3\\r\\n");
    IIC_WriteOneByteData(0x01);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:4\\r\\n");
    IIC_Stop(); //停止信號(hào) 
    
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x46);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:5\\r\\n");
    IIC_WriteOneByteData(0x10);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:6\\r\\n");
    IIC_Stop(); //停止信號(hào) 
    
    DelayMs(300); //等待
    
    IIC_Start(); //發(fā)送起始信號(hào)
    IIC_WriteOneByteData(0x47);
    r_s=IIC_GetACK();//獲取應(yīng)答
    if(r_s)printf("error:7\\r\\n");
    
    t0=IIC_ReadOneByteData(); //接收數(shù)據(jù)
    IIC_SendACK(0); //發(fā)送應(yīng)答信號(hào)
    t1=IIC_ReadOneByteData(); //接收數(shù)據(jù)
    IIC_SendACK(1); //發(fā)送非應(yīng)答信號(hào)
    IIC_Stop(); //停止信號(hào)
    
     t=(((t0< 8)|t1)/1.2);
     return t;  
}

3.3 ESP8266.c WIFI代碼

#include "esp8266.h"
u8 ESP8266_IP_ADDR[16]; //255.255.255.255
u8 ESP8266_MAC_ADDR[18]; //硬件地址
/*
函數(shù)功能: ESP8266命令發(fā)送函數(shù)
函數(shù)返回值:0表示成功  1表示失敗
*/
u8 ESP8266_SendCmd(char *cmd)
{
    u8 i,j;
    for(i=0;i< 10;i++) //檢測(cè)的次數(shù)--發(fā)送指令的次數(shù)
    {
        USARTx_StringSend(USART3,cmd);
        for(j=0;j< 100;j++) //等待的時(shí)間
        {
            delay_ms(50);
            if(USART3_RX_FLAG)
            {
                USART3_RX_BUFFER[USART3_RX_CNT]='\\0';
                USART3_RX_FLAG=0;
                USART3_RX_CNT=0;
                if(strstr((char*)USART3_RX_BUFFER,"OK"))
                {
                    return 0;
                }
            }
        }
    }
    return 1;
}

/*
函數(shù)功能: ESP8266硬件初始化檢測(cè)函數(shù)
函數(shù)返回值:0表示成功  1表示失敗
*/
u8 ESP8266_Init(void)
{
    //退出透?jìng)髂J?span>
    USARTx_StringSend(USART3,"+++");
    delay_ms(50);
    return ESP8266_SendCmd("AT\\r\\n");
}


/*
函數(shù)功能: TCP服務(wù)器模式下的發(fā)送函數(shù)
發(fā)送指令: 
*/
u8 ESP8266_ServerSendData(u8 id,u8 *data,u16 len)
{
    u8 i,j,n;
    char ESP8266_SendCMD[100]; //組合發(fā)送過(guò)程中的命令
    for(i=0;i< 10;i++)
    {
        sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d,%d\\r\\n",id,len);
        USARTx_StringSend(USART3,ESP8266_SendCMD);
        for(j=0;j< 10;j++)
        {
            delay_ms(50);
            if(USART3_RX_FLAG)
            {
                USART3_RX_BUFFER[USART3_RX_CNT]='\\0';
                USART3_RX_FLAG=0;
                USART3_RX_CNT=0;
                if(strstr((char*)USART3_RX_BUFFER," >"))
                {
                    //繼續(xù)發(fā)送數(shù)據(jù)
                    USARTx_DataSend(USART3,data,len);
                    //等待數(shù)據(jù)發(fā)送成功
                    for(n=0;n< 200;n++)
                    {
                        delay_ms(50);
                        if(USART3_RX_FLAG)
                        {
                            USART3_RX_BUFFER[USART3_RX_CNT]='\\0';
                            USART3_RX_FLAG=0;
                            USART3_RX_CNT=0;
                            if(strstr((char*)USART3_RX_BUFFER,"SEND OK"))
                            {
                                return 0;
                            }
                         }            
                    }   
                }
            }
        }
    }
    return 1;
}

/*
函數(shù)功能: 配置WIFI為STA模式+TCP客戶端模式
函數(shù)參數(shù):
char *ssid  創(chuàng)建的熱點(diǎn)名稱
char *pass  創(chuàng)建的熱點(diǎn)密碼 (最少8位)
char *p     將要連接的服務(wù)器IP地址
u16 port    將要連接的服務(wù)器端口號(hào)
u8 flag     1表示開(kāi)啟透?jìng)髂J?0表示關(guān)閉透?jìng)髂J?函數(shù)返回值:0表示成功  其他值表示對(duì)應(yīng)的錯(cuò)誤
*/
u8 ESP8266_STA_TCP_Client_Mode(char *ssid,char *pass,char *ip,u16 port,u8 flag)
{
    char ESP8266_SendCMD[100]; //組合發(fā)送過(guò)程中的命令
    //退出透?jìng)髂J?span>
    //USARTx_StringSend(USART3,"+++");
    //delay_ms(50);
    /*1. 測(cè)試硬件*/
    if(ESP8266_SendCmd("AT\\r\\n"))return 1;
    /*2. 關(guān)閉回顯*/
    if(ESP8266_SendCmd("ATE0\\r\\n"))return 2;
    /*3. 設(shè)置WIFI模式*/
    if(ESP8266_SendCmd("AT+CWMODE=1\\r\\n"))return 3;
    /*4. 復(fù)位*/
    ESP8266_SendCmd("AT+RST\\r\\n");
    delay_ms(1000);
    delay_ms(1000);
    delay_ms(1000);
    /*5. 關(guān)閉回顯*/
    if(ESP8266_SendCmd("ATE0\\r\\n"))return 5;
    /*6. 配置將要連接的WIFI熱點(diǎn)信息*/
    sprintf(ESP8266_SendCMD,"AT+CWJAP=\"%s\",\"%s\"\\r\\n",ssid,pass);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;
    /*7. 設(shè)置單連接*/
    if(ESP8266_SendCmd("AT+CIPMUX=0\\r\\n"))return 7;
    /*8. 配置要連接的TCP服務(wù)器信息*/
    sprintf(ESP8266_SendCMD,"AT+CIPSTART=\"TCP\",\"%s\",%d\\r\\n",ip,port);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;
    /*9. 開(kāi)啟透?jìng)髂J?/
    if(flag)
    {
       if(ESP8266_SendCmd("AT+CIPMODE=1\\r\\n"))return 9; //開(kāi)啟
       if(ESP8266_SendCmd("AT+CIPSEND\\r\\n"))return 10;  //開(kāi)始透?jìng)?span>
       if(!(strstr((char*)USART3_RX_BUFFER," >")))
       {
            return 11;
       }
        //如果想要退出發(fā)送:  "+++"
    }
    
     //打印總體信息
    USART1_Printf("WIFI模式:STA+TCP客戶端\\n");
    USART1_Printf("Connect_WIFI熱點(diǎn)名稱:%s\\n",ssid);
    USART1_Printf("Connect_WIFI熱點(diǎn)密碼:%s\\n",pass);
    USART1_Printf("TCP服務(wù)器端口號(hào):%d\\n",port);
    USART1_Printf("TCP服務(wù)器IP地址:%s\\n",ip);
    return 0;
}


/*
函數(shù)功能: TCP客戶端模式下的發(fā)送函數(shù)
發(fā)送指令: 
*/
u8 ESP8266_ClientSendData(u8 *data,u16 len)
{
    u8 i,j,n;
    char ESP8266_SendCMD[100]; //組合發(fā)送過(guò)程中的命令
    for(i=0;i< 10;i++)
    {
        sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d\\r\\n",len);
        USARTx_StringSend(USART3,ESP8266_SendCMD);
        for(j=0;j< 10;j++)
        {
            delay_ms(50);
            if(USART3_RX_FLAG)
            {
                USART3_RX_BUFFER[USART3_RX_CNT]='\\0';
                USART3_RX_FLAG=0;
                USART3_RX_CNT=0;
                if(strstr((char*)USART3_RX_BUFFER," >"))
                {
                    //繼續(xù)發(fā)送數(shù)據(jù)
                    USARTx_DataSend(USART3,data,len);
                    //等待數(shù)據(jù)發(fā)送成功
                    for(n=0;n< 200;n++)
                    {
                        delay_ms(50);
                        if(USART3_RX_FLAG)
                        {
                            USART3_RX_BUFFER[USART3_RX_CNT]='\\0';
                            USART3_RX_FLAG=0;
                            USART3_RX_CNT=0;
                            if(strstr((char*)USART3_RX_BUFFER,"SEND OK"))
                            {
                                return 0;
                            }
                         }            
                    }   
                }
            }
        }
    }
    return 1;
}

3.4 main.c 主函數(shù)

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include < string.h >
#include "timer.h"
#include "esp8266.h"
#include "mqtt.h"
#include "oled.h"
#include "fontdata.h"
#include "bh1750.h"
#include "iic.h"
#include "sht3x.h"


#define ESP8266_WIFI_AP_SSID  "CMCC-Cqvn"   //將要連接的路由器名稱 --不要出現(xiàn)中文、空格等特殊字符
#define ESP8266_AP_PASSWORD "99pu58cb"     //將要連接的路由器密碼


//華為云服務(wù)器的設(shè)備信息
#define MQTT_ClientID "61a580fad28ce3028832c2d8_esp8266_iot_0_0_2021113002"
#define MQTT_UserName "61a580fad28ce3028832c2d8_esp8266_iot"
#define MQTT_PassWord "74af3bf3024cf9c41b13d6c63fc86e25012b54141ecfcdff3516f08665140e6f"

//訂閱與發(fā)布的主題
#define SET_TOPIC  "$oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/messages/down"  //訂閱
#define POST_TOPIC "$oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/properties/report"  //發(fā)布


char mqtt_message[200];//上報(bào)數(shù)據(jù)緩存區(qū)
char OLED_ShowBuff[100];
u8 ESP8266_Stat=0;


/*
函數(shù)功能: 溫濕度\\光強(qiáng)度顯示
*/
void ShowTemperatureAndHumidity(float temp,float humi,float light)
{
    sprintf(OLED_ShowBuff,"T: %.2f",temp);
	OLED_ShowString(40,16*0,16,OLED_ShowBuff); 
    sprintf(OLED_ShowBuff,"H: %.2f%%",humi);
	OLED_ShowString(40,16*1,16,OLED_ShowBuff);
    sprintf(OLED_ShowBuff,"L: %.2f%%",light);
	OLED_ShowString(40,16*2,16,OLED_ShowBuff); 
}

/*
函數(shù)功能: ESP8266顯示頁(yè)面
*/
void ESP8266_ShowPageTable(void)
{
    if(ESP8266_Stat)OLED_ShowString(0,16*0,16,"WIFI STAT:ERROR");
    else OLED_ShowString(0,16*0,16,"WIFI STAT:OK");

    //顯示字符串
    sprintf((char*)OLED_ShowBuff,"%s",ESP8266_WIFI_AP_SSID);
    OLED_ShowString(0,16*1,16,OLED_ShowBuff);	
    
    sprintf((char*)OLED_ShowBuff,"%s",ESP8266_AP_PASSWORD);   
    OLED_ShowString(0,16*2,16,OLED_ShowBuff);    
}


int main()
{
   u32 time_cnt=0;
   u32 i;
   u8 key;
   u8 page=0;
   float temp=0;
   float humi=0;
   float light=0;
   u8 motor_state=0;
   float Humidity;
   float Temperature;
    
   delay_ms(1000);
   delay_ms(1000);
    
   LED_Init();
   KEY_Init();
   IIC_Init();
    
    //OLED初始化
   OLED_Init(0xc8,0xa1); //OLED顯示屏初始化--正常顯示;
     //清屏
   OLED_Clear(0);
    
   USART1_Init(115200);
   TIMER1_Init(72,20000); //超時(shí)時(shí)間20ms

   USART3_Init(115200);//串口-WIFI
   TIMER3_Init(72,20000); //超時(shí)時(shí)間20ms
    
   Init_SHT30();
    
   USART1_Printf("正在初始化WIFI請(qǐng)稍等.\\n");
   
   if(ESP8266_Init())
   {
      ESP8266_Stat=1;
      USART1_Printf("ESP8266硬件檢測(cè)錯(cuò)誤.\\n");  
   }
   else
   {
      //非加密端口
      USART1_Printf("WIFI:%d\\n",ESP8266_STA_TCP_Client_Mode(ESP8266_WIFI_AP_SSID,ESP8266_AP_PASSWORD,"121.36.42.100",1883,1));
   }
   
    //2. MQTT協(xié)議初始化	
    MQTT_Init(); 
   
    //3. 連接華為云IOT服務(wù)器        
    while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
    {
        USART1_Printf("服務(wù)器連接失敗,正在重試...\\n");
        delay_ms(500);
    }
    USART1_Printf("服務(wù)器連接成功.\\n");
    
    
    //3. 訂閱主題
    if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
    {
        USART1_Printf("主題訂閱失敗.\\n");
    }
    else
    {
        USART1_Printf("主題訂閱成功.\\n");
    }        
        
    while(1)
    {    
        //按鍵可以測(cè)試
        key=KEY_Scan(0);
        if(key==1)
        {
            //清屏
            OLED_Clear(0);
            
            //翻頁(yè)
            if(page >=1)
            {
                page=0;
            }
            else
            {
                 page++;
            }         
        
            LED1=!LED1;  //LEd狀態(tài)燈
        }
        else if(key==2)
        {
            LED1=!LED1;  //LEd狀態(tài)燈
            time_cnt=0;
            //電機(jī)狀態(tài)改變
            MOTOR_DEV=!MOTOR_DEV;
            //電機(jī)狀態(tài)
            motor_state=MOTOR_DEV;
            //補(bǔ)光燈
            LIGHT_DEV=!LIGHT_DEV;      
        }  
        
        //接收WIFI返回的數(shù)據(jù)
        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\\0';
            
            //向串口打印返回的數(shù)據(jù)
            for(i=0;i< USART3_RX_CNT;i++)
            {
                USART1_Printf("%c",USART3_RX_BUFFER[i]);
            }
            
            USART3_RX_CNT=0;
            USART3_RX_FLAG=0;
        }
              
        //定時(shí)與保持與華為云物聯(lián)網(wǎng)的同步--1秒一次
        delay_ms(10);
        time_cnt++;
        if(time_cnt==50)
        {
            time_cnt=0;
            
            //狀態(tài)燈 --表示程序還活著
            LED2=!LED2;
            
            //讀取光強(qiáng)度
            light=Read_BH1750_Data();
           
            //讀取溫濕度
            SHT3x_ReadData(&Humidity,&Temperature);
            humi=Humidity;
            temp=Temperature;
            
            //上傳數(shù)據(jù)--溫度
			sprintf(mqtt_message,"{\"services\": [{\"service_id\": \"dht11\",\"properties\":{\"DHT11-C\":%d}}]}",temp);
			
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            //根據(jù)濕度自動(dòng)灌溉
            if(humi< 50.0)  //小于50自動(dòng)灌溉
            {
                 motor_state=1; //電機(jī)狀態(tài)更新
                 MOTOR_DEV=1;  //開(kāi)電機(jī)
            } 
        }
         
        //OLED顯示屏
        if(page==0)
        {
            ShowTemperatureAndHumidity(temp,humi,light);
        }
        else if(page==1)
        {
            ESP8266_ShowPageTable();
        }
    }
}

審核編輯:湯梓紅

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

    關(guān)注

    41

    文章

    6419

    瀏覽量

    110096
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

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

    關(guān)注

    1924

    文章

    9397

    瀏覽量

    182165
  • IOT
    IOT
    +關(guān)注

    關(guān)注

    186

    文章

    4097

    瀏覽量

    195087
  • 華為云
    +關(guān)注

    關(guān)注

    3

    文章

    2343

    瀏覽量

    17105
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    智能家居控制系統(tǒng)模型

    智能家居控制系統(tǒng)模型 智能家居控制系統(tǒng)(smarthome controlsystems,簡(jiǎn)稱SCS),是以住宅為平臺(tái),家居電器及
    發(fā)表于 10-28 21:21

    【OK210申請(qǐng)】智能家居控制系統(tǒng)

    ,提升家居智能、安全、便利、舒適,并實(shí)現(xiàn)環(huán)保控制系統(tǒng)平臺(tái)。智能家居控制系統(tǒng)智能家居核心,是
    發(fā)表于 07-06 15:46

    【Aworks申請(qǐng)】智能家居控制系統(tǒng)

    管理系統(tǒng),提升家居智能、安全、便利、舒適,并實(shí)現(xiàn)環(huán)保控制系統(tǒng)平臺(tái)。智能家居控制系統(tǒng)
    發(fā)表于 07-06 15:48

    智易申請(qǐng)】基于STM32智能家居遠(yuǎn)程控制系統(tǒng)研究

    申請(qǐng)理由:理由:通過(guò)STM32開(kāi)發(fā)板開(kāi)發(fā)出一套遠(yuǎn)程控制智能家居系統(tǒng),使用戶能夠隨時(shí)隨地控制家中的空調(diào)、熱水器等
    發(fā)表于 07-24 17:18

    智易申請(qǐng)】智能家居控制系統(tǒng)

    申請(qǐng)理由:自己學(xué)習(xí)研究智能家居系統(tǒng),由于我是是學(xué)生沒(méi)有那么多錢(qián)買(mǎi)開(kāi)發(fā)版!而且學(xué)校制PCB板的條件有限,到現(xiàn)在缺一個(gè)主機(jī)控制板,所以申請(qǐng)這款開(kāi)發(fā)版項(xiàng)目描述:我在學(xué)校實(shí)驗(yàn)室做過(guò)智能家居外圍
    發(fā)表于 07-31 07:52

    【MiCOKit申請(qǐng)】智能家居的遠(yuǎn)程控制系統(tǒng)

    的FogCloud 完成設(shè)備和手機(jī)APP 之間的交互,擴(kuò)展板提供了物聯(lián)網(wǎng)常用的各種傳感器,方便實(shí)現(xiàn)物聯(lián)網(wǎng)應(yīng)用的各種功能。鑒于此,提出了基于MiCoKit的智能家居的遠(yuǎn)程控制系統(tǒng)的申請(qǐng)。項(xiàng)目描述: 該項(xiàng)
    發(fā)表于 08-22 17:28

    智能家居控制系統(tǒng)如何走進(jìn)生活?

    、娛樂(lè)和閱讀,這樣的生活離我們已經(jīng)越來(lái)越近了……  智能家居控制系統(tǒng)如何走進(jìn)生活?事實(shí)上,隨著物聯(lián)網(wǎng)技術(shù)的積累,計(jì)算、大數(shù)據(jù)以及人工智能技術(shù)的進(jìn)步,以及傳統(tǒng)家電廠商、通信廠商以及互聯(lián)
    發(fā)表于 05-02 11:47

    論文-基于stm32智能家居遠(yuǎn)程控制系統(tǒng)

    用戶提供高效、舒適、節(jié)能的居住和工作環(huán)境的智能家居系統(tǒng)是非常有前景的。本課題在分析智能家居的研究現(xiàn)狀、發(fā)展趨勢(shì)、研究意義的基礎(chǔ)上提出了基于STM32
    發(fā)表于 03-19 13:34

    【HarmonyOS HiSpark Wi-Fi IoT HarmonyOS 智能家居套件試用 】小核桃——

    的“小核桃——腦”產(chǎn)品,優(yōu)化處理智能家居IOT的芯片算力問(wèn)題。同時(shí)想借助發(fā)燒友論壇和HiSpark Wi-Fi IoT 智能家居套件的鴻蒙
    發(fā)表于 09-25 10:09

    【HarmonyOS HiSpark Wi-Fi IoT HarmonyOS 智能家居套件試用 】智能家居控制系統(tǒng)

    項(xiàng)目名稱:智能家居控制系統(tǒng)試用計(jì)劃:試用計(jì)劃:1、集成現(xiàn)有已有傳感器等套件2,實(shí)現(xiàn)語(yǔ)音控制,3、實(shí)現(xiàn)于智能家居控制系統(tǒng)集成4、實(shí)現(xiàn)
    發(fā)表于 10-29 14:07

    【HarmonyOS HiSpark Wi-Fi IoT HarmonyOS 智能家居套件試用 】智能家居檢測(cè)控制系統(tǒng)

    項(xiàng)目名稱:智能家居檢測(cè)控制系統(tǒng)試用計(jì)劃:申請(qǐng)理由:主要是想使用國(guó)產(chǎn)OS Harmony并提出試用建議,然后是基于對(duì)智能家居的熱愛(ài),想實(shí)現(xiàn)一個(gè)智能家居相關(guān)的集環(huán)境監(jiān)控,
    發(fā)表于 10-29 14:22

    ZigBee與Android的智能家居控制系統(tǒng)設(shè)計(jì)

    ZigBee與Android的智能家居控制系統(tǒng)設(shè)計(jì)智能家居是在傳統(tǒng)住宅的基礎(chǔ)上,利用現(xiàn)代科學(xué)技術(shù),諸如網(wǎng)絡(luò)通信、安全防范、自動(dòng)控制、音視頻等技術(shù)將
    發(fā)表于 08-06 09:02

    如何用STM32嵌入式實(shí)現(xiàn)智能家居控制系統(tǒng)

    如何用STM32嵌入式實(shí)現(xiàn)智能家居控制系統(tǒng)呢?智能家居控制系統(tǒng)有哪些功能呢?
    發(fā)表于 10-19 09:40

    一種基于STM32智能家居控制系統(tǒng)

    一種基于STM32智能家居控制系統(tǒng),實(shí)現(xiàn)對(duì)家居智能控制
    發(fā)表于 06-14 17:25 ?38次下載

    智能家居控制系統(tǒng)設(shè)計(jì)方案

    這是基于STM32設(shè)計(jì)的智能家居控制系統(tǒng),采用ESP8266連接OneNet平臺(tái)。
    的頭像 發(fā)表于 02-28 14:05 ?6910次閱讀
    <b class='flag-5'>智能家居</b><b class='flag-5'>控制系統(tǒng)</b>設(shè)計(jì)方案