1. 前言
隨著物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,越來越多的家庭開始關(guān)注環(huán)境監(jiān)測和遠程控制的需求。為了滿足這一需求,設(shè)計了一款基于華為云IOT的物聯(lián)網(wǎng)環(huán)境監(jiān)測系統(tǒng)。
該系統(tǒng)實現(xiàn)對家庭環(huán)境中的光照強度、溫濕度等信息的實時監(jiān)測,并通過云端實現(xiàn)遠程查看和控制家里的電器設(shè)備。通過使用ESP8266 Wi-Fi模塊,能夠?qū)?a href="http://ttokpm.com/v/tag/117/" target="_blank">傳感器獲取的數(shù)據(jù)通過無線網(wǎng)絡(luò)傳輸?shù)皆贫?,實現(xiàn)遠程數(shù)據(jù)傳輸和控制。
華為云IOT物聯(lián)網(wǎng)云平臺作為基礎(chǔ)設(shè)施,提供了豐富的功能和接口,能夠幫助我們輕松構(gòu)建物聯(lián)網(wǎng)應用。使用MQTT傳輸協(xié)議與華為云IOT平臺進行通信,通過調(diào)用其提供的接口,能夠?qū)崟r獲取傳感器數(shù)據(jù),并將其顯示在上位機界面上。
在該系統(tǒng)中,主要目標是實時監(jiān)測家庭環(huán)境的光照強度、溫濕度等信息,并將相關(guān)信息和設(shè)備狀態(tài)實時顯示在上位機界面上。通過遠程控制功能,用戶可以在任何地方使用手機或電腦遠程控制家里的電器設(shè)備,例如燈光、空調(diào)等,從而實現(xiàn)智能化的家居控制。
通過該物聯(lián)網(wǎng)環(huán)境監(jiān)測系統(tǒng),用戶可以隨時隨地監(jiān)測家庭環(huán)境的狀態(tài),了解光照強度、溫濕度等信息,從而做出相應的調(diào)整。同時,用戶可以通過遠程控制功能,實現(xiàn)對家里電器設(shè)備的遠程控制,提高家居的舒適度和便利性。
2. 具體需求
該項目設(shè)計一個基于華為云IOT的物聯(lián)網(wǎng)環(huán)境監(jiān)測系統(tǒng),實現(xiàn)對光照強度、溫濕度等信息的實時監(jiān)測,并將相關(guān)信息、設(shè)備狀態(tài)信息等實時顯示。通過ESP8266 Wi-Fi模塊進行聯(lián)網(wǎng),實現(xiàn)遠程數(shù)據(jù)傳輸和遠程控制顯示。
硬件選項要求如下:
- ESP8266串口WIFI模塊:用于與華為云IOT平臺進行遠程通信,將傳感器數(shù)據(jù)上傳到云端,并接收云端的控制指令。
- DHT11溫度傳感器:用于檢測本地環(huán)境的溫度和濕度信息,通過ESP8266模塊將數(shù)據(jù)上傳到云端。
- 繼電器:用于模擬控制家里的電器設(shè)備,通過ESP8266模塊接收云端的控制指令,實現(xiàn)遠程控制家用電器的開關(guān)。
- BH1750光敏傳感器:用于檢測環(huán)境的光強度,通過ESP8266模塊將光照強度數(shù)據(jù)上傳到云端。
- MQ135空氣質(zhì)量傳感器:用于檢測可燃氣體、煙霧濃度等環(huán)境參數(shù),實現(xiàn)火警預警功能。
- OLED顯示屏:用于本地顯示傳感器的參數(shù)情況,實時展示溫度、濕度、光照強度等信息。
軟件要求如下:
- 使用華為云IOT物聯(lián)網(wǎng)云平臺:通過MQTT傳輸協(xié)議,實現(xiàn)與ESP8266模塊的通信,接收傳感器數(shù)據(jù)并將其存儲在云端。
- 設(shè)計上位機界面:通過調(diào)用華為云IOT平臺提供的接口,實時顯示光照強度、溫濕度等信息,以及設(shè)備狀態(tài)信息。
- 遠程控制功能:在上位機界面上實現(xiàn)遠程控制家里電器設(shè)備的開關(guān),通過華為云IOT平臺向ESP8266模塊發(fā)送控制指令。
項目要求設(shè)計一個物聯(lián)網(wǎng)環(huán)境監(jiān)測系統(tǒng),通過ESP8266 Wi-Fi模塊實現(xiàn)傳感器數(shù)據(jù)的采集和聯(lián)網(wǎng)傳輸,利用華為云IOT物聯(lián)網(wǎng)云平臺實現(xiàn)數(shù)據(jù)存儲和遠程控制功能。通過上位機界面實時顯示光照強度、溫濕度等信息,并實現(xiàn)遠程控制家用電器設(shè)備的開關(guān)。同時,使用DHT11溫度傳感器、BH1750光敏傳感器、MQ135空氣質(zhì)量傳感器和OLED顯示屏等硬件組件來實現(xiàn)各項功能。
3. 硬件選型
3.1 繼電器
3.2 ESP8266 WIFI
(1)模塊采用串口(LVTTL)與MCU(或其他串口設(shè)備)通信,內(nèi)置TCP/IP協(xié)議棧,能夠?qū)崿F(xiàn)串口與WIFI之間的轉(zhuǎn)換 (2)模塊支持LVTTL串口,兼容3.3V和5V單片機系統(tǒng) (3)模塊支持串口轉(zhuǎn)WIFI STA、串口轉(zhuǎn)AP和WIFI STA+WIFIAP的模式,從而快速構(gòu)建串口-WIFI數(shù)據(jù)傳輸方案
3.3 MQ-135空氣質(zhì)量傳感器
MQ135傳感器對氨氣、硫化物、苯系蒸汽的靈敏度高,對煙霧和其它有害的監(jiān)測也很理想。這種傳感器可檢測多種有害氣體,是一款適合多種應用的低成本傳感器。
3.4 DHT11溫濕度傳感器
DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器。它應用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有可靠性與卓越的長期穩(wěn)定性,成本低、相對濕度和溫度測量、快響應、抗干擾能力強、信號傳輸距離長、數(shù)字信號輸出、精確校準。傳感器包括一個電容式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。可用于暖通空調(diào)、除濕器、測試及檢測設(shè)備、消費品、汽車、自動控制、數(shù)據(jù)記錄器、氣象站、家電、濕度調(diào)節(jié)器、醫(yī)療、其他相關(guān)濕度檢測控制。
特點如下:
1、可以檢測周圍環(huán)境的濕度
2、可以檢測周圍環(huán)境的溫度
3、濕度測量范圍:20%-95%(0度-50度范圍)濕度測量誤差:+-5%4、溫度測量范圍:o度-50度溫度測量誤差:+-2度
4、工作電壓3.3V-5V
5、輸出形式數(shù)字輸出
3.5 STM32系統(tǒng)板
主控CPU采用STM32F103RCT6,這顆芯片包括48 KB SRAM、256 KB Flash、2個基本定時器、4個通用定時器、2個高級定時器、51個通用IO口、5個串口、2個DMA控制器、3個SPI、2個I2C、1個USB、1個CAN、3個12位ADC、1個12位DAC、1個SDIO接口,芯片屬于大容量類型,配置較高,整體符合硬件選型設(shè)計。當前選擇的這款開發(fā)板自帶了一個1.4寸的TFT-LCD彩屏,可以顯示當前傳感器數(shù)據(jù)以及一些運行狀態(tài)信息。
3.6 OLED顯示屏
特點:
OLED是有機發(fā)光二極管又稱為有機激光顯示、OLED顯示技術(shù)具有自發(fā)光的特性、采用非常薄的有機材料涂層、和玻璃基板、當有電流通過時、這些有機材料就會發(fā)光、而且OLED顯示屏幕可視角大、功耗低、OLED由于同時具備自發(fā)光、不需背光源(只是供電不會亮的、驅(qū)動程序和接線正確才會點亮)對比度高、厚度薄視角廣、反應速度快、可用于撓曲面板、使用溫度范圍廣、結(jié)構(gòu)及制程等優(yōu)異之特性、先接觸的1286屏都是LCD的、需要背光、功耗較高、而OLED的功耗低、更加適合小系統(tǒng)、由于兩者發(fā)光材料的不同、在不同的環(huán)境中、OLED的顯示效果好、模塊供電可以是3.3v也可以是5V、不需要修改模塊電路、OLED屏具有多個控制指令、可以控制oLED的亮度、對比度、開關(guān)升壓電路等指令、操作方便、功能豐富、可顯示漢字、ASCH、圖案等、同時為了方便應用在產(chǎn)品上、預留4個M3固定孔、方便用戶固在機殼上。
3.7 母對母杜邦線
3.8 BH1750光敏傳感器
4. 登錄華為云創(chuàng)建云端設(shè)備
4.1 創(chuàng)建產(chǎn)品
華為運官網(wǎng): https://www.huaweicloud.com/
在這里可以查看接入的協(xié)議的端口號和地址。
MQTT (1883) a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
我們設(shè)備接入的協(xié)議選擇MQTT,端口對應是1883
接下來繼續(xù)創(chuàng)建產(chǎn)品,點擊產(chǎn)品頁面,點擊右上角創(chuàng)建產(chǎn)品:
4.2 創(chuàng)建設(shè)備
這是我的設(shè)備信息:
設(shè)備ID
61a580fad28ce3028832c2d8_esp8266_iot
?
設(shè)備密鑰
1126626497
{
"device_id": "61a580fad28ce3028832c2d8_esp8266_iot",
"secret": "1126626497"
}
4.3 產(chǎn)品模型定義
這一步就是設(shè)置上報設(shè)備的屬性,也就是設(shè)備的數(shù)據(jù)類型定義。
4.4 生成MQTT登錄密匙
創(chuàng)建完產(chǎn)品、設(shè)備之后,接下來就需要知道如何通過MQTT協(xié)議登陸華為云服務(wù)器。
MQTT設(shè)備登陸密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
下面就得到了MQTT協(xié)議設(shè)備登錄的參數(shù)。
4.5 使用MQTT客戶端軟件登錄
所有的參數(shù)已經(jīng)得到,接下來采用MQTT客戶端登錄華為云進行測試。
下面這個軟件是自己開發(fā)的,為了方便測試MQTT協(xié)議登錄。
華為云物聯(lián)網(wǎng)平臺的域名是: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
華為云物聯(lián)網(wǎng)平臺的IP地址是: 121.36.42.100
在軟件里參數(shù)填充正確之后,就看到設(shè)備已經(jīng)連接成功了。
接下來打開設(shè)備頁面,可以看到設(shè)備已經(jīng)在線了。
4.6 上報數(shù)據(jù)
在這個文檔里介紹了MQTT上報數(shù)據(jù)的格式。
總結(jié)的格式:
//訂閱主題: 平臺下發(fā)消息給設(shè)備
$oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/messages/down
?
//設(shè)備上報數(shù)據(jù)
$oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/properties/report
?
//上報的屬性消息 (一次可以上報多個屬性,在json里增加就行了)
{"services": [{"service_id": "dht11","properties":{"DHT11-C":50}}]}
下面采用MQTT軟件上報數(shù)據(jù):
到此,設(shè)備數(shù)據(jù)已經(jīng)上報成功,如果需要增加更多的屬性,按照流程繼續(xù)增加即可。
5. STM32設(shè)備端代碼
STM32連接華為云IOT的工程代碼Get: https://download.csdn.net/download/xiaolong1126626497/81993720
串口上會輸出當前程序運行的狀態(tài)信息,可以打開串口調(diào)試助手查看。
5.1 LCD漢字取模
LCD上需要顯示漢字,使用點陣字模取模軟件進行取模。
5.2 硬件連線
1. ESP8266 WIFI接線
ATK-ESP8266串口WIFI模塊與STM32的串口2相連接。
PA2(TX)--RXD 模塊接收腳
PA3(RX)--TXD 模塊發(fā)送腳
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)
?
2. TFT 1.44 寸彩屏接線
GND 電源地
VCC 接5V或3.3v電源
SCL 接PC8(SCL)
SDA 接PC9(SDA)
RST 接PC10
DC 接PB7
CS 接PB8
BL 接PB11
?
3. DHT11 溫濕度
VCC--VCC
GND---GND
DAT---PA5
?
4. LED燈-模擬房間的照明燈
VCC--- >5V
DAT--- >PB12
GND--- >GND
?
5. 智能窗簾-模擬家里的窗簾
VCC--- >5V
DAT--- >PB13
GND--- >GND
?
6. MQ135空氣質(zhì)量檢測傳感器
VCC--- >5V
GND--- >GND
DAT--- >PA1
?
7. BH1750環(huán)境光檢測模塊:
SDA-----PB5
SCL-----PB6
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)
?
8. 板載LED燈接線
LED1---PA8
LED2---PD2
?
9. 板載按鍵接線
K0---PA0
K1---PC5
K2---PA15
5.2 keil工程布局
工程Get地址: https://download.csdn.net/download/xiaolong1126626497/81993720
5.3 main.c代碼
MQTT協(xié)議連接華為云IOT源碼工程參考: https://download.csdn.net/download/xiaolong1126626497/81993720
#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 "motor.h"
#include "oled.h"
#include "dht11.h"
#include "adc.h"
#include < string.h >
#include < stdlib.h >
#include "font.h"
#include "mqtt.h"
#include "iic.h"
#include "bh1750.h"
?
/*
?
(1)ESP8266 串口WIFI,用來與華為云IOT進行遠程通信。
?
(2)DHT11 溫度傳感器,檢測本地環(huán)境的溫度濕度信息。
?
(3)繼電器,來模擬控制家里的電器。
?
(4)BH1750 光敏傳感器,檢測環(huán)境光強度
?
(5)MQ135 空氣質(zhì)量傳感器??梢詸z測可燃氣體、煙霧濃度,實現(xiàn)火警預警。
?
(6)OLED顯示屏顯示本地的傳感器的參數(shù)情況,實時展示
?
*/
?
?
//華為物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息
#define MQTT_ClientID "61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510"
#define MQTT_UserName "61b9ba3a2b2aa20288c1e7f1_QQ1126626497"
#define MQTT_PassWord "385ce91dfe7da5b7431868d5d87e7998163c493344040935d5a00024d6324242"
?
//訂閱與發(fā)布的主題
#define SET_TOPIC "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down" //訂閱
#define POST_TOPIC "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report" //發(fā)布
?
?
//設(shè)置連接的路由器信息
#define CONNECT_WIFI "Xiaomi_meizi6" //將要連接的路由器名稱 --不要出現(xiàn)中文、空格等特殊字符
#define CONNECT_PASS "12170307yu" //將要連接的路由器密碼
?
#define CONNECT_SERVER_IP "121.36.42.100" //服務(wù)器IP地址
#define CONNECT_SERVER_PORT 1883 //服務(wù)器端口號
?
//JTAG模式設(shè)置,用于設(shè)置JTAG的模式
//mode:jtag,swd模式設(shè)置;00,全使能;01,使能SWD;10,全關(guān)閉;
#define JTAG_SWD_DISABLE 0X02
#define SWD_ENABLE 0X01
#define JTAG_SWD_ENABLE 0X00
void JTAG_Set(u8 mode)
{
u32 temp;
temp=mode;
temp< <=25;
RCC- >APB2ENR|=1< 0; //開啟輔助時鐘
AFIO- >MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
AFIO- >MAPR|=temp; //設(shè)置jtag模式
}
?
?
u8 motor_flag=0; //窗簾的狀態(tài) 0表示關(guān)閉 1表示打開
u8 led_flag=0; //房間照明燈狀態(tài) 0表示關(guān)閉 1表示打開
u16 MQ135_data=0; //MQ135煙霧傳感器的值
u8 DHT11_T=0; //環(huán)境溫度
u8 DHT11_H=0; //環(huán)境濕度
u8 BH1750_data=0; //環(huán)境光照強度
?
char request_id[100];
char mqtt_message[100];
?
//WIFI發(fā)送數(shù)據(jù)存儲區(qū)域
char data_buff[300];
?
int main()
{
u8 esp8266_state=0;
u8 key;
u8 i;
u32 time_cnt=0;
u32 timer_hour_cnt=0; //記錄定時的時間
JTAG_Set(JTAG_SWD_DISABLE); //釋放PA15
LED_Init();
KEY_Init();
USART1_Init(115200);
Moto_Init(); //風扇、加熱棒初始化
USART2_Init(115200);//串口-WIFI
TIMER2_Init(72,20000); //超時時間20ms
DHT11_Init(); //初始化DHT11
Lcd_Init(); //LCD初始化
Lcd_Clear(0); //清屏為黑色
LCD_LED_SET;//通過IO控制背光亮
AdcInit(); //ADC初始化--檢測MQ2煙霧傳感器的數(shù)據(jù)
IIC_Init();
printf("正在初始化WIFI請稍等.rn");
for(i=0;i< 5;i++)
{
if(ESP8266_Init()==0)
{
esp8266_state=1;
break;
}
else
{
esp8266_state=0;
printf("ESP8266硬件檢測錯誤.n");
}
}
if(esp8266_state)
{
printf("準備連接服務(wù)器....rn");
//非加密端口
printf("WIFI:%dn",ESP8266_STA_TCP_Client_Mode(CONNECT_WIFI,CONNECT_PASS,CONNECT_SERVER_IP,CONNECT_SERVER_PORT,1));
//2. MQTT協(xié)議初始化
MQTT_Init();
?
//3. 連接服務(wù)器
for(i=0;i< 5;i++)
{
if(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord)==0)
{
esp8266_state=1;
break;
}
esp8266_state=0;
printf("服務(wù)器連接失敗,正在重試...n");
delay_ms(500);
}
printf("服務(wù)器連接成功.n");
?
//3. 訂閱主題
if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
{
printf("主題訂閱失敗.n");
}
else
{
printf("主題訂閱成功.n");
}
}
//環(huán)境溫度
LCD_ShowChineseFont(0,0,16,HZ_FONT_16[0],RED,0);
LCD_ShowChineseFont(16*1,0,16,HZ_FONT_16[1],RED,0);
LCD_ShowChineseFont(16*2,0,16,HZ_FONT_16[2],RED,0);
LCD_ShowChineseFont(16*3,0,16,HZ_FONT_16[3],RED,0);
//環(huán)境濕度
LCD_ShowChineseFont(0,16*1,16,HZ_FONT_16[4],RED,0);
LCD_ShowChineseFont(16*1,16*1,16,HZ_FONT_16[5],RED,0);
LCD_ShowChineseFont(16*2,16*1,16,HZ_FONT_16[6],RED,0);
LCD_ShowChineseFont(16*3,16*1,16,HZ_FONT_16[7],RED,0);
//光照強度
LCD_ShowChineseFont(0,16*2,16,HZ_FONT_16[8],RED,0);
LCD_ShowChineseFont(16,16*2,16,HZ_FONT_16[9],RED,0);
LCD_ShowChineseFont(16*2,16*2,16,HZ_FONT_16[10],RED,0);
LCD_ShowChineseFont(16*3,16*2,16,HZ_FONT_16[11],RED,0);
//空氣質(zhì)量
LCD_ShowChineseFont(0,16*3,16,HZ_FONT_16[12],RED,0);
LCD_ShowChineseFont(16,16*3,16,HZ_FONT_16[13],RED,0);
LCD_ShowChineseFont(16*2,16*3,16,HZ_FONT_16[14],RED,0);
LCD_ShowChineseFont(16*3,16*3,16,HZ_FONT_16[15],RED,0);
//智能照明
LCD_ShowChineseFont(0,16*4,16,HZ_FONT_16[16],RED,0);
LCD_ShowChineseFont(16,16*4,16,HZ_FONT_16[17],RED,0);
LCD_ShowChineseFont(16*2,16*4,16,HZ_FONT_16[18],RED,0);
LCD_ShowChineseFont(16*3,16*4,16,HZ_FONT_16[19],RED,0);
//智能窗簾
LCD_ShowChineseFont(0,16*5,16,HZ_FONT_16[20],RED,0);
LCD_ShowChineseFont(16,16*5,16,HZ_FONT_16[21],RED,0);
LCD_ShowChineseFont(16*2,16*5,16,HZ_FONT_16[22],RED,0);
LCD_ShowChineseFont(16*3,16*5,16,HZ_FONT_16[23],RED,0);
while(1)
{
//按鍵可以手動控制開啟窗簾和LED燈
key=KEY_Scan();
if(key)printf("key=%drn",key);
//控制LED燈
if(key==2)
{
led_flag=!led_flag;
if(led_flag)
{
LED_OUT=1;
}
else
{
LED_OUT=0;
}
}
//控制繼電器
if(key==1)
{
motor_flag=!motor_flag;
if(motor_flag)
{
MOTOR_OUT=1;
}
else
{
MOTOR_OUT=0;
}
}
//輪詢時間到達
if(time_cnt >=100)
{
time_cnt=0;
LED1=!LED1;
//讀取光強度
BH1750_data=Read_BH1750_Data();
printf("環(huán)境光強度:%drn",BH1750_data);
//獲取環(huán)境溫濕度
if(DHT11_Read_Data(&DHT11_T,&DHT11_H))
{
printf("溫度讀取失敗.rn");
}
printf("環(huán)境溫度:%drn環(huán)境濕度:%drn",DHT11_T,DHT11_H);
//獲取空氣質(zhì)量
MQ135_data=GetAdcCHxDATA(1);
printf("空氣質(zhì)量:%drn",MQ135_data);
//LCD屏實時顯示溫濕度、空氣質(zhì)量,系統(tǒng)工作狀態(tài)等等。
//環(huán)境溫度
sprintf(data_buff,"%d",DHT11_T);
Gui_DrawFont_GBK16(72,16*0,RED,0,(u8*)data_buff);
//環(huán)境濕度
sprintf(data_buff,"%d",DHT11_H);
Gui_DrawFont_GBK16(72,16*1,RED,0,(u8*)" ");
Gui_DrawFont_GBK16(72,16*1,RED,0,(u8*)data_buff);
//環(huán)境光強度
sprintf(data_buff,"%d",BH1750_data);
Gui_DrawFont_GBK16(72,16*2,RED,0,(u8*)" ");
Gui_DrawFont_GBK16(72,16*2,RED,0,(u8*)data_buff);
//空氣質(zhì)量
sprintf(data_buff,"%d",MQ135_data);
Gui_DrawFont_GBK16(72,16*3,RED,0,(u8*)" ");
Gui_DrawFont_GBK16(72,16*3,RED,0,(u8*)data_buff);
//智能照明
sprintf(data_buff,"%d",led_flag);
Gui_DrawFont_GBK16(72,16*4,RED,0,(u8*)" ");
Gui_DrawFont_GBK16(72,16*4,RED,0,(u8*)data_buff);
?
//智能窗簾
sprintf(data_buff,"%d",motor_flag);
Gui_DrawFont_GBK16(72,16*5,RED,0,(u8*)" ");
Gui_DrawFont_GBK16(72,16*5,RED,0,(u8*)data_buff);
?
//上報數(shù)據(jù)
sprintf(data_buff,"{"services":{"BH1750":[{"v":%d}],"DHT11_H":[{"v":%d}],"DHT11_T":[{"v":%d}],"MQ135":[{"v":%d}],"motor":[{"v":%d}],"LED":[{"v":%d}]}}",
BH1750_data,DHT11_H,DHT11_T,MQ135_data,motor_flag,led_flag);
MQTT_PublishData(POST_TOPIC,data_buff,0);
printf("更新數(shù)據(jù).rn");
}
// 接收WIFI返回的數(shù)據(jù)
if(USART2_RX_FLAG)
{
USART2_RX_BUFFER[USART2_RX_CNT]='?';
printf("WIFI收到數(shù)據(jù):rn");
//向串口打印服務(wù)器返回的數(shù)據(jù)
for(i=0;i< USART2_RX_CNT;i++)
{
printf("%c",USART2_RX_BUFFER[i]);
}
/*
LED_ON 智能照明燈打開
LED_OFF 智能照明燈關(guān)閉
MOTOR_ON 智能窗簾打開
MOTOR_OFF 智能窗簾關(guān)閉
*/
//如果是下發(fā)了屬性
if(USART2_RX_CNT >5)
{
//向服務(wù)器應答
if(strstr((char*)&USART2_RX_BUFFER[5],"cmd/request/"))
{
char *p=NULL;
p=strstr((char*)&USART2_RX_BUFFER[5],"cmd/request/");
if(p)
{
//解析數(shù)據(jù)
strncpy(request_id,p+12,36);
}
//上報給服務(wù)器的數(shù)據(jù)
sprintf(mqtt_message,"success");
//應答主題
sprintf(data_buff,"$sys/501579/dev1/cmd/response/%s",request_id);
MQTT_PublishData(data_buff,mqtt_message,0);
printf("發(fā)布主題:%srn",data_buff);
printf("發(fā)布數(shù)據(jù):%srn",mqtt_message);
}
//LED:0 LED:1 MOTOR:0 MOTOR:1
//開燈
if(strstr((char*)&USART2_RX_BUFFER[5],"LED:0"))
{
LED_OUT=0;
led_flag=0;
}
//關(guān)燈
else if(strstr((char*)&USART2_RX_BUFFER[5],"LED:1"))
{
LED_OUT=1;
led_flag=1;
}
//開窗簾
else if(strstr((char*)&USART2_RX_BUFFER[5],"MOTOR:0"))
{
MOTOR_OUT=0;
motor_flag=0;
}
//關(guān)窗簾
else if(strstr((char*)&USART2_RX_BUFFER[5],"MOTOR:1"))
{
MOTOR_OUT=1;
motor_flag=1;
}
}
USART2_RX_CNT=0;
USART2_RX_FLAG=0;
}
DelayMs(10);
time_cnt++;
timer_hour_cnt++;
}
}
審核編輯:湯梓紅
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2900文章
44067瀏覽量
370257 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354300 -
監(jiān)測系統(tǒng)
+關(guān)注
關(guān)注
8文章
2657瀏覽量
81216 -
IOT
+關(guān)注
關(guān)注
186文章
4162瀏覽量
195979 -
華為云
+關(guān)注
關(guān)注
3文章
2391瀏覽量
17247
發(fā)布評論請先 登錄
相關(guān)推薦
評論