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

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

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

基于華為云物聯(lián)網(wǎng)平臺設(shè)計(jì)的澆花神器(STM32設(shè)備)

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-05-28 14:11 ? 次閱讀

1. 前言

隨著社會的不斷發(fā)展和人們生活水平的逐漸提高,人們逐漸追求高質(zhì)量的生活,很多人都會選擇在家里或辦公室種植一些花卉以凈化家庭空氣,陶冶情操,但是很多人忙于工作、學(xué)習(xí)、出差、旅游或者一些其他的原因,不能及時地對花卉進(jìn)行照料,短時間內(nèi)導(dǎo)致很多花卉因缺水分而影響正常生長,長時間不照料有些名貴的花卉直接死亡?;谏鲜鰻顩r,提出了此基于物聯(lián)網(wǎng)的智慧澆花系統(tǒng)。該系統(tǒng)采用工業(yè)高精度土壤溫濕度傳感器采集花盆中的突然溫濕度,環(huán)境的溫度濕度,通過ESP8266 WIFI實(shí)時上傳當(dāng)前的土壤溫濕度、環(huán)境光照度等數(shù)據(jù)到華為云物聯(lián)網(wǎng)云平臺,可以通過 app實(shí)時查看花卉的土壤濕度、環(huán)境溫度等信息,并且本地通過OLED顯示屏實(shí)時顯示這些信息,可以設(shè)定某種花適宜的生長的土壤濕度條件,實(shí)現(xiàn)自動控制給花澆水,即能讓花卉生長在適宜的濕度下,與目前市場上的自動澆花系統(tǒng)相比,該系統(tǒng)的特點(diǎn)具有遠(yuǎn)程控制,低成本、極高的資源利用率、操作簡單和反應(yīng)靈敏等。

2. 整體系統(tǒng)設(shè)計(jì)

主控MCU選擇STM32F103芯片,通過土壤濕度傳感器、環(huán)境溫濕度傳感器,檢測整個周邊環(huán)境信息,再通過ESP8266 WIFI傳遞到物聯(lián)網(wǎng)平臺。程序里可以預(yù)設(shè)濕度閥值,當(dāng)檢測到土壤濕度低于閥值就自動澆花。在手機(jī)APP上可以實(shí)現(xiàn)遠(yuǎn)程控制水泵澆花,本地在搭載一個TFT小尺寸顯示屏,可以實(shí)時顯示測量檢測的數(shù)據(jù),在辦公室里也可以通過TFT彩屏顯示屏解周圍環(huán)境的信息。

3. 應(yīng)用側(cè)軟件運(yùn)行效果

image-20220314220612175.png


image-20220314221035015.png


image-20220314220440225.png

4. 硬件運(yùn)行效果

image-20220314225450773.png


image-20220315004128180.png


image-20220315012115581.png


9)ZPR5ZTLKT1V945T)LI420.jpg


image.png


1.jpg


image-20220315015914129.png


image-20220315015941794.png


image-20220315020302958.png

5. 創(chuàng)建產(chǎn)品、設(shè)備

image.png


image.png


image.png

6.硬件核心代碼–ESP8266

#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++) //檢測的次數(shù)--發(fā)送指令的次數(shù)
    {
        USARTx_StringSend(USART2,cmd);
        for(j=0;j<100;j++) //等待的時間
        {
            delay_ms(50);
            if(USART2_RX_FLAG)
            {
                USART2_RX_BUFFER[USART2_RX_CNT]='\0';
                USART2_RX_FLAG=0;
                USART2_RX_CNT=0;
                if(strstr((char*)USART2_RX_BUFFER,"OK"))
                {
                    return 0;
                }
            }
        }
    }
    return 1;
}

/*
函數(shù)功能: ESP8266硬件初始化檢測函數(shù)
函數(shù)返回值:0表示成功  1表示失敗
*/
u8 ESP8266_Init(void)
{
    //退出透傳模式
    USARTx_StringSend(USART2,"+++");
    delay_ms(100);
     //退出透傳模式
    USARTx_StringSend(USART2,"+++");
    delay_ms(100);
    return ESP8266_SendCmd("AT\r\n");
}

/*
函數(shù)功能: 一鍵配置WIFI為AP+TCP服務(wù)器模式
函數(shù)參數(shù):
char *ssid  創(chuàng)建的熱點(diǎn)名稱
char *pass  創(chuàng)建的熱點(diǎn)密碼 (最少8位)
u16 port    創(chuàng)建的服務(wù)器端口號
函數(shù)返回值: 0表示成功 其他值表示對應(yīng)錯誤值
*/
u8 ESP8266_AP_TCP_Server_Mode(char *ssid,char *pass,u16 port)
{
    char *p;
    u8 i;
    char ESP8266_SendCMD[100]; //組合發(fā)送過程中的命令
    /*1. 測試硬件*/
    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=2\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. 設(shè)置WIFI的AP模式參數(shù)*/
    sprintf(ESP8266_SendCMD,"AT+CWSAP=\"%s\",\"%s\",1,4\r\n",ssid,pass);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;
    /*7. 開啟多連接*/
    if(ESP8266_SendCmd("AT+CIPMUX=1\r\n"))return 7;
    /*8. 設(shè)置服務(wù)器端口號*/
    sprintf(ESP8266_SendCMD,"AT+CIPSERVER=1,%d\r\n",port);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;
    /*9. 查詢本地IP地址*/
    if(ESP8266_SendCmd("AT+CIFSR\r\n"))return 9;
    //提取IP地址
    p=strstr((char*)USART2_RX_BUFFER,"APIP");
    if(p)
    {
        p+=6;
        for(i=0;*p!='"';i++)
        {
            ESP8266_IP_ADDR[i]=*p++;
        }
        ESP8266_IP_ADDR[i]='\0';
    }
    //提取MAC地址
    p=strstr((char*)USART2_RX_BUFFER,"APMAC");
    if(p)
    {
        p+=7;
        for(i=0;*p!='"';i++)
        {
            ESP8266_MAC_ADDR[i]=*p++;
        }
        ESP8266_MAC_ADDR[i]='\0';
    }
    
    //打印總體信息
    printf("當(dāng)前WIFI模式:AP+TCP服務(wù)器\n");
    printf("當(dāng)前WIFI熱點(diǎn)名稱:%s\n",ssid);
    printf("當(dāng)前WIFI熱點(diǎn)密碼:%s\n",pass);
    printf("當(dāng)前TCP服務(wù)器端口號:%d\n",port);
    printf("當(dāng)前TCP服務(wù)器IP地址:%s\n",ESP8266_IP_ADDR);
    printf("當(dāng)前TCP服務(wù)器MAC地址:%s\n",ESP8266_MAC_ADDR);
    return 0;
}

/*
函數(shù)功能: TCP服務(wù)器模式下的發(fā)送函數(shù)
發(fā)送指令: 
*/
u8 ESP8266_ServerSendData(u8 id,u8 *data,u16 len)
{
    u8 i,j,n;
    char ESP8266_SendCMD[100]; //組合發(fā)送過程中的命令
    for(i=0;i<10;i++)
    {
        sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d,%d\r\n",id,len);
        USARTx_StringSend(USART2,ESP8266_SendCMD);
        for(j=0;j<10;j++)
        {
            delay_ms(50);
            if(USART2_RX_FLAG)
            {
                USART2_RX_BUFFER[USART2_RX_CNT]='\0';
                USART2_RX_FLAG=0;
                USART2_RX_CNT=0;
                if(strstr((char*)USART2_RX_BUFFER,">"))
                {
                    //繼續(xù)發(fā)送數(shù)據(jù)
                    USARTx_DataSend(USART2,data,len);
                    //等待數(shù)據(jù)發(fā)送成功
                    for(n=0;n<200;n++)
                    {
                        delay_ms(50);
                        if(USART2_RX_FLAG)
                        {
                            USART2_RX_BUFFER[USART2_RX_CNT]='\0';
                            USART2_RX_FLAG=0;
                            USART2_RX_CNT=0;
                            if(strstr((char*)USART2_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ù)器端口號
u8 flag     1表示開啟透傳模式 0表示關(guān)閉透傳模式
函數(shù)返回值:0表示成功  其他值表示對應(yīng)的錯誤
*/
u8 ESP8266_STA_TCP_Client_Mode(char *ssid,char *pass,char *ip,u16 port,u8 flag)
{
    char ESP8266_SendCMD[100]; //組合發(fā)送過程中的命令
    //退出透傳模式
    //USARTx_StringSend(USART2,"+++");
    //delay_ms(50);
    /*1. 測試硬件*/
    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. 開啟透傳模式*/
    if(flag)
    {
       if(ESP8266_SendCmd("AT+CIPMODE=1\r\n"))return 9; //開啟
       if(ESP8266_SendCmd("AT+CIPSEND\r\n"))return 10;  //開始透傳
       if(!(strstr((char*)USART2_RX_BUFFER,">")))
       {
            return 11;
       }
        //如果想要退出發(fā)送:  "+++"
    }
    
    printf("WIFI模式:STA+TCP客戶端\r\n");
    printf("Connect_WIFI熱點(diǎn)名稱:%s\r\n",ssid);
    printf("Connect_WIFI熱點(diǎn)密碼:%s\r\n",pass);
    printf("TCP服務(wù)器端口號:%d\r\n",port);
    printf("TCP服務(wù)器IP地址:%s\r\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ā)送過程中的命令
    for(i=0;i<10;i++)
    {
        sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d\r\n",len);
        USARTx_StringSend(USART2,ESP8266_SendCMD);
        for(j=0;j<10;j++)
        {
            delay_ms(50);
            if(USART2_RX_FLAG)
            {
                USART2_RX_BUFFER[USART2_RX_CNT]='\0';
                USART2_RX_FLAG=0;
                USART2_RX_CNT=0;
                if(strstr((char*)USART2_RX_BUFFER,">"))
                {
                    //繼續(xù)發(fā)送數(shù)據(jù)
                    USARTx_DataSend(USART2,data,len);
                    //等待數(shù)據(jù)發(fā)送成功
                    for(n=0;n<200;n++)
                    {
                        delay_ms(50);
                        if(USART2_RX_FLAG)
                        {
                            USART2_RX_BUFFER[USART2_RX_CNT]='\0';
                            USART2_RX_FLAG=0;
                            USART2_RX_CNT=0;
                            if(strstr((char*)USART2_RX_BUFFER,"SEND OK"))
                            {
                                return 0;
                            }
                         }            
                    }   
                }
            }
        }
    }
    return 1;
}


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

    關(guān)注

    2894

    文章

    43316

    瀏覽量

    366491
  • STM32F103
    +關(guān)注

    關(guān)注

    33

    文章

    475

    瀏覽量

    63214
  • ESP8266
    +關(guān)注

    關(guān)注

    50

    文章

    959

    瀏覽量

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

    關(guān)注

    3

    文章

    2343

    瀏覽量

    17106
收藏 人收藏

    評論

    相關(guān)推薦

    OneNET Studio平臺STM32聯(lián)網(wǎng)開發(fā)(1)- MQTT協(xié)議設(shè)備接入數(shù)據(jù)上報測試

    OneNET Studio平臺STM32聯(lián)網(wǎng)開發(fā)(1)- MQTT協(xié)議設(shè)備接入數(shù)據(jù)上報測試
    的頭像 發(fā)表于 09-25 01:01 ?1680次閱讀
    OneNET Studio<b class='flag-5'>云</b><b class='flag-5'>平臺</b><b class='flag-5'>STM32</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>開發(fā)(1)- MQTT協(xié)議<b class='flag-5'>設(shè)備</b>接入數(shù)據(jù)上報測試

    基于機(jī)智平臺聯(lián)網(wǎng)實(shí)驗(yàn)平臺設(shè)計(jì)

    ,方便學(xué)生進(jìn)行基礎(chǔ)性操作和擴(kuò)展設(shè)計(jì)。經(jīng)過實(shí)驗(yàn)測試,聯(lián)網(wǎng)實(shí)驗(yàn)平臺運(yùn)行效果良好。【關(guān)鍵詞】機(jī)智;STM32
    發(fā)表于 09-09 14:39

    互聯(lián)時代引領(lǐng)者—微聯(lián)網(wǎng)服務(wù)平臺

    標(biāo)準(zhǔn)化、智能化、界面化的硬件產(chǎn)品及通訊管理和數(shù)據(jù)管理軟件,用戶只需完成傳感器選型和應(yīng)用界面設(shè)計(jì),即可實(shí)現(xiàn)聯(lián)網(wǎng)應(yīng)用項(xiàng)目的迅速落地。  在業(yè)界首創(chuàng)三端合一、遠(yuǎn)程控制設(shè)備  微聯(lián)
    發(fā)表于 05-21 16:52

    機(jī)智聯(lián)網(wǎng)平臺)上新了

    方式,如GPRS、NB-IoT、4G全網(wǎng)通;支持RS232、RS485等方式接入;甚至是可通過APP、后臺、小程序等方式進(jìn)行設(shè)備管理。機(jī)智聯(lián)網(wǎng)
    發(fā)表于 11-05 19:21

    有沒有人用開發(fā)板連接公有聯(lián)網(wǎng)平臺

    有人連接過阿里、華為或者騰訊這類聯(lián)網(wǎng)
    發(fā)表于 11-26 10:51

    STM32F103C8T6連接阿里聯(lián)網(wǎng)平臺

    STM32F103C8T6連接阿里聯(lián)網(wǎng)平臺(1)—阿里lot Studio控制Web開發(fā)分
    發(fā)表于 08-11 09:33

    阿里聯(lián)網(wǎng)平臺接入NodeMCU的方法

    文章目錄NodeMCU(ESP8266) 接入阿里聯(lián)網(wǎng)平臺 踩坑之旅NodeMCU簡介快速入門簡單使用阿里
    發(fā)表于 11-03 07:11

    基于blinker聯(lián)網(wǎng)平臺使用3D打印制作的一個澆花系統(tǒng)

    flower care sys基于arduino Blinker的聯(lián)網(wǎng)植物養(yǎng)護(hù)系統(tǒng)背景信息:這是一個開源的;基于arduino;基于blinker聯(lián)網(wǎng)
    發(fā)表于 12-08 06:25

    NodeMCU開發(fā)板接入阿里聯(lián)網(wǎng)平臺和百度天工聯(lián)網(wǎng)平臺的注意事項(xiàng)

    的也是NodeMCU開發(fā)板。下面是分別是接入阿里聯(lián)網(wǎng)平臺和百度天工聯(lián)網(wǎng)
    發(fā)表于 01-24 07:46

    基于STM32機(jī)智平臺控制設(shè)備開關(guān)的相關(guān)資料推薦

    簡單粗暴 一看就懂 拒絕花里胡哨先看視頻效果啦 基于STM32的機(jī)智平臺控制設(shè)備開關(guān)(聯(lián)網(wǎng))
    發(fā)表于 02-14 07:42

    【IoT開發(fā)】基于機(jī)智聯(lián)網(wǎng)的智能澆花教程

    控制器,esp8266聯(lián)網(wǎng)模塊作為通信設(shè)備,底層采用MQTT協(xié)議,連接到聯(lián)網(wǎng)
    發(fā)表于 07-13 15:39

    Fibocom 公有華為 技術(shù)資料

    Fibocom 公有華為 技術(shù)資料內(nèi)容如下:1、華為連接教程2、華為
    發(fā)表于 01-05 12:12

    基于STM32的機(jī)智平臺控制設(shè)備開關(guān)(聯(lián)網(wǎng))

    簡單粗暴 一看就懂 拒絕花里胡哨先看視頻效果啦 基于STM32的機(jī)智平臺控制設(shè)備開關(guān)(
    發(fā)表于 12-08 19:36 ?6次下載
    基于<b class='flag-5'>STM32</b>的機(jī)智<b class='flag-5'>云</b><b class='flag-5'>平臺</b>控制<b class='flag-5'>設(shè)備</b>開關(guān)(<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>)

    【IoT開發(fā)】基于機(jī)智聯(lián)網(wǎng)的智能澆花教程

    本文設(shè)計(jì)一套基于聯(lián)網(wǎng)的智能澆花系統(tǒng),可以根據(jù)傳感器檢測數(shù)據(jù)及環(huán)境溫度等因素自動澆花,又可以通過聯(lián)網(wǎng)
    的頭像 發(fā)表于 07-13 15:53 ?793次閱讀
    【IoT開發(fā)】基于機(jī)智<b class='flag-5'>云</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>的智能<b class='flag-5'>澆花</b>教程

    嵌入式澆花神器拆解

    這就是澆花神器,很小巧的一個東西,可以把水桶中的水泵到花盆中。它可以用按鍵手動操作,不過更方便的是通過WiFi連接網(wǎng)絡(luò),這樣就可以通過手機(jī)端的APP遠(yuǎn)程操作了,還可以定時操作,間隔多長時間澆一次,每次膠水多長時間都可以設(shè)置。
    的頭像 發(fā)表于 08-29 10:11 ?171次閱讀
    嵌入式<b class='flag-5'>澆花神器</b>拆解