[TOC]
一、前言
1.1 項目介紹
【1】項目開發背景
森林火災是全球范圍內頻繁發生的自然災害之一,不僅對生態環境造成嚴重破壞,還可能威脅到人類的生命財產安全。傳統的森林防火措施主要依賴人工巡邏和地面觀測站,這種方式效率低下,且在森林中難以實現全面覆蓋。隨著物聯網技術的發展,智能監測系統逐漸成為預防森林火災的有效手段。基于此背景,設計了一款基于STM32F103RCT6的森林火災監測系統,通過現代傳感技術和無線通訊技術提高森林火災預警的及時性和準確性。
該系統集成了多種傳感器,包括用于檢測環境溫度和濕度的SHT30傳感器、能夠識別火焰的火光檢測傳感器以及用于監測煙霧濃度的MQ2氣體傳感器。這些傳感器可以實時收集環境數據,一旦檢測到異常情況如溫度驟升、煙霧濃度增加或出現火焰等,將立即啟動蜂鳴器發出警報,同時通過Air724UG-4G模塊將數據上傳至華為云IOT物聯網服務器。這一過程不僅實現了對森林火災的快速響應,也為后續的救援工作提供了準確的信息支持。
為了便于森林管理員無論身處何地都能及時接收到火災報警信息,本項目還特別開發了適用于Android手機和平板電腦的應用程序及Windows上位機軟件,用戶可以通過這些客戶端實時查看由監測點上傳的數據,了解各監測區域的環境狀況。此外,考慮到森林地區的特殊地理條件,系統設計時充分考慮了能源供應的問題,采用了太陽能充電方案,確保監測系統能夠在遠離電網的野外長期穩定運行。
綜上所述,本項目構建一個高效、可靠、易于管理的森林火災監測平臺,通過集成先進的傳感技術和網絡通信技術,為森林防火提供了一種新的解決方案,有助于提升森林防火工作的智能化水平,減少森林火災造成的損失。
【2】設計實現的功能
(1) 環境溫濕度監測 :通過SHT30傳感器實時檢測森林內的環境溫度和濕度,并將數據發送給主控芯片STM32F103RCT6進行處理。
(2) 火焰檢測 :使用火光檢測傳感器監控森林區域內是否有火焰出現,一旦發現火焰,立即將信號傳遞給主控芯片,作為火災預警的一部分。
(3) 煙霧濃度監測 :利用MQ2氣體傳感器檢測空氣中的煙霧濃度,當煙霧濃度超過預設閾值時,向主控芯片發送警報信號。
(4) 自動報警功能 :當系統檢測到火焰或煙霧濃度超標時,會自動激活有源蜂鳴器發出聲音警報,提醒現場人員注意安全并采取相應措施。
(5) 數據遠程傳輸 :通過Air724UG-4G模塊,采用MQTT協議將采集到的環境參數和報警信息上傳至華為云IOT物聯網服務器,實現數據的遠程監控和管理。
(6) 移動設備實時監控 :開發了專門的Android手機APP和Windows上位機軟件,森林管理員可以通過這些客戶端實時查看監測點上傳的數據,包括溫度、濕度、煙霧濃度等信息,以及接收火災報警通知。
(7) OLED顯示屏本地顯示 :在監測站點安裝0.96寸SPI接口OLED顯示屏,用于實時顯示環境參數和系統狀態,方便護林員現場檢查設備工作情況和傳感器讀數是否正常。
(8) 太陽能充電支持 :為了解決森林地區供電不便的問題,系統配備了太陽能充電裝置,確保即使在偏遠無電源的情況下也能持續運行。
【3】項目硬件模塊組成
(1) 主控模塊 :選用STM32F103RCT6作為系統的主控芯片,負責協調各個傳感器的工作、處理數據、控制報警以及與4G模塊進行數據交換。
(2) 環境溫濕度傳感器模塊 :采用SHT30數字溫濕度傳感器,用于精確測量環境中的溫度和濕度,并將數據傳輸給主控芯片進行處理。
(3) 火焰檢測模塊 :使用火焰傳感器來檢測是否有明火出現,一旦檢測到火焰,立即將信號反饋給主控芯片,作為火災預警的重要依據。
(4) 煙霧濃度檢測模塊 :通過MQ2氣體傳感器監測空氣中煙霧的濃度,當煙霧濃度達到一定閾值時,觸發報警機制。
(5) 報警模塊 :采用高電平觸發的有源蜂鳴器,當系統檢測到火災風險時,蜂鳴器將自動發出警報聲,提醒周邊人員注意安全。
(6) 數據傳輸模塊 :利用Air724UG-4G模塊,結合MQTT協議,將采集到的數據上傳至華為云IOT物聯網服務器,實現遠程監控和管理。
(7) 本地數據顯示模塊 :配備0.96寸SPI接口的OLED顯示屏,用于實時顯示環境參數(如溫度、濕度、煙霧濃度等)和系統狀態,便于現場工作人員快速了解設備運行情況。
(8) 太陽能充電模塊 :設計了太陽能充電系統,包括太陽能電池板、充電控制器和蓄電池,以解決森林內無固定電源供應的問題,保證監測系統長時間穩定運行。
(9) 外部電源模塊 :為了確保系統的可靠性,在太陽能充電模塊之外,還提供了5V 2A的外置電源供電選項,可以在需要時為系統提供電力支持。
【4】研究背景與意義
森林火災是全球面臨的一大環境挑戰,不僅會導致嚴重的生態破壞,還會造成巨大的經濟損失和人員傷亡。傳統的森林防火措施多依賴于人工巡邏和定點監測,這種模式效率低下,覆蓋范圍有限,難以及時發現和應對突發火災。近年來,隨著物聯網、大數據、云計算等技術的迅速發展,智能監測系統開始應用于森林防火領域,極大地提高了火災預警的準確性和響應速度。基于此背景,本項目提出了一套基于STM32F103RCT6的森林火災監測系統,旨在通過集成先進的傳感器技術和無線通信技術,構建一個高效、可靠的火災預警平臺。
本項目的設計實現了對森林環境中溫度、濕度、煙霧濃度和火焰等關鍵參數的實時監測,并通過4G網絡將數據上傳至云端,利用華為云IOT平臺進行數據分析和處理。當監測到異常情況時,系統能夠自動觸發警報,并通過移動應用和上位機軟件將警報信息推送給森林管理員,確保他們能夠第一時間了解火災情況并采取相應的應急措施。此外,系統還支持太陽能充電,解決了森林內部署監測設備時面臨的供電難題,保證了系統的長期穩定運行。
研究的意義在于,本項目不僅為森林防火提供了一種新的解決方案,還促進了物聯網技術在環境保護領域的應用和發展。通過精準監測和及時預警,可以有效降低森林火災的發生率,減少火災造成的生態破壞和經濟損失,保護人民生命財產安全。同時,該項目的成功實施也將為其他類似應用場景提供參考,推動智慧林業的發展,助力實現可持續發展目標。
1.2 設計思路
在設計基于STM32F103RCT6的森林火災監測系統時,首先明確了系統的主要目標:實現對森林環境中溫度、濕度、煙霧濃度和火焰的實時監測,并能夠及時發出警報,同時將數據上傳至云端,以便森林管理員能夠遠程監控和管理。為了達成這一目標,在設計過程中遵循了以下幾個核心思路:
選擇高性能的主控芯片STM32F103RCT6作為系統的控制中心。STM32F103RCT6具有強大的處理能力和豐富的外設接口,能夠高效地處理來自多個傳感器的數據,并支持復雜的算法運算,滿足系統對數據處理的高要求。此外,它還具備低功耗特性,適合長時間在野外運行。
選用了多種高精度傳感器來實現對環境參數的全面監測。SHT30溫濕度傳感器能夠提供準確的溫度和濕度數據;火焰傳感器和MQ2煙霧傳感器則分別用于檢測火焰和煙霧濃度。這些傳感器的選擇確保了系統能夠及時捕捉到火災的早期跡象,從而提前發出預警。
為了實現數據的遠程傳輸,采用了Air724UG-4G模塊。該模塊支持4G網絡,能夠通過MQTT協議將采集到的數據上傳至華為云IOT物聯網服務器。這樣,森林管理員無論身處何地,都可以通過手機APP或Windows上位機軟件實時查看監測數據和接收警報信息,大大提高了火災響應的速度和效率。
在用戶界面方面,設計了一個0.96寸的SPI接口OLED顯示屏,用于顯示本地采集的環境參數和系統狀態。這不僅方便了現場工作人員的日常維護和檢查,還能在沒有網絡連接的情況下提供重要的信息反饋。
考慮到森林地區的特殊環境,特別加入了太陽能充電功能。通過太陽能電池板將太陽能轉換為電能,并儲存在蓄電池中,為整個系統供電。這一設計不僅解決了偏遠地區供電困難的問題,還使得系統更加環保和可持續。
為了確保系統的穩定性和可靠性,在軟件設計中加入了多種故障檢測和自我恢復機制。例如,當傳感器發生故障時,系統能夠自動切換到備用傳感器;當網絡連接中斷時,系統會自動嘗試重新連接。這些措施有效提高了系統的魯棒性,確保其在復雜多變的自然環境中能夠長期穩定運行。
本項目的設計思路圍繞著高效、可靠、易用的目標展開,通過集成先進的傳感技術、無線通信技術和太陽能供電技術,構建了一個完整的森林火災監測解決方案。這不僅有助于提高森林防火的智能化水平,也為生態環境保護提供了有力的技術支持。
1.3 系統功能總結
功能模塊 | 描述 |
---|---|
環境溫濕度監測 | 通過SHT30傳感器實時檢測森林內的環境溫度和濕度,并將數據發送給主控芯片進行處理。 |
火焰檢測 | 使用火焰傳感器監控森林區域內是否有火焰出現,一旦發現火焰,立即將信號傳遞給主控芯片。 |
煙霧濃度監測 | 利用MQ2氣體傳感器檢測空氣中的煙霧濃度,當煙霧濃度超過預設閾值時,向主控芯片發送警報信號。 |
自動報警功能 | 當系統檢測到火焰或煙霧濃度超標時,會自動激活有源蜂鳴器發出聲音警報,提醒現場人員注意安全并采取相應措施。 |
數據遠程傳輸 | 通過Air724UG-4G模塊,采用MQTT協議將采集到的環境參數和報警信息上傳至華為云IOT物聯網服務器,實現數據的遠程監控和管理。 |
移動設備實時監控 | 開發了專門的Android手機APP和Windows上位機軟件,森林管理員可以通過這些客戶端實時查看監測點上傳的數據,包括溫度、濕度、煙霧濃度等信息,以及接收火災報警通知。 |
OLED顯示屏本地顯示 | 在監測站點安裝0.96寸SPI接口OLED顯示屏,用于實時顯示環境參數和系統狀態,方便護林員現場檢查設備工作情況和傳感器讀數是否正常。 |
太陽能充電支持 | 配備太陽能充電系統,包括太陽能電池板、充電控制器和蓄電池,以解決森林地區供電不便的問題,確保監測系統在偏遠無電源的情況下也能持續運行。 |
外部電源模塊 | 提供5V 2A的外置電源供電選項,可以在需要時為系統提供電力支持,確保系統的可靠性。 |
1.4 開發工具的選擇
【1】設備端開發
STM32的編程語言選擇C語言,C語言執行效率高,大學里主學的C語言,C語言編譯出來的可執行文件最接近于機器碼,匯編語言執行效率最高,但是匯編的移植性比較差,目前在一些操作系統內核里還有一些低配的單片機使用的較多,平常的單片機編程還是以C語言為主。C語言的執行效率僅次于匯編,語法理解簡單、代碼通用性強,也支持跨平臺,在嵌入式底層、單片機編程里用的非常多,當前的設計就是采用C語言開發。
開發工具選擇Keil,keil是一家世界領先的嵌入式微控制器軟件開發商,在2015年,keil被ARM公司收購。因為當前芯片選擇的是STM32F103系列,STMF103是屬于ARM公司的芯片構架、Cortex-M3內核系列的芯片,所以使用Kile來開發STM32是有先天優勢的,而keil在各大高校使用的也非常多,很多教科書里都是以keil來教學,開發51單片機、STM32單片機等等。目前作為MCU芯片開發的軟件也不只是keil一家獨大,IAR在MCU微處理器開發領域里也使用的非常多,IAR擴展性更強,也支持STM32開發,也支持其他芯片,比如:CC2530,51單片機的開發。從軟件的使用上來講,IAR比keil更加簡潔,功能相對少一些。如果之前使用過keil,而且使用頻率較多,已經習慣再使用IAR是有點不適應界面的。
【2】上位機開發
上位機的開發選擇Qt框架,編程語言采用C++;Qt是一個1991年由Qt Company開發的跨平臺C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用于開發非GUI程序,比如控制臺工具和服務器。Qt是面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,并且允許真正地組件編程。Qt能輕松創建具有原生C++性能的連接設備、用戶界面(UI)和應用程序。它功能強大且結構緊湊,擁有直觀的工具和庫。
1.5 參考文獻
1. 1. 廈門大學航空航天學院2. 閩西職業技術學院信息工程學院.改進TDM-LoRa低功耗森林火災監測預警系統[J].福州大學學報(自然科學版),2024.
2. 武風波,張會可,呂茜彤.森林防火監測系統的設計與開發[J].現代電子技術,2018.
3. 楊春迪,陸娟,儲增幫等.基于STM32F103RBT6單片機的新型森林火災監測報警裝置研究[J].科技創新與生產力,2023.
4. 曾旻,唐治東,張保磊.基于STM32控制電路及Atlas 200加速模塊的森林防火機器人集成應用[J].中國儀器儀表,2023.
5. 徐崇奇,解建國,畢佳琦等.基于STM32的智能火災監測及滅火系統設計[J].河南科技,2022.
6. Wu Fengbo, L. Xitong et al. “Design and Development of Forest Fire Monitoring Terminal.” 2018 International Conference on Sensor Networks and Signal Processing (SNSP)(2018).
7. 安徽三聯學院機器人工程學院.森林滅火輔助機器人設計[J].技術與市場,2021.
8. 張會可.基于STM32的森林防火監測終端的設計與開發[D].西安科技大學,2017.
9. Min Yu, Taoyun Zhou et al. “Design of Forest Security Defense System Based on Beidou-Positioning.” Journal of Physics: Conference Series(2021).
10. 楊晨,祁晉東,謝鑫焱等.基于無線傳感網絡的智能森林火災防控系統的設計[J].數字技術與應用,2022.
11. 秦鈺林,周若麟,張珂欣等.基于NB-IoT窄帶通信和多傳感器組網技術的森林火災監測預警系統[J].物聯網技術,2020.
12. 李春成,楊云,陳亮等.自供電低功耗森林火災無線監測系統[J].電子器件,2021.
13. Rohan Arunkumar, Atul Kumar Dubey. “FireSense: Integrating Deep Learning with ESP32 Microcontrollers for Enhanced Forest Fire Surveillance.” 2024 IEEE 48th Annual Computers, Software, and Applications Conference (COMPSAC)(2024).
14. 王洋.基于嵌入式的森林火災監測平臺設計與實現[D].大連交通大學,2021.
15. Ziliu Ye, Fuwen Su et al. “Intelligent Fire-fighting robot based on STM32.” 2019 Chinese Automation Congress (CAC)(2019).
16. 蔡志偉,張偉光,高亮等.基于物聯網的森林環境智能監測系統終端監測節點的設計[J].哈爾濱師范大學自然科學學報,2019.
17. 大連民族大學信息與通信工程學院.基于物聯網技術的智能山火報警系統[J].智能計算機與應用,2024.
18. 蔣鵬.基于STM32的無線遙控山區物資運輸車研究與設計[J].內燃機與配件,2023.
19. 王強強,李玉麗.基于物聯網云平臺的火災監測報警系統設計 附視頻[J].技術與市場,2024.
20. Tammana Viswanadha Muralidhar, Vytla Venkata Sai Sandeep et al. “An IoT based Real Time Forest Fire Detection & Alerting System Using LoRa Communication.” 2024 11th International Conference on Signal Processing and Integrated Networks (SPIN)(2024).
21. Zhao Minhua. “A Wireless Fire Detection and Alarm System Based on the Information Fusion Technology.” Electronic Science and Technology(2012).
22. 李光輝,趙軍,王智.基于無線傳感器網絡的森林火災監測預警系統[J].傳感技術學報,2006.
23. 趙英,陳淑娟.基于多傳感器數據融合的火災預警系統[J].現代電子技術,2010.
24. 劉燕燕,楊幫華,丁麗娜等.基于STM32的紅外火災探測系統設計[J].計算機測量與控制,2013.
25. L. Niu, Zhubing Hu. “Information Fusion Technology Based on Wireless Fire Detection and Alarm System.” Advanced Materials Research(2013).
26. Yazhou Zhong, Fei Wu et al. “Design of smoke alarm system based on STM32.” International Journal of Engineering Research and(2017).
27. 朱黎,全斐,王磊等.基于無線網絡的環境監測系統[J].電子制作,2022.
28. 曲惠澤,魏東輝.基于STM32的林間信息采集機器人[J].林業機械與木工設備,2019.
29. Cao Bin-qia. “Design of data acquisition system based on STM32+FPGA.” Computer Engineering and Design(2014).
30. K. Zhao. “Design of Distributed Smoke and Heat Detector Based on STM32.” Control and Instruments in Chemical Industry(2015).
二、部署華為云物聯網平臺
華為云官網: https://www.huaweicloud.com/
打開官網,搜索物聯網,就能快速找到 設備接入IoTDA
。
2.1 物聯網平臺介紹
華為云物聯網平臺(IoT 設備接入云服務)提供海量設備的接入和管理能力,將物理設備聯接到云,支撐設備數據采集上云和云端下發命令給設備進行遠程控制,配合華為云其他產品,幫助快速構筑物聯網解決方案。
使用物聯網平臺構建一個完整的物聯網解決方案主要包括3部分:物聯網平臺、業務應用和設備。
物聯網平臺作為連接業務應用和設備的中間層,屏蔽了各種復雜的設備接口,實現設備的快速接入;同時提供強大的開放能力,支撐行業用戶構建各種物聯網解決方案。
設備可以通過固網、2G/3G/4G/5G、NB-IoT、Wifi等多種網絡接入物聯網平臺,并使用LWM2M/CoAP、MQTT、HTTPS協議將業務數據上報到平臺,平臺也可以將控制命令下發給設備。
業務應用通過調用物聯網平臺提供的API,實現設備數據采集、命令下發、設備管理等業務場景。
2.2 開通物聯網服務
地址: https://www.huaweicloud.com/product/iothub.html
點擊立即創建
。
正在創建標準版實例,需要等待片刻。
創建完成之后,點擊實例名稱。 可以看到標準版實例的設備接入端口和地址。
在上面也能看到 免費單元的限制。
開通之后,點擊總覽
,也能查看接入信息。 當前設備準備采用MQTT協議接入華為云平臺,這里可以看到MQTT協議的地址和端口號等信息。
總結:
端口號: MQTT (1883)| MQTTS (8883)
接入地址:ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com
**根據域名地址得到IP地址信息: **
打開Windows電腦的命令行控制臺終端,使用ping
命令。ping
一下即可。
Microsoft Windows [版本 10.0.19045.4170]
(c) Microsoft Corporation。保留所有權利。
C:Users11266 >ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com
正在 Ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字節的數據:
來自 117.78.5.125 的回復: 字節=32 時間=35ms TTL=93
來自 117.78.5.125 的回復: 字節=32 時間=36ms TTL=93
來自 117.78.5.125 的回復: 字節=32 時間=36ms TTL=93
來自 117.78.5.125 的回復: 字節=32 時間=39ms TTL=93
117.78.5.125 的 Ping 統計信息:
數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
最短 = 35ms,最長 = 39ms,平均 = 36ms
C:Users11266 >
MQTT協議接入端口號有兩個,1883是非加密端口,8883是證書加密端口,單片機無法加載證書,所以使用1883端口比較合適。 接下來的ESP8266就采用1883端口連接華為云物聯網平臺。
2.3 創建產品
(1)創建產品
(2)填寫產品信息
根據自己產品名字填寫,下面的設備類型選擇自定義類型。
(3)產品創建成功
創建完成之后點擊查看詳情。
(4)添加自定義模型
產品創建完成之后,點擊進入產品詳情頁面,翻到最下面可以看到模型定義。
模型簡單來說: 就是存放設備上傳到云平臺的數據。
你可以根據自己的產品進行創建。
比如:
煙霧可以叫 MQ2
溫度可以叫 Temperature
濕度可以叫 humidity
火焰可以叫 flame
其他的傳感器自己用單詞簡寫命名即可。 這就是你的單片機設備端上傳到服務器的數據名字。
先點擊自定義模型。
再創建一個服務ID。
接著點擊新增屬性。
2.4 添加設備
產品是屬于上層的抽象模型,接下來在產品模型下添加實際的設備。添加的設備最終需要與真實的設備關聯在一起,完成數據交互。
(1)注冊設備
(2)根據自己的設備填寫
(3)保存設備信息
創建完畢之后,點擊保存并關閉,得到創建的設備密匙信息。該信息在后續生成MQTT三元組的時候需要使用。
(4)設備創建完成
(5)設備詳情
2.5 MQTT協議主題訂閱與發布
(1)MQTT協議介紹
當前的設備是采用MQTT協議與華為云平臺進行通信。
MQTT是一個物聯網傳輸協議,它被設計用于輕量級的發布/訂閱式消息傳輸,旨在為低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務。MQTT是專門針對物聯網開發的輕量級傳輸協議。MQTT協議針對低帶寬網絡,低計算能力的設備,做了特殊的優化,使得其能適應各種物聯網應用場景。目前MQTT擁有各種平臺和設備上的客戶端,已經形成了初步的生態系統。
MQTT是一種消息隊列協議,使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合,相對于其他協議,開發更簡單;MQTT協議是工作在TCP/IP協議上;由TCP/IP協議提供穩定的網絡連接;所以,只要具備TCP協議棧的網絡設備都可以使用MQTT協議。 本次設備采用的ESP8266就具備TCP協議棧,能夠建立TCP連接,所以,配合STM32代碼里封裝的MQTT協議,就可以與華為云平臺完成通信。
華為云的MQTT協議接入幫助文檔在這里: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
業務流程:
(2)華為云平臺MQTT協議使用限制
描述 | 限制 |
---|---|
支持的MQTT協議版本 | 3.1.1 |
與標準MQTT協議的區別 | 支持Qos 0和Qos 1支持Topic自定義不支持QoS2不支持will、retain msg |
MQTTS支持的安全等級 | 采用TCP通道基礎 + TLS協議(最高TLSv1.3版本) |
單帳號每秒最大MQTT連接請求數 | 無限制 |
單個設備每分鐘支持的最大MQTT連接數 | 1 |
單個MQTT連接每秒的吞吐量,即帶寬,包含直連設備和網關 | 3KB/s |
MQTT單個發布消息最大長度,超過此大小的發布請求將被直接拒絕 | 1MB |
MQTT連接心跳時間建議值 | 心跳時間限定為30至1200秒,推薦設置為120秒 |
產品是否支持自定義Topic | 支持 |
消息發布與訂閱 | 設備只能對自己的Topic進行消息發布與訂閱 |
每個訂閱請求的最大訂閱數 | 無限制 |
(3)主題訂閱格式
幫助文檔地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
對于設備而言,一般會訂閱平臺下發消息給設備 這個主題。
設備想接收平臺下發的消息,就需要訂閱平臺下發消息給設備 的主題,訂閱后,平臺下發消息給設備,設備就會收到消息。
如果設備想要知道平臺下發的消息,需要訂閱上面圖片里標注的主題。
以當前設備為例,最終訂閱主題的格式如下:
$oc/devices/{device_id}/sys/messages/down
最終的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down
(4)主題發布格式
對于設備來說,主題發布表示向云平臺上傳數據,將最新的傳感器數據,設備狀態上傳到云平臺。
這個操作稱為:屬性上報。
幫助文檔地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html
根據幫助文檔的介紹, 當前設備發布主題,上報屬性的格式總結如下:
發布的主題格式:
$oc/devices/{device_id}/sys/properties/report
最終的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report
發布主題時,需要上傳數據,這個數據格式是JSON格式。
上傳的JSON數據格式如下:
{
"services": [
{
"service_id": < 填服務ID >,
"properties": {
"< 填屬性名稱1 >": < 填屬性值 >,
"< 填屬性名稱2 >": < 填屬性值 >,
..........
}
}
]
}
根據JSON格式,一次可以上傳多個屬性字段。 這個JSON格式里的,服務ID,屬性字段名稱,屬性值類型,在前面創建產品的時候就已經介紹了,不記得可以翻到前面去查看。
根據這個格式,組合一次上傳的屬性數據:
{"services": [{"service_id": "stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}
2.6 MQTT三元組
MQTT協議登錄需要填用戶ID,設備ID,設備密碼等信息,就像平時登錄QQ,微信一樣要輸入賬號密碼才能登錄。MQTT協議登錄的這3個參數,一般稱為MQTT三元組。
接下來介紹,華為云平臺的MQTT三元組參數如何得到。
(1)MQTT服務器地址
要登錄MQTT服務器,首先記得先知道服務器的地址是多少,端口是多少。
幫助文檔地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home
MQTT協議的端口支持1883和8883,它們的區別是:8883 是加密端口更加安全。但是單片機上使用比較困難,所以當前的設備是采用1883端口進連接的。
根據上面的域名和端口號,得到下面的IP地址和端口號信息: 如果設備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)
華為云的MQTT服務器地址:117.78.5.125
華為云的MQTT端口號:1883
如何得到IP地址?如何域名轉IP? 打開Windows的命令行輸入以下命令。
ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com
(2)生成MQTT三元組
華為云提供了一個在線工具,用來生成MQTT鑒權三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打開這個工具,填入設備的信息(也就是剛才創建完設備之后保存的信息),點擊生成,就可以得到MQTT的登錄信息了。
下面是打開的頁面:
填入設備的信息: (上面兩行就是設備創建完成之后保存得到的)
直接得到三元組信息。
得到三元組之后,設備端通過MQTT協議登錄鑒權的時候,填入參數即可。
ClientId 663cb18871d845632a0912e7_dev1_0_0_2024050911
Username 663cb18871d845632a0912e7_dev1
Password 71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237
2.7 模擬設備登錄測試
經過上面的步驟介紹,已經創建了產品,設備,數據模型,得到MQTT登錄信息。 接下來就用MQTT客戶端軟件模擬真實的設備來登錄平臺。測試與服務器通信是否正常。
(1)填入登錄信息
打開MQTT客戶端軟件,對號填入相關信息(就是上面的文本介紹)。然后,點擊登錄,訂閱主題,發布主題。
(2)打開網頁查看
完成上面的操作之后,打開華為云網頁后臺,可以看到設備已經在線了。
點擊詳情頁面,可以看到上傳的數據:
到此,云平臺的部署已經完成,設備已經可以正常上傳數據了。
(3)MQTT登錄測試參數總結
MQTT服務器: 117.78.5.125
MQTT端口號: 183
//物聯網服務器的設備信息
#define MQTT_ClientID "663cb18871d845632a0912e7_dev1_0_0_2024050911"
#define MQTT_UserName "663cb18871d845632a0912e7_dev1"
#define MQTT_PassWord "71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237"
//訂閱與發布的主題
#define SET_TOPIC "$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down" //訂閱
#define POST_TOPIC "$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report" //發布
發布的數據:
{"services": [{"service_id": "stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}
2.8 創建IAM賬戶
創建一個IAM賬戶,因為接下來開發上位機,需要使用云平臺的API接口,這些接口都需要token進行鑒權。簡單來說,就是身份的認證。 調用接口獲取Token時,就需要填寫IAM賬號信息。所以,接下來演示一下過程。
地址: https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/users
**【1】獲取項目憑證 ** 點擊左上角用戶名,選擇下拉菜單里的我的憑證
項目憑證:
28add376c01e4a61ac8b621c714bf459
【2】創建IAM用戶
鼠標放在左上角頭像上,在下拉菜單里選擇統一身份認證
。
點擊左上角創建用戶
。
創建成功:
【3】創建完成
用戶信息如下:
主用戶名 l19504562721
IAM用戶 ds_abc
密碼 DS12345678
2.9 獲取影子數據
幫助文檔:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html
設備影子介紹:
設備影子是一個用于存儲和檢索設備當前狀態信息的JSON文檔。
每個設備有且只有一個設備影子,由設備ID唯一標識
設備影子僅保存最近一次設備的上報數據和預期數據
無論該設備是否在線,都可以通過該影子獲取和設置設備的屬性
簡單來說:設備影子就是保存,設備最新上傳的一次數據。
設計的軟件里,如果想要獲取設備的最新狀態信息,就采用設備影子接口。
如果對接口不熟悉,可以先進行在線調試:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow
在線調試接口,可以請求影子接口,了解請求,與返回的數據格式。
調試完成看右下角的響應體,就是返回的影子數據。
設備影子接口返回的數據如下:
{
"device_id": "663cb18871d845632a0912e7_dev1",
"shadow": [
{
"service_id": "stm32",
"desired": {
"properties": null,
"event_time": null
},
"reported": {
"properties": {
"DHT11_T": 18,
"DHT11_H": 90,
"BH1750": 38,
"MQ135": 70
},
"event_time": "20240509T113448Z"
},
"version": 3
}
]
}
調試成功之后,可以得到訪問影子數據的真實鏈接,接下來的代碼開發中,就采用Qt寫代碼訪問此鏈接,獲取影子數據,完成上位機開發。
鏈接如下:
https://ad635970a1.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/28add376c01e4a61ac8b621c714bf459/devices/663cb18871d845632a0912e7_dev1/shadow
三、上位機開發
為了方便查看設備上傳的數據,接下來利用Qt開發一款Android手機APP 和 Windows上位機。
使用華為云平臺提供的API接口獲取設備上傳的數據,進行可視化顯示,以及遠程控制設備。
3.1 Qt開發環境安裝
Qt的中文官網: https://www.qt.io/zh-cn/
QT5.12.6的下載地址:https://download.qt.io/archive/qt/5.12/5.12.6
或者去網盤里下載:https://pan.quark.cn/s/145a9b3f7f53
打開下載鏈接后選擇下面的版本進行下載:
qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details
軟件安裝時斷網安裝,否則會提示輸入賬戶。
安裝的時候,第一個復選框里勾選一個mingw 32
編譯器即可,其他的不管默認就行,直接點擊下一步繼續安裝。
選擇MinGW 32-bit 編譯器: (一定要看清楚了)
說明: 我這里只是介紹PC端,也就是Windows系統下的Qt環境搭建。 Android的開發環境比較麻煩,如果想學習Android開發,想編譯Android程序的APP,需要自己去搭建Android環境。
也可以看下面這篇文章,不過這個文章是在Qt開發專欄里付費的,需要訂閱專欄才可以看。 如果不想付費看,也可以自行找其他教程,自己搭建好必須的環境就行了
Android環境搭建的博客鏈接: https://blog.csdn.net/xiaolong1126626497/article/details/117254453
3.2 新建上位機工程
前面2講解了需要用的API接口,接下來就使用Qt設計上位機,設計界面,完成整體上位機的邏輯設計。
【1】新建工程
【2】設置項目的名稱。
【3】選擇編譯系統
【4】選擇默認繼承的類
【5】選擇編譯器
【6】點擊完成
【7】工程創建完成
3.3 設計UI界面與工程配置
【1】打開UI文件
打開默認的界面如下:
【2】開始設計界面
根據自己需求設計界面。
3.5 編譯Windows上位機
點擊軟件左下角的綠色三角形按鈕進行編譯運行。
3.6 配置Android環境
如果想編譯Android手機APP,必須要先自己配置好自己的Android環境。(搭建環境的過程可以自行百度搜索學習)
然后才可以進行下面的步驟。
【1】選擇Android編譯器
【2】創建Android配置文件
創建完成。
【3】配置Android圖標與名稱
【3】編譯Android上位機
Qt本身是跨平臺的,直接選擇Android的編譯器,就可以將程序編譯到Android平臺。
然后點擊構建。
成功之后,在目錄下可以看到生成的apk
文件,也就是Android手機的安裝包,電腦端使用QQ
發送給手機QQ,手機登錄QQ接收,就能直接安裝。
生成的apk
的目錄在哪里呢? 編譯完成之后,在控制臺會輸出APK文件的路徑。
知道目錄在哪里之后,在Windows的文件資源管理器里,找到路徑,具體看下圖,找到生成的apk文件。
D:/linux-share-dir/QT/build-app_Huawei_Eco_tracking-Android_for_arm64_v8a_Clang_Qt_5_12_6_for_Android_ARM64_v8a-Release/android-build//build/outputs/apk/debug/android-build-debug.apk
四、STM32代碼開發
當前項目源碼已經上傳到網盤:[https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink]
以下是基于STM32F103RCT6的“森林火災監測系統”的 main.c
的完整代碼示例。
#include "stm32f10x.h"
#include "sht30.h" // 環境溫濕度傳感器庫
#include "mq2.h" // 煙霧傳感器庫
#include "flame_sensor.h" // 火焰傳感器庫
#include "oled.h" // OLED顯示屏庫
#include "buzzer.h" // 蜂鳴器庫
#include "air724ug.h" // 4G模塊通信庫
#include "delay.h" // 延時函數庫
#include "mqtt.h" // MQTT協議庫
// 全局變量
float temperature, humidity;
uint16_t smoke_concentration;
uint8_t flame_detected;
char data_buffer[50];
// 函數聲明
void System_Init(void);
void Read_Sensors(void);
void Display_Data(void);
void Check_Alarm(void);
void Upload_Data(void);
int main(void) {
System_Init(); // 系統初始化
while (1) {
Read_Sensors(); // 讀取傳感器數據
Display_Data(); // 在OLED上顯示數據
Check_Alarm(); // 檢查報警條件
Upload_Data(); // 上傳數據到云端
Delay_ms(5000); // 每隔5秒運行一次
}
}
// 系統初始化
void System_Init(void) {
Delay_Init(); // 初始化延時
SHT30_Init(); // 初始化溫濕度傳感器
MQ2_Init(); // 初始化煙霧傳感器
Flame_Sensor_Init(); // 初始化火焰傳感器
OLED_Init(); // 初始化OLED顯示
Buzzer_Init(); // 初始化蜂鳴器
Air724UG_Init(); // 初始化4G模塊
MQTT_Init(); // 初始化MQTT協議
}
// 讀取傳感器數據
void Read_Sensors(void) {
// 讀取溫濕度
SHT30_ReadData(&temperature, &humidity);
// 讀取煙霧濃度
smoke_concentration = MQ2_ReadData();
// 讀取火焰傳感器狀態
flame_detected = Flame_Sensor_Read();
}
// 在OLED顯示屏上顯示數據
void Display_Data(void) {
OLED_Clear();
OLED_ShowString(0, 0, "Temp:");
OLED_ShowFloat(40, 0, temperature, 2, 1);
OLED_ShowString(80, 0, "C");
OLED_ShowString(0, 1, "Humidity:");
OLED_ShowFloat(64, 1, humidity, 2, 1);
OLED_ShowString(104, 1, "%");
OLED_ShowString(0, 2, "Smoke:");
OLED_ShowNum(48, 2, smoke_concentration, 4, 10);
OLED_ShowString(0, 3, "Flame:");
if (flame_detected) {
OLED_ShowString(48, 3, "YES");
} else {
OLED_ShowString(48, 3, "NO");
}
}
// 檢查報警條件
void Check_Alarm(void) {
// 檢測到火焰或煙霧濃度超出閾值則報警
if (flame_detected || smoke_concentration > 300) {
Buzzer_On();
} else {
Buzzer_Off();
}
}
// 上傳數據到云端
void Upload_Data(void) {
// 將數據格式化為字符串
snprintf(data_buffer, sizeof(data_buffer),
"{"temperature": %.1f, "humidity": %.1f, "smoke": %d, "flame": %d}",
temperature, humidity, smoke_concentration, flame_detected);
// 使用MQTT協議上傳數據
MQTT_Publish("forest_fire_monitor/data", data_buffer);
}
代碼說明
- System_Init() :初始化所有硬件模塊,包括傳感器、OLED顯示屏、蜂鳴器、4G模塊和MQTT協議。
- Read_Sensors() :讀取各傳感器數據。
- Display_Data() :將采集的數據在OLED顯示屏上顯示,方便現場查看。
- Check_Alarm() :檢測火災報警條件,若檢測到火焰或煙霧濃度超出閾值,觸發蜂鳴器報警。
- Upload_Data() :通過4G模塊上傳數據到華為云物聯網平臺。數據格式化成JSON字符串并通過MQTT協議發布到云服務器的指定主題。
運行邏輯
系統每5秒循環一次,執行數據采集、顯示、報警檢測和數據上傳。
五、總結
森林火災是全球面臨的一大環境挑戰,不僅導致嚴重的生態破壞,還會造成巨大的經濟損失和人員傷亡。傳統的森林防火措施多依賴于人工巡邏和定點監測,效率低下且覆蓋范圍有限。為此,本項目設計了一套基于STM32F103RCT6的森林火災監測系統。該系統集成了多種傳感器,包括SHT30溫濕度傳感器、火焰傳感器和MQ2煙霧傳感器,能夠實時監測森林環境中的溫度、濕度、煙霧濃度和火焰情況。當檢測到異常情況時,系統會自動觸發蜂鳴器報警,并通過Air724UG-4G模塊將數據上傳至華為云IOT物聯網服務器。此外,系統還開發了專門的Android手機APP和Windows上位機軟件,森林管理員可以通過這些客戶端實時查看監測數據和接收火災報警信息。為了適應森林地區的特殊環境,系統支持太陽能充電,確保長期穩定運行。本項目旨在提高森林火災預警的準確性和響應速度,減少火災造成的損失,為森林防火提供了一種新的解決方案。
審核編輯 黃宇
-
STM32
+關注
關注
2270文章
10910瀏覽量
356647 -
監測系統
+關注
關注
8文章
2737瀏覽量
81389
發布評論請先 登錄
相關推薦
評論