1. 功能介紹
隨著全球氣候變化和人類活動的增加,森林火災成為了一個嚴重的環境問題。及早發現和迅速響應火災事件對于減少火災的損失至關重要。為了實現對森林火災的快速預警和聯動控制,決定利用華為云IoT物聯網平臺來搭建一個高效的系統模型。
該系統模型的目標是在檢測到森林火災后,能夠快速將火災信息上報到云平臺,并與指定的服務器進行數據報告的交互。同時,系統還能自動向抽水泵發送指令,打開開關以進行抽水滅火操作。通過這樣的聯動控制系統,可以實現快速響應和減少火災對森林和生態環境的破壞。
該系統模型的核心是華為云IoT物聯網平臺,它提供了豐富的功能和服務,包括設備接入、數據采集、消息通信、云端數據存儲和分析等。我們可以利用該平臺的能力來接收來自火災檢測設備的數據,并通過云端的數據分析和處理來實現火災預警和聯動控制。
當火災檢測設備檢測到火災時,會通過無線通信將火災信息發送到華為云IoT物聯網平臺。云平臺接收到信息后,會立即進行處理并將火災報告發送給指定的服務器。服務器可以根據報告中的信息采取相應的措施,如調度抽水泵進行滅火操作。
通過這個系統模型,可以實現對森林火災的快速預警和聯動控制,大大提高了火災應對的效率和準確性。同時,利用華為云IoT物聯網平臺的強大功能,可以靈活地擴展和定制系統,以適應不同規模和需求的森林火災防控工作。
硬件平臺介紹:
物聯網云平臺: 華為IOT云平臺
氣體檢測傳感器: MQ2-煙霧傳感器、MQ135-空氣質量檢測傳感器
火焰檢測: 采用火焰檢測傳感器
上網網卡: 采用GSM模塊SIM800C,使用的是物聯網專用卡,包年只能上網這種。
與云端服務器的通信協議: 終端設備采用MQTT3.1.1協議與華為云服務器進行登錄連接。
溫濕度檢測傳感器: DHT11
供電方式: 電池+太陽能供電
為了演示聯動控制,火警(煙霧)檢測裝置和滅火(直流電機)裝置分為兩個獨立的設備,分別連接上云端。
火警檢測裝置連接上物聯網服務器之后,可以在服務器上配置數據處理規則,如果煙霧濃度超標,可以自動向滅火裝置發送指令,進行滅火操作。服務器收到火警檢測裝置上傳的煙霧濃度、空氣質量等數據后,可以向自己的私有服務器轉發數據,方便自己服務器收到數據后做分析存儲處理,比如: 向指定郵箱發送郵件、手機APP推送通知欄、向指定用戶推送短消息提示等等。
2. 創建產品(火警預警裝置)
打開官網鏈接: https://www.huaweicloud.com/s/JeeJqeiBlOe9kSU
(1)選擇設備接入IotTDA選項。
(2)選擇免費試用。
(3)在產品頁面選擇創建新的產品。
(4)填入產品信息,創建產品
(5)選擇自己剛才創建的產品,創建數據模型,點擊自定義模型
(6)選擇添加屬性
這個添加的屬性就是設備端上報的數據類型。 比如: MQ2煙霧傳感器檢測的煙霧數據值類型。
在這個頁面上還有一個添加命令的功能,這是用于云端下發指令給設備端使用的。當前這個設備是火警檢測裝置,只需要上報數據給服務器,不需要下發指令,這里就只需要添加屬性就行了。
根據自己的設備的具體情況填寫即可,如果上報的數據有多種類型就創建多個屬性。
3. 創建產品(滅火裝置)
創建的流程和上面一樣,這是多增加了一個命令下發的功能,方便云端遠程控制電機開啟和關閉,實現滅火功能。
(1)創建產品
(2)產品創建完畢之后,添加服務器ID
(3)添加屬性,電機屬性是可以讀可以寫的,范圍設置為0和1,只能開關
(4)添加命令,這個命令用于云端遠程向設備下發指令,設備收到指令后可以做出相應的邏輯處理
接著選擇新增輸入參數:
最后點擊確定即可。
現在產品已經創建完畢。
4. 創建設備(火警預警裝置)
(1)在設備頁面,選擇注冊設備,選擇自己的對應的產品,設備標識碼一般填自己設備的硬件標號。
(2)設備創建成功之后會彈出彈窗,點擊保存并關閉,會自動彈出下載窗口,是個文本文件,存放了密匙信息
{
"device_id": "61bacdc02b2aa20288c5a094_QQ1126626497",
"secret": "1126626497"
}
5. 創建設備(滅火裝置)
流程與上面火警預警裝置設備一樣的。
{
"device_id": "61bad0564d9b020287193be2_QQ1126626497",
"secret": "1126626497"
}
6. 生成MQTT協議登錄ID和密匙
設備創建完成接來下生成MQTT登錄賬號、密匙,方便設備登錄云端平臺。
官網工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
填入剛才創建設備時,保存下載文件里的信息,對著彈窗填入,最后生成了ID、用戶名、密碼參數,用于MQTT協議登錄使用。
(1)火警預警裝置生成登錄參數
ClientId 61bacdc02b2aa20288c5a094_QQ1126626497_0_0_2021121605
Username 61bacdc02b2aa20288c5a094_QQ1126626497
Password 43ed43bcbddc48772694fc2b18ec1112170f4d6cc52fbf1e01401c2ea1748475
(2)滅火裝置
ClientId 61bad0564d9b020287193be2_QQ1126626497_0_0_2021121605
Username 61bad0564d9b020287193be2_QQ1126626497
Password 43ed43bcbddc48772694fc2b18ec1112170f4d6cc52fbf1e01401c2ea1748475
7. 上報屬性格式與主題訂閱格式
產品設備、MQTT登錄參數都到位了,接下來需要了解設備向服務器上報數據時,如何上報,格式是怎么樣的。
(1)第一個問題是:華為云IoT物聯網服務器的IP和端口號是多少?
在總覽選項頁面,點擊多協議接入選項,就能看到了。
如果選擇MQTT協議接入:
域名是: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
如果你的設備不能解析域名,也可以直接填IP地址 121.36.42.100
端口號: 1883
(2)第二個問題是:發布數據的主題和訂閱數據的主題怎么填?
在產品頁面,選擇自己的產品,進去之后就能看到主題的格式介紹頁面了。
為了方便后續復制粘貼,這里總結下格式:
火警預警裝置:
格式: $oc/devices/{device_id}/sys/messages/down
//訂閱主題: 平臺下發消息給設備
$oc/devices/61bacdc02b2aa20288c5a094_QQ1126626497/sys/messages/down
?
?
格式: $oc/devices/{device_id}/sys/properties/report
//設備上報數據
$oc/devices/61bacdc02b2aa20288c5a094_QQ1126626497/sys/properties/report
滅火裝置:
格式: $oc/devices/{device_id}/sys/messages/down
//訂閱主題: 平臺下發消息給設備
$oc/devices/61bad0564d9b020287193be2_QQ1126626497/sys/messages/down
?
?
格式: $oc/devices/{device_id}/sys/properties/report
//設備上報數據
$oc/devices/61bad0564d9b020287193be2_QQ1126626497/sys/properties/report
(3)第三個問題是:上報屬性時,數據格式是什么?
官方文檔介紹: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html
總結下格式: 上報的數據就是JSON格式,一次性可以上傳多個屬性數據,JSON數組里按照順序增加即可。
重要的字段含義解釋:這兩個字段后面的數據需要自己根據自己的設備產品去填充的。
service_id 示設備服務的ID。
?
properties 是設備服務的屬性列表,具體字段在設備關聯的產品模型中定義。
火警預警裝置上傳的數據:
{"services": [{"service_id": "MQ2","properties":{"MQ2":100}}]}
滅火裝置上傳的數據:
{"services": [{"service_id": "motor","properties":{"motor":1}}]}
8. 使用MQTT客戶端模擬設備測試
(1)登錄火警預警裝置
(2)滅火裝置登錄
可以看到,設備已經成功登錄服務器,完成了數據上報。這也證明服務器端設備創建已經全部OK,正常。
9. 配置設備聯動
(1)創建規則
(2)填寫規則信息
(3)添加觸發條件,選擇需要處理數據的設備,設置條件:當煙霧濃度大于等于100就觸發
(4)添加執行動作,當煙霧濃度超過100就下發指令給滅火裝置
(3)最后點擊創建規則,生效規則
(4)測試效果
使用兩個MQTT客戶端分別模擬火警預警裝置和滅火裝置,當煙霧濃度超過100時,查看滅火裝置是否收到云端下發的指令。
10. 數據轉發
如果數據需要轉發到其他地方,可以自己創建規則配置。
11. 硬件設備測試
設備端采用GSM模塊SIM800C完成上網功能,主控MCU采用STM32F103ZET6。
任意只要能上網的設備都可以使用當前代碼連接服務器,因為當前模擬的是戶外設備,只能采用GSM模塊上網。
如果是智能家居,屋里小區的設備,有WIFI的可以采用ESP8266這些無線網卡。
項目工程源碼: https://download.csdn.net/download/xiaolong1126626497/81993720
1. SIM800C.c
這是SIM800C的配置代碼
#include "sim800c.h"
?
/*
函數功能:向SIM800C模塊發送指令
函數參數:
char *cmd 發送的命令
char *check_data 檢測返回的數據
返回值: 0表示成功 1表示失敗
*/
u8 SIM800C_SendCmd(char *cmd,char *check_data)
{
u16 i,j;
for(i=0;i< 5;i++) //測試的總次數
{
USART2_RX_FLAG=0;
USART2_RX_CNT=0;
memset(USART2_RX_BUFF,0,sizeof(USART2_RX_BUFF));
USART_X_SendString(USART2,cmd); //發送指令
for(j=0;j< 500;j++) //等待的時間(ms單位)
{
if(USART2_RX_FLAG)
{
USART2_RX_BUFF[USART2_RX_CNT]='\\0';
if(strstr((char*)USART2_RX_BUFF,check_data))
{
return 0;
}
else break;
}
delay_ms(20); //一次的時間
}
}
return 1;
}
?
?
/*
函數 功能:GSM模塊初始化檢測
函數返回值:1表示模塊檢測失敗,0表示成功
*/
u8 SIM800C_InitCheck(void)
{
if(SIM800C_SendCmd("AT\\r\\n","OK"))return 1;
else printf("SIM800模塊正常!\\r\\n");
if(SIM800C_SendCmd("ATE0\\r\\n","OK"))return 2;
else printf("設置模塊不回顯成功!\\r\\n");
if(SIM800C_SendCmd("AT+CGMI\\r\\n","OK"))return 3;
else printf("查詢制造商名稱成功!%s\\r\\n",USART2_RX_BUFF);
if(SIM800C_SendCmd("AT+CGMM\\r\\n","OK"))return 4;
else printf("查詢模塊型號成功!%s\\r\\n",USART2_RX_BUFF);
DelayMs(1000);
DelayMs(1000);
if(SIM800C_SendCmd("AT+CNUM\\r\\n","+CNUM:"))return 5;
else printf("獲取本機號碼成功!%s\\r\\n",USART2_RX_BUFF);
/* 返回格式如下:
+CNUM: "","+8613086989413",145,7,4
OK
*/
return 0;
}
?
/*
函數 功能:GSM模塊短信模式設置
函數返回值:0表示模塊設置成功
*/
u8 SIM800C_SetNoteTextMode(void)
{
if(SIM800C_SendCmd("AT+CSCS="GSM"\\r\\n","OK"))return 1;// "GSM"字符集
else printf("短信GSM字符集設置成功!\\r\\n");
if(SIM800C_SendCmd("AT+CMGF=1\\r\\n","OK"))return 2; //文本模式
else printf("短信文本模式設置成功!\\r\\n");
return 0