1. 前言
隨著社會的不斷發(fā)展和人們生活水平的逐漸提高,人們逐漸追求高質(zhì)量的生活,很多人都會選擇在家里或辦公室種植一些花卉以凈化家庭空氣,陶冶情操,但是很多人忙于工作、學習、出差、旅游或者一些其他的原因,不能及時地對花卉進行照料,短時間內(nèi)導致很多花卉因缺水分而影響正常生長,長時間不照料有些名貴的花卉直接死亡。基于上述狀況,提出了此基于物聯(lián)網(wǎng)的智慧澆花系統(tǒng)。該系統(tǒng)采用工業(yè)級高精度土壤溫濕度傳感器采集花盆中的突然溫濕度,環(huán)境的溫度濕度,通過ESP8266 WIFI實時上傳當前的土壤溫濕度、環(huán)境光照度等數(shù)據(jù)到華為云物聯(lián)網(wǎng)云平臺,可以通過 app實時查看花卉的土壤濕度、環(huán)境溫度等信息,并且本地通過OLED顯示屏實時顯示這些信息,可以設定某種花適宜的生長的土壤濕度條件,實現(xiàn)自動控制給花澆水,即能讓花卉生長在適宜的濕度下,與目前市場上的自動澆花系統(tǒng)相比,該系統(tǒng)的特點具有遠程控制,低成本、極高的資源利用率、操作簡單和反應靈敏等。
2. 整體系統(tǒng)設計
主控MCU選擇STM32F103芯片,通過土壤濕度傳感器、環(huán)境溫濕度傳感器,檢測整個周邊環(huán)境信息,再通過ESP8266 WIFI傳遞到物聯(lián)網(wǎng)平臺。程序里可以預設濕度閥值,當檢測到土壤濕度低于閥值就自動澆花。在手機APP上可以實現(xiàn)遠程控制水泵澆花,本地在搭載一個TFT小尺寸顯示屏,可以實時顯示測量檢測的數(shù)據(jù),在辦公室里也可以通過TFT彩屏顯示屏解周圍環(huán)境的信息。
3. 應用側(cè)軟件運行效果
![image-20220314220612175.png](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvRmAN6ZHAAGNIeRy0MY406.png)
![image-20220314221035015.png](https://file.elecfans.com//web2/M00/46/40/poYBAGKRvRuAWF6DAAfQONlszI8727.png)
![image-20220314220440225.png](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvRuAGPiDAAGWmPRtYB0866.png)
4. 硬件運行效果
![image-20220314225450773.png](https://file.elecfans.com//web2/M00/46/40/poYBAGKRvR-AN21_AB_dlHfRmsU750.png)
![image-20220315004128180.png](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvSOAGpp-AAXoajRrU30405.png)
![image-20220315012115581.png](https://file.elecfans.com//web2/M00/46/40/poYBAGKRvSSAa1KJAAQBZ6dTv7M283.png)
![9)ZPR5ZTLKT1V945T)LI420.jpg](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvSuAKgBgAAZSqZL07Yk870.jpg)
![image.png](https://file.elecfans.com//web2/M00/46/40/poYBAGKRvS6AEW6AAAoYxFnjLmA121.png)
![1.jpg](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvTiAGKccAAZOpt6IsQA448.jpg)
![image-20220315015914129.png](https://file.elecfans.com//web2/M00/46/40/poYBAGKRvTqALLkzAAL0hM3KD0A294.png)
![image-20220315015941794.png](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvTqAdWUAAALvEuUySng169.png)
![image-20220315020302958.png](https://file.elecfans.com//web2/M00/46/40/poYBAGKRvTuAJ1weAAH_hDH11LM193.png)
5. 創(chuàng)建產(chǎn)品、設備
![image.png](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvTyAeUbqAAPuu7G_LNs932.png)
![image.png](https://file.elecfans.com//web2/M00/46/40/poYBAGKRvTyAGV7yAAJRT_4CMQ8567.png)
![image.png](https://file.elecfans.com//web2/M00/46/40/pYYBAGKRvT2AKheNAAK02hQyAbE521.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服務器模式
函數(shù)參數(shù):
char *ssid 創(chuàng)建的熱點名稱
char *pass 創(chuàng)建的熱點密碼 (最少8位)
u16 port 創(chuàng)建的服務器端口號
函數(shù)返回值: 0表示成功 其他值表示對應錯誤值
*/
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. 關閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 2;
/*3. 設置WIFI模式*/
if(ESP8266_SendCmd("AT+CWMODE=2\r\n"))return 3;
/*4. 復位*/
ESP8266_SendCmd("AT+RST\r\n");
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
/*5. 關閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 5;
/*6. 設置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. 設置服務器端口號*/
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("當前WIFI模式:AP+TCP服務器\n");
printf("當前WIFI熱點名稱:%s\n",ssid);
printf("當前WIFI熱點密碼:%s\n",pass);
printf("當前TCP服務器端口號:%d\n",port);
printf("當前TCP服務器IP地址:%s\n",ESP8266_IP_ADDR);
printf("當前TCP服務器MAC地址:%s\n",ESP8266_MAC_ADDR);
return 0;
}
/*
函數(shù)功能: TCP服務器模式下的發(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)建的熱點名稱
char *pass 創(chuàng)建的熱點密碼 (最少8位)
char *p 將要連接的服務器IP地址
u16 port 將要連接的服務器端口號
u8 flag 1表示開啟透傳模式 0表示關閉透傳模式
函數(shù)返回值:0表示成功 其他值表示對應的錯誤
*/
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. 關閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 2;
/*3. 設置WIFI模式*/
if(ESP8266_SendCmd("AT+CWMODE=1\r\n"))return 3;
/*4. 復位*/
ESP8266_SendCmd("AT+RST\r\n");
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
/*5. 關閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 5;
/*6. 配置將要連接的WIFI熱點信息*/
sprintf(ESP8266_SendCMD,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,pass);
if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;
/*7. 設置單連接*/
if(ESP8266_SendCmd("AT+CIPMUX=0\r\n"))return 7;
/*8. 配置要連接的TCP服務器信息*/
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熱點名稱:%s\r\n",ssid);
printf("Connect_WIFI熱點密碼:%s\r\n",pass);
printf("TCP服務器端口號:%d\r\n",port);
printf("TCP服務器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;
}
審核編輯:湯梓紅
-
物聯(lián)網(wǎng)
+關注
關注
2913文章
44923瀏覽量
377014 -
STM32F103
+關注
關注
33文章
479瀏覽量
63875 -
ESP8266
+關注
關注
50文章
962瀏覽量
45329 -
華為云
+關注
關注
3文章
2682瀏覽量
17586
發(fā)布評論請先 登錄
相關推薦
OneNET Studio云平臺STM32物聯(lián)網(wǎng)開發(fā)(1)- MQTT協(xié)議設備接入數(shù)據(jù)上報測試
![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'>設備</b>接入數(shù)據(jù)上報測試](https://file.elecfans.com//web2/M00/6C/4A/poYBAGMvN9WAMnqgAAAimNNt3IA828.png)
基于機智云平臺的物聯(lián)網(wǎng)實驗平臺設計
萬物互聯(lián)時代引領者—微物聯(lián)網(wǎng)云服務平臺
機智云(物聯(lián)網(wǎng)平臺)上新了
STM32F103C8T6連接阿里云物聯(lián)網(wǎng)平臺
阿里云物聯(lián)網(wǎng)平臺接入NodeMCU的方法
基于blinker物聯(lián)網(wǎng)平臺使用3D打印制作的一個澆花系統(tǒng)
NodeMCU開發(fā)板接入阿里云物聯(lián)網(wǎng)平臺和百度天工物聯(lián)網(wǎng)平臺的注意事項
基于STM32機智云平臺控制設備開關的相關資料推薦
【IoT開發(fā)】基于機智云物聯(lián)網(wǎng)的智能澆花教程
基于STM32的機智云平臺控制設備開關(物聯(lián)網(wǎng))
![基于<b class='flag-5'>STM32</b>的機智<b class='flag-5'>云</b><b class='flag-5'>平臺</b>控制<b class='flag-5'>設備</b>開關(<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【IoT開發(fā)】基于機智云物聯(lián)網(wǎng)的智能澆花教程
![【IoT開發(fā)】基于機智<b class='flag-5'>云</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>的智能<b class='flag-5'>澆花</b>教程](https://file.elecfans.com/web2/M00/53/45/pYYBAGLOdyyASWZKAAAn_pVuU80397.png)
嵌入式澆花神器拆解
![嵌入式<b class='flag-5'>澆花神器</b>拆解](https://file1.elecfans.com/web2/M00/04/88/wKgZombP2Z-AVTwXAADfkwCH-1Q492.jpg)
評論