1. 功能介紹
隨著物聯網技術的快速發展,智能家居控制系統成為了人們追求便捷、舒適和安全生活的重要組成部分。為了滿足用戶對智能家居的需求,設計了一款基于華為云物聯網平臺的智能家居控制系統,硬件采用了STM32和ESP8266的組合,實現了設備的上云連接。
傳統的家居控制系統存在一些不足,比如需要人工操作、無法實現遠程控制等。而我們的智能家居控制系統,通過與華為云物聯網平臺的連接,可以實現遠程控制各種電器開關,并且可以遠程收集家里煤氣、天然氣、煙霧、光照度、溫度濕度等信息,為用戶提供更加智能化和便捷的家居體驗。
智能家居控制系統具有以下主要特點和功能:
- 遠程控制:通過與華為云物聯網平臺的連接,用戶可以通過手機APP或者Web界面實現對家里各種電器開關的遠程控制。比如,可以遠程打開空調、關閉燈光等,無論身在何處都能夠實現對家居設備的控制。
- 多種傳感器數據采集:系統采用了多種傳感器,包括煤氣傳感器、天然氣傳感器、煙霧傳感器、光照度傳感器、溫濕度傳感器等,可以實時采集家里的環境信息。這些數據通過ESP8266模塊上傳到華為云物聯網平臺,用戶可以隨時查看家居環境的狀態。
- 安全監測:通過煤氣傳感器、天然氣傳感器和煙霧傳感器等,我們的系統可以實時監測家里的安全狀況。一旦檢測到異常情況,比如煤氣泄漏或者火災,系統會立即發送警報通知用戶,保障家庭安全。
- 智能化場景設置:基于華為云物聯網平臺的數據處理能力,智能家居控制系統可以實現智能化的場景設置。比如,用戶可以根據時間、溫度、濕度等條件,設置自動調節空調溫度,實現節能和舒適的效果。
硬件介紹:
主控MCU: STM32F103ZET6
煙霧檢測傳感器: MQ2
天然氣檢測傳感:MQ5
溫度濕度檢測傳感器: DHT11
光照強度檢測傳感器: BH1750
物聯網云平臺: 華為云物聯網平臺
電器開關模擬采用板載的LED燈、繼電器。
WIFI: ESP8266
這是支持串口AT指令控制的WIFI模塊,聯網比較方便。
與華為云物聯網平臺通信的協議: MQTT
說明: 當前程序里的MQTT協議代碼是參考MQTT官方文檔編寫的,不是使用ESP8266內置的,所以程序并不依賴ESP8266專用或者指定的SDK,使用任意可以上網的網卡都可以套用,并不是一定非要使用ESP8266。
2. 登錄華為云創建云端設備
2.1 創建產品
華為運官網: https://www.huaweicloud.com/
在這里可以查看接入的協議的端口號和地址。
MQTT (1883) a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
我們設備接入的協議選擇MQTT,端口對應是1883
接下來繼續創建產品,點擊產品頁面,點擊右上角創建產品:
2.2 創建設備
這是我的設備信息:
設備ID
61a580fad28ce3028832c2d8_esp8266_iot
?
設備密鑰
1126626497
{
"device_id": "61a580fad28ce3028832c2d8_esp8266_iot",
"secret": "1126626497"
}
2.3 產品模型定義
這一步就是設置上報設備的屬性,也就是設備的數據類型定義。
2.4 生成MQTT登錄密匙
創建完產品、設備之后,接下來就需要知道如何通過MQTT協議登陸華為云服務器。
MQTT設備登陸密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
下面就得到了MQTT協議設備登錄的參數。
2.5 使用MQTT客戶端軟件登錄
所有的參數已經得到,接下來采用MQTT客戶端登錄華為云進行測試。
下面這個軟件是自己開發的,為了方便測試MQTT協議登錄。
華為云物聯網平臺的域名是: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
華為云物聯網平臺的IP地址是: 121.36.42.100
在軟件里參數填充正確之后,就看到設備已經連接成功了。
接下來打開設備頁面,可以看到設備已經在線了。
2.6 上報數據
在這個文檔里介紹了MQTT上報數據的格式。
總結的格式:
//訂閱主題: 平臺下發消息給設備
$oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/messages/down
?
//設備上報數據
$oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/properties/report
?
//上報的屬性消息 (一次可以上報多個屬性,在json里增加就行了)
{"services": [{"service_id": "dht11","properties":{"DHT11-C":50}}]}
下面采用MQTT軟件上報數據:
到此,設備數據已經上報成功,如果需要增加更多的屬性,按照流程繼續增加即可。
3. STM32+ESP8266上報數據到華為云
項目源碼下載: https://download.csdn.net/download/xiaolong1126626497/81993720
3.1 硬件設備效果圖
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(); //發送起始信號
IIC_WriteOneByteData(0x46);
r_s=IIC_GetACK();//獲取應答
if(r_s)printf("error:1\\r\\n");
IIC_WriteOneByteData(0x01);
r_s=IIC_GetACK();//獲取應答
if(r_s)printf("error:2\\r\\n");
IIC_Stop(); //停止信號
IIC_Start(); //發送起始信號
IIC_WriteOneByteData(0x46);
r_s=IIC_GetACK();//獲取應答
if(r_s)printf("error:3\\r\\n");
IIC_WriteOneByteData(0x01);
r_s=IIC_GetACK();//獲取應答
if(r_s)printf("error:4\\r\\n");
IIC_Stop(); //停止信號
IIC_Start(); //發送起始信號
IIC_WriteOneByteData(0x46);
r_s=IIC_GetACK();//獲取應答
if(r_s)printf("error:5\\r\\n");
IIC_WriteOneByteData(0x10);
r_s=IIC_GetACK();//獲取應答
if(r_s)printf("error:6\\r\\n");
IIC_Stop(); //停止信號
DelayMs(300); //等待
IIC_Start(); //發送起始信號
IIC_WriteOneByteData(0x47);
r_s=IIC_GetACK();//獲取應答
if(r_s)printf("error:7\\r\\n");
t0=IIC_ReadOneByteData(); //接收數據
IIC_SendACK(0); //發送應答信號
t1=IIC_ReadOneByteData(); //接收數據
IIC_SendACK(1); //發送非應答信號
IIC_Stop(); //停止信號
t=(((t0< 8)|t1)/1.2);
return t;
}