[TOC]
一、前言
1.1 項(xiàng)目介紹
本項(xiàng)目設(shè)計(jì)里用到的全部工具軟件、模塊的源代碼都可以在這里下載(放在夸克網(wǎng)盤里了)。
https://pan.quark.cn/s/145a9b3f7f53
【1】項(xiàng)目開(kāi)發(fā)背景
隨著全球?qū)δ茉葱枨蟮某掷m(xù)增長(zhǎng),煤炭作為重要的傳統(tǒng)能源之一,在許多國(guó)家和地區(qū)依然扮演著不可或缺的角色。然而,煤礦開(kāi)采作業(yè)由于其特殊的地下環(huán)境,常常伴隨著較高的安全風(fēng)險(xiǎn),包括瓦斯爆炸、火災(zāi)、透水事故等。這些事故不僅會(huì)導(dǎo)致嚴(yán)重的人員傷亡和經(jīng)濟(jì)損失,還可能引發(fā)長(zhǎng)期的環(huán)境問(wèn)題。因此,提高煤礦的安全管理水平,減少事故發(fā)生率,成為行業(yè)發(fā)展中需要解決的問(wèn)題。
近年來(lái),物聯(lián)網(wǎng)(IoT)技術(shù)的發(fā)展為礦井安全管理提供了新的解決方案。通過(guò)部署各種傳感器和智能設(shè)備,可以實(shí)現(xiàn)對(duì)礦井內(nèi)環(huán)境參數(shù)的實(shí)時(shí)監(jiān)測(cè),及時(shí)發(fā)現(xiàn)潛在的風(fēng)險(xiǎn)因素,并采取有效的預(yù)防措施?;诖吮尘?,本項(xiàng)目提出了一種基于物聯(lián)網(wǎng)設(shè)計(jì)的地下煤礦安全監(jiān)測(cè)與預(yù)警系統(tǒng)。該系統(tǒng)利用先進(jìn)的傳感技術(shù)和無(wú)線通信技術(shù),構(gòu)建一個(gè)智能化的安全監(jiān)控網(wǎng)絡(luò),以增強(qiáng)礦井作業(yè)的安全性,提升應(yīng)急響應(yīng)速度,降低事故發(fā)生概率。
項(xiàng)目將重點(diǎn)放在以下幾個(gè)方面:
通過(guò)溫濕度傳感器和氣體傳感器對(duì)礦井內(nèi)的溫度、濕度以及瓦斯?jié)舛冗M(jìn)行連續(xù)監(jiān)測(cè);
引入人體檢測(cè)傳感器來(lái)監(jiān)控人員活動(dòng)情況,確保在緊急情況下能夠迅速定位并救援被困人員;
采用OLED顯示屏在現(xiàn)場(chǎng)展示關(guān)鍵數(shù)據(jù),同時(shí)通過(guò)NBIoT模塊將數(shù)據(jù)上傳至華為云
物聯(lián)網(wǎng)平臺(tái),實(shí)現(xiàn)遠(yuǎn)程監(jiān)控;
開(kāi)發(fā)一套基于Qt的可視化大屏軟件界面,方便管理人員隨時(shí)查看礦井狀況,并作出快速?zèng)Q策。
通過(guò)上述措施,本項(xiàng)目致力于打造一個(gè)高效、可靠且易于操作的安全監(jiān)測(cè)體系,為礦工提供更加安全的工作環(huán)境,同時(shí)也為企業(yè)帶來(lái)更高的運(yùn)營(yíng)效率和經(jīng)濟(jì)效益。
【2】華為云IOT物聯(lián)網(wǎng)平臺(tái)
華為云IoT物聯(lián)網(wǎng)平臺(tái)是華為公司提供的一種全棧式、安全可靠的云服務(wù),它能夠支持各種物聯(lián)網(wǎng)場(chǎng)景和行業(yè)應(yīng)用。
(1) 全面連接能力 :華為云IoT平臺(tái)支持多種網(wǎng)絡(luò)協(xié)議(如MQTT, CoAP, HTTP等)以及廣泛的設(shè)備接入方式,可以實(shí)現(xiàn)不同種類的終端設(shè)備與云端的穩(wěn)定連接。
(2) 強(qiáng)大的數(shù)據(jù)處理能力 :平臺(tái)提供了豐富的數(shù)據(jù)處理功能,包括規(guī)則引擎、流式計(jì)算、消息路由等,能夠快速對(duì)海量數(shù)據(jù)進(jìn)行分析處理,并根據(jù)業(yè)務(wù)需求觸發(fā)相應(yīng)的動(dòng)作或告警。
(3) 安全保障機(jī)制 :通過(guò)采用端到端的安全架構(gòu)設(shè)計(jì),華為云IoT平臺(tái)為用戶提供多層次的安全防護(hù)措施,確保從設(shè)備端到云端的數(shù)據(jù)傳輸過(guò)程中的安全性。
(4) 靈活部署選項(xiàng) :除了公共云之外,還支持私有云及混合云等多種部署模式,使得企業(yè)可以根據(jù)自身實(shí)際情況選擇最適合自己的解決方案。
(5) 開(kāi)放生態(tài)系統(tǒng) :構(gòu)建了一個(gè)開(kāi)放的合作生態(tài)體系,不僅與其他華為產(chǎn)品和服務(wù)無(wú)縫集成,也兼容第三方系統(tǒng)和服務(wù),便于開(kāi)發(fā)者基于此平臺(tái)開(kāi)發(fā)出更多創(chuàng)新的應(yīng)用和服務(wù)。
(6) 高效運(yùn)維管理 :提供了一套完善的設(shè)備管理工具集,幫助用戶輕松完成設(shè)備生命周期內(nèi)的所有操作,如注冊(cè)、激活、配置更新、狀態(tài)監(jiān)控等。
(7) 全球服務(wù)能力 :依托于華為在全球范圍內(nèi)的基礎(chǔ)設(shè)施布局,該平臺(tái)能夠?yàn)槠髽I(yè)提供跨國(guó)界的物聯(lián)網(wǎng)服務(wù)支持。
對(duì)于基于物聯(lián)網(wǎng)的地下煤礦安全監(jiān)測(cè)與預(yù)警系統(tǒng)來(lái)說(shuō),利用華為云IoT平臺(tái)的優(yōu)勢(shì),可以有效提升系統(tǒng)的穩(wěn)定性、可靠性和安全性,同時(shí)簡(jiǎn)化了開(kāi)發(fā)流程,加快了項(xiàng)目上線速度。此外,通過(guò)運(yùn)用其強(qiáng)大的數(shù)據(jù)分析能力和靈活的服務(wù)定制特性,還可以進(jìn)一步優(yōu)化安全管理策略,提高應(yīng)對(duì)突發(fā)事件的能力。
【3】設(shè)計(jì)實(shí)現(xiàn)的功能
(1)環(huán)境溫濕度監(jiān)測(cè)
- 使用DHT11溫濕度傳感器實(shí)時(shí)檢測(cè)礦井內(nèi)的溫度和相對(duì)濕度。當(dāng)檢測(cè)到的數(shù)值超過(guò)預(yù)設(shè)的安全閾值時(shí),系統(tǒng)會(huì)觸發(fā)蜂鳴器報(bào)警,提醒工作人員采取相應(yīng)措施。
(2)瓦斯?jié)舛葯z測(cè)與自動(dòng)通風(fēng)控制
- 通過(guò)MQ5氣體傳感器監(jiān)測(cè)礦井內(nèi)瓦斯(甲烷)的濃度。一旦瓦斯?jié)舛冗_(dá)到危險(xiǎn)水平,控制系統(tǒng)將激活繼電器開(kāi)關(guān)模塊,自動(dòng)啟動(dòng)通風(fēng)風(fēng)扇以降低有害氣體濃度,并可能伴有聲音警報(bào)。
(3)人員存在檢測(cè)
- 利用紅外熱釋電人體感應(yīng)模塊檢測(cè)礦井內(nèi)是否有人。如果檢測(cè)到人員存在,系統(tǒng)將點(diǎn)亮指示燈,以此作為視覺(jué)提示,增強(qiáng)對(duì)現(xiàn)場(chǎng)人員活動(dòng)的監(jiān)控。
(4)數(shù)據(jù)實(shí)時(shí)顯示
- 采用OLED顯示屏來(lái)展示當(dāng)前采集到的各項(xiàng)環(huán)境參數(shù),包括但不限于溫濕度、瓦斯?jié)舛鹊龋员阌诂F(xiàn)場(chǎng)工作人員及時(shí)了解礦井內(nèi)的實(shí)際情況。
(5)遠(yuǎn)程數(shù)據(jù)上傳
- 通過(guò)BC26 NBIOT模塊將收集到的所有環(huán)境信息上傳至華為云物聯(lián)網(wǎng)平臺(tái),允許遠(yuǎn)程監(jiān)控和數(shù)據(jù)分析,提高管理效率和響應(yīng)速度。
(6)可視化大屏界面
- 開(kāi)發(fā)了基于Qt框架的可視化大屏軟件界面,運(yùn)行在Windows電腦端。該界面可以接收并展示從設(shè)備上傳的數(shù)據(jù),為管理人員提供一個(gè)直觀且易于操作的平臺(tái)來(lái)進(jìn)行數(shù)據(jù)查看和分析。
【4】項(xiàng)目硬件模塊組成
(2)溫濕度傳感器 - DHT11
- 用于實(shí)時(shí)監(jiān)測(cè)礦井內(nèi)的溫度和相對(duì)濕度,并將數(shù)據(jù)傳輸給主控芯片。當(dāng)環(huán)境參數(shù)超過(guò)設(shè)定的安全閾值時(shí),觸發(fā)報(bào)警機(jī)制。
(3)瓦斯?jié)舛葯z測(cè)模塊 - MQ5氣體傳感器
- 專門用于檢測(cè)環(huán)境中甲烷等可燃?xì)怏w的濃度。一旦檢測(cè)到的瓦斯?jié)舛冗_(dá)到危險(xiǎn)水平,會(huì)通過(guò)控制系統(tǒng)激活通風(fēng)設(shè)備以降低濃度,并觸發(fā)警報(bào)。
(4)人體檢測(cè)傳感器 - 紅外熱釋電模塊
- 通過(guò)感應(yīng)人體發(fā)出的紅外輻射來(lái)判斷區(qū)域內(nèi)是否有人存在,增強(qiáng)現(xiàn)場(chǎng)的安全監(jiān)控能力。
(5)顯示模塊 - SPI接口OLED顯示屏
- 提供一個(gè)直觀的用戶界面,用來(lái)顯示當(dāng)前采集到的溫濕度、瓦斯?jié)舛鹊汝P(guān)鍵信息。
(6)無(wú)線通信模塊 - BC26 NBIOT模塊
- 負(fù)責(zé)將收集到的各種環(huán)境數(shù)據(jù)通過(guò)NBIoT網(wǎng)絡(luò)上傳至華為云物聯(lián)網(wǎng)平臺(tái),實(shí)現(xiàn)遠(yuǎn)程監(jiān)控和數(shù)據(jù)分析。
(7)蜂鳴器報(bào)警
- 在任何環(huán)境參數(shù)超出預(yù)設(shè)的安全范圍時(shí),蜂鳴器將被激活,發(fā)出聲音警報(bào)以提醒工作人員采取緊急措施。
(8)繼電器開(kāi)關(guān)模塊 - 電磁繼電器
- 根據(jù)主控芯片發(fā)送的指令控制外部設(shè)備如通風(fēng)風(fēng)扇的工作狀態(tài),確保在必要時(shí)能夠迅速響應(yīng)。
(9)風(fēng)扇模塊 - 礦用通風(fēng)風(fēng)扇
- 當(dāng)瓦斯?jié)舛冗^(guò)高時(shí),通過(guò)繼電器控制自動(dòng)啟動(dòng),以快速降低礦井內(nèi)有害氣體的濃度,保障人員安全。
(10)電源管理
(11)指示燈 - LED指示燈
- 用于視覺(jué)上提示系統(tǒng)狀態(tài)或特定事件的發(fā)生,比如當(dāng)檢測(cè)到人員存在時(shí)點(diǎn)亮指示燈。
1.2 設(shè)計(jì)思路
本項(xiàng)目的設(shè)計(jì)思路基于對(duì)煤礦安全現(xiàn)狀的深入分析,在利用物聯(lián)網(wǎng)技術(shù)構(gòu)建一個(gè)全面、智能且高效的地下煤礦安全監(jiān)測(cè)與預(yù)警系統(tǒng)。首先,我們認(rèn)識(shí)到礦井作業(yè)環(huán)境中存在的多種潛在風(fēng)險(xiǎn)因素,如瓦斯積聚、溫濕度異常以及突發(fā)事故等,這些都可能直接威脅到礦工的生命安全。因此,設(shè)計(jì)之初就明確了系統(tǒng)需要具備實(shí)時(shí)監(jiān)測(cè)環(huán)境參數(shù)的能力,并能夠快速響應(yīng)以降低風(fēng)險(xiǎn)。
為了實(shí)現(xiàn)這一目標(biāo),系統(tǒng)集成了多種傳感器來(lái)收集關(guān)鍵數(shù)據(jù)。DHT11溫濕度傳感器用于監(jiān)測(cè)礦井內(nèi)的溫度和濕度變化,這是評(píng)估工作環(huán)境舒適度及防止因極端條件引發(fā)事故的重要指標(biāo)。MQ5氣體傳感器則專注于檢測(cè)瓦斯?jié)舛龋驗(yàn)橥咚故菍?dǎo)致煤礦爆炸的主要原因之一。當(dāng)這些傳感器檢測(cè)到的數(shù)據(jù)超過(guò)預(yù)設(shè)的安全閾值時(shí),系統(tǒng)會(huì)立即啟動(dòng)報(bào)警機(jī)制,通過(guò)蜂鳴器發(fā)出聲音警報(bào),同時(shí)自動(dòng)開(kāi)啟通風(fēng)風(fēng)扇以稀釋有害氣體,從而迅速減輕潛在危險(xiǎn)。
考慮到礦井內(nèi)人員的安全管理同樣重要,系統(tǒng)還加入了紅外熱釋電人體感應(yīng)模塊,用以監(jiān)測(cè)是否有人員在場(chǎng)。這不僅有助于提高現(xiàn)場(chǎng)的安全意識(shí),還能在緊急情況下幫助救援隊(duì)伍更快地定位被困人員。此外,OLED顯示屏被用來(lái)在現(xiàn)場(chǎng)直觀展示各種監(jiān)測(cè)數(shù)據(jù),確保所有工作人員都能及時(shí)了解當(dāng)前的環(huán)境狀況。
為了讓管理者能夠遠(yuǎn)程監(jiān)控礦井狀態(tài)并進(jìn)行數(shù)據(jù)分析,系統(tǒng)采用了BC26 NBIoT模塊將采集的數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái)。這種做法極大地增強(qiáng)了系統(tǒng)的靈活性和可擴(kuò)展性,使得即使不在現(xiàn)場(chǎng)也能隨時(shí)掌握最新情況。最后,為了提供更友好的用戶體驗(yàn),我們使用Qt框架開(kāi)發(fā)了一款可視化大屏軟件界面,該界面運(yùn)行于Windows電腦端,可以清晰地呈現(xiàn)從設(shè)備上傳來(lái)的所有信息,便于管理人員做出及時(shí)有效的決策。
本項(xiàng)目通過(guò)集成先進(jìn)的傳感技術(shù)、無(wú)線通信技術(shù)和云計(jì)算平臺(tái),打造了一個(gè)多層次的安全監(jiān)測(cè)體系。該體系不僅提升了煤礦作業(yè)的安全水平,也為實(shí)現(xiàn)智能化礦山管理奠定了堅(jiān)實(shí)的基礎(chǔ)。
1.3 系統(tǒng)功能總結(jié)
序號(hào) | 功能模塊 | 描述 | 實(shí)現(xiàn)方式/硬件組件 |
---|---|---|---|
1 | 溫濕度監(jiān)測(cè) | 檢測(cè)礦井內(nèi)溫濕度情況,并在超過(guò)預(yù)設(shè)閾值時(shí)觸發(fā)報(bào)警。 | DHT11溫濕度傳感器,蜂鳴器 |
2 | 瓦斯?jié)舛葯z測(cè) | 監(jiān)控環(huán)境中的瓦斯?jié)舛龋?dāng)濃度達(dá)到危險(xiǎn)水平時(shí)自動(dòng)開(kāi)啟通風(fēng)設(shè)備。 | MQ5氣體傳感器,繼電器控制的礦用通風(fēng)風(fēng)扇 |
3 | 人員存在監(jiān)測(cè) | 檢測(cè)礦井內(nèi)是否有人員活動(dòng),提高安全響應(yīng)速度。 | 紅外熱釋電人體感應(yīng)模塊,指示燈 |
4 | 數(shù)據(jù)顯示 | 顯示實(shí)時(shí)采集到的各項(xiàng)環(huán)境參數(shù)。 | OLED顯示屏(SPI協(xié)議) |
5 | 數(shù)據(jù)上傳 | 將收集的數(shù)據(jù)通過(guò)無(wú)線網(wǎng)絡(luò)上傳至云端平臺(tái),支持遠(yuǎn)程監(jiān)控和數(shù)據(jù)分析。 | BC26 NBIOT模塊,華為云物聯(lián)網(wǎng)平臺(tái) |
6 | 可視化界面 | 在Windows電腦端提供一個(gè)用戶友好的可視化大屏界面,用于展示和管理數(shù)據(jù)。 | Qt開(kāi)發(fā)的圖形用戶界面軟件 |
7 | 電源管理 | 為系統(tǒng)提供穩(wěn)定的電力供應(yīng),確保所有電子元件正常工作。 | 5V 2A穩(wěn)壓電源供控制電路使用;市電供電給高功耗設(shè)備如風(fēng)扇等 |
1.4 開(kāi)發(fā)工具的選擇
【1】設(shè)備端開(kāi)發(fā)
STM32的編程語(yǔ)言選擇C語(yǔ)言,C語(yǔ)言執(zhí)行效率高,大學(xué)里主學(xué)的C語(yǔ)言,C語(yǔ)言編譯出來(lái)的可執(zhí)行文件最接近于機(jī)器碼,匯編語(yǔ)言執(zhí)行效率最高,但是匯編的移植性比較差,目前在一些操作系統(tǒng)內(nèi)核里還有一些低配的單片機(jī)使用的較多,平常的單片機(jī)編程還是以C語(yǔ)言為主。C語(yǔ)言的執(zhí)行效率僅次于匯編,語(yǔ)法理解簡(jiǎn)單、代碼通用性強(qiáng),也支持跨平臺(tái),在嵌入式底層、單片機(jī)編程里用的非常多,當(dāng)前的設(shè)計(jì)就是采用C語(yǔ)言開(kāi)發(fā)。
開(kāi)發(fā)工具選擇Keil,keil是一家世界領(lǐng)先的嵌入式微控制器軟件開(kāi)發(fā)商,在2015年,keil被ARM公司收購(gòu)。因?yàn)楫?dāng)前芯片選擇的是STM32F103系列,STMF103是屬于ARM公司的芯片構(gòu)架、Cortex-M3內(nèi)核系列的芯片,所以使用Kile來(lái)開(kāi)發(fā)STM32是有先天優(yōu)勢(shì)的,而keil在各大高校使用的也非常多,很多教科書里都是以keil來(lái)教學(xué),開(kāi)發(fā)51單片機(jī)、STM32單片機(jī)等等。目前作為MCU芯片開(kāi)發(fā)的軟件也不只是keil一家獨(dú)大,IAR在MCU微處理器開(kāi)發(fā)領(lǐng)域里也使用的非常多,IAR擴(kuò)展性更強(qiáng),也支持STM32開(kāi)發(fā),也支持其他芯片,比如:CC2530,51單片機(jī)的開(kāi)發(fā)。從軟件的使用上來(lái)講,IAR比keil更加簡(jiǎn)潔,功能相對(duì)少一些。如果之前使用過(guò)keil,而且使用頻率較多,已經(jīng)習(xí)慣再使用IAR是有點(diǎn)不適應(yīng)界面的。
【2】上位機(jī)開(kāi)發(fā)
上位機(jī)的開(kāi)發(fā)選擇Qt框架,編程語(yǔ)言采用C++;Qt是一個(gè)1991年由Qt Company開(kāi)發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架。它既可以開(kāi)發(fā)GUI程序,也可用于開(kāi)發(fā)非GUI程序,比如控制臺(tái)工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴(kuò)展(稱為元對(duì)象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴(kuò)展,并且允許真正地組件編程。Qt能輕松創(chuàng)建具有原生C++性能的連接設(shè)備、用戶界面(UI)和應(yīng)用程序。它功能強(qiáng)大且結(jié)構(gòu)緊湊,擁有直觀的工具和庫(kù)。
1.5 模塊的技術(shù)詳情介紹
【1】NBIOT-BC26模塊
NBIoT-BC26模塊是由Quectel(移遠(yuǎn)通信)生產(chǎn)的一款低功耗廣域網(wǎng)絡(luò)(LPWAN)模塊,專為窄帶物聯(lián)網(wǎng)(Narrowband Internet of Things, NB-IoT)應(yīng)用設(shè)計(jì)。這款模塊具有體積小、功耗低、覆蓋范圍廣等優(yōu)點(diǎn),非常適合用于遠(yuǎn)程監(jiān)控、智能計(jì)量、資產(chǎn)跟蹤、環(huán)境監(jiān)測(cè)等多種物聯(lián)網(wǎng)應(yīng)用場(chǎng)景。
BC26模塊支持NB-IoT標(biāo)準(zhǔn),這是3GPP定義的一種專門針對(duì)物聯(lián)網(wǎng)應(yīng)用的蜂窩技術(shù)。與傳統(tǒng)的2G/3G/4G網(wǎng)絡(luò)相比,NB-IoT提供了更好的室內(nèi)覆蓋能力、更低的功耗以及更高的連接密度。這使得BC26模塊能夠在信號(hào)較弱或難以到達(dá)的地方保持穩(wěn)定的數(shù)據(jù)傳輸。此外,NB-IoT還支持更深的穿透力和更長(zhǎng)的電池壽命,這對(duì)于部署在偏遠(yuǎn)地區(qū)或需要長(zhǎng)時(shí)間運(yùn)行的設(shè)備尤為重要。
該模塊采用LGA封裝,尺寸僅為19.9 x 23.6 x 2.2 mm,便于集成到各種小型化設(shè)備中。BC26模塊支持多種頻段,包括B1/B3/B5/B8/B20/B28等全球主流頻段,確保了廣泛的地域兼容性。模塊內(nèi)置了多種協(xié)議棧,如CoAP、TCP/UDP、MQTT等,簡(jiǎn)化了數(shù)據(jù)傳輸和遠(yuǎn)程控制的應(yīng)用開(kāi)發(fā)。通過(guò)這些協(xié)議棧,開(kāi)發(fā)者可以輕松實(shí)現(xiàn)設(shè)備與云端服務(wù)器之間的通信,進(jìn)行數(shù)據(jù)上報(bào)和命令下發(fā)。
在接口方面,BC26模塊提供了豐富的外設(shè)接口,包括UART、GPIO、ADC、SIM卡接口等。這些接口使得模塊能夠方便地與其他傳感器、控制器和其他外圍設(shè)備進(jìn)行連接。例如,通過(guò)UART接口,模塊可以直接與微控制器進(jìn)行通信;通過(guò)GPIO接口,可以控制外部設(shè)備或讀取開(kāi)關(guān)狀態(tài);而SIM卡接口則允許使用標(biāo)準(zhǔn)SIM卡或eSIM卡進(jìn)行網(wǎng)絡(luò)認(rèn)證。
為了進(jìn)一步降低功耗,BC26模塊支持多種省電模式,如PSM(Power Saving Mode)和eDRX(Extended Discontinuous Reception)。這些模式可以在不需要持續(xù)數(shù)據(jù)傳輸時(shí)顯著降低功耗,延長(zhǎng)電池壽命。在PSM模式下,模塊可以進(jìn)入深度睡眠狀態(tài),僅在預(yù)定的時(shí)間間隔內(nèi)喚醒以檢查是否有新的數(shù)據(jù)傳輸需求。而在eDRX模式下,模塊會(huì)定期監(jiān)聽(tīng)網(wǎng)絡(luò)消息,但相比于傳統(tǒng)DRX模式,其監(jiān)聽(tīng)間隔更長(zhǎng),從而降低了功耗。
BC26模塊還具備強(qiáng)大的安全特性,支持多種加密算法和協(xié)議,如TLS/SSL、AES等,確保數(shù)據(jù)傳輸?shù)陌踩院屯暾浴4送?,模塊支持FOTA(Firmware Over-The-Air)更新功能,可以通過(guò)無(wú)線方式對(duì)固件進(jìn)行升級(jí),提高了系統(tǒng)的可維護(hù)性和安全性。
NBIoT-BC26模塊以其小巧的體積、低功耗、廣泛的網(wǎng)絡(luò)覆蓋以及豐富的接口支持,成為物聯(lián)網(wǎng)應(yīng)用中的理想選擇。無(wú)論是用于智能農(nóng)業(yè)、環(huán)境監(jiān)測(cè)、智能城市還是其他需要長(zhǎng)期可靠連接的應(yīng)用場(chǎng)景,BC26都能提供穩(wěn)定高效的數(shù)據(jù)傳輸解決方案。
【2】MQ5傳感器
MQ5氣體傳感器是一種廣泛應(yīng)用于檢測(cè)多種可燃?xì)怏w的半導(dǎo)體氣體傳感器,特別適合于監(jiān)測(cè)甲烷(CH4)、液化石油氣(LPG)、丙烷、氫氣等。這種傳感器因其高靈敏度、快速響應(yīng)時(shí)間和相對(duì)低廉的成本而在工業(yè)安全監(jiān)控領(lǐng)域得到了廣泛應(yīng)用,尤其是在需要對(duì)易燃易爆氣體進(jìn)行實(shí)時(shí)監(jiān)測(cè)的環(huán)境中。
MQ5的工作原理基于金屬氧化物半導(dǎo)體(MOS)技術(shù)。當(dāng)傳感器暴露在目標(biāo)氣體中時(shí),其表面會(huì)發(fā)生化學(xué)反應(yīng),導(dǎo)致傳感器電阻發(fā)生變化。這一變化可以通過(guò)電路轉(zhuǎn)換為電信號(hào),進(jìn)而被用來(lái)評(píng)估氣體濃度。通常情況下,MQ5傳感器會(huì)連接到一個(gè)簡(jiǎn)單的分壓電路,并通過(guò)測(cè)量輸出電壓來(lái)判斷氣體的存在及其濃度。傳感器對(duì)不同氣體有不同的敏感度,因此在實(shí)際應(yīng)用中需要根據(jù)所要檢測(cè)的具體氣體類型進(jìn)行校準(zhǔn)。
該傳感器的操作溫度范圍較寬,一般在-10°C至50°C之間,這使得它能夠在大多數(shù)礦井環(huán)境下正常工作。然而,為了獲得最佳性能,建議在使用前進(jìn)行預(yù)熱,以確保傳感器達(dá)到穩(wěn)定的工作狀態(tài)。預(yù)熱時(shí)間通常約為20分鐘,之后傳感器才能提供準(zhǔn)確可靠的讀數(shù)。
MQ5傳感器具有良好的穩(wěn)定性和較長(zhǎng)的使用壽命,但需要注意的是,其性能可能會(huì)受到環(huán)境濕度和溫度的影響。因此,在設(shè)計(jì)系統(tǒng)時(shí),應(yīng)考慮這些因素并采取適當(dāng)?shù)难a(bǔ)償措施。此外,由于MQ5傳感器主要針對(duì)可燃?xì)怏w設(shè)計(jì),對(duì)于非可燃性氣體如一氧化碳或二氧化碳則不適用,所以在選擇傳感器時(shí)需要明確具體的應(yīng)用需求。
在本項(xiàng)目中,MQ5氣體傳感器將被用來(lái)監(jiān)測(cè)礦井內(nèi)的瓦斯(主要是甲烷)濃度。一旦檢測(cè)到的瓦斯?jié)舛瘸^(guò)設(shè)定的安全閾值,系統(tǒng)就會(huì)自動(dòng)啟動(dòng)通風(fēng)設(shè)備,降低礦井內(nèi)有害氣體的濃度,同時(shí)觸發(fā)報(bào)警機(jī)制,提醒工作人員采取必要的安全措施。這樣的設(shè)計(jì)不僅提高了礦井作業(yè)的安全性,也增強(qiáng)了事故預(yù)防的能力。
【4】DHT11傳感器
DHT11是一種廣泛使用的數(shù)字溫濕度傳感器,它能夠同時(shí)測(cè)量環(huán)境的溫度和相對(duì)濕度。這種傳感器因其簡(jiǎn)單易用、成本低廉以及良好的性能而被廣泛應(yīng)用于各種場(chǎng)合,包括家庭自動(dòng)化、氣象站、農(nóng)業(yè)監(jiān)測(cè)以及工業(yè)控制等領(lǐng)域。在本項(xiàng)目中,DHT11將用于實(shí)時(shí)監(jiān)測(cè)地下煤礦內(nèi)的溫濕度條件,確保礦井內(nèi)保持適宜的工作環(huán)境。
DHT11傳感器內(nèi)部集成了一個(gè)電阻式濕敏元件和一個(gè)NTC(負(fù)溫度系數(shù))熱敏電阻,這兩個(gè)組件共同作用以實(shí)現(xiàn)對(duì)環(huán)境溫濕度的精確測(cè)量。濕敏元件通過(guò)檢測(cè)空氣中的水分含量來(lái)反映濕度水平,而熱敏電阻則根據(jù)其電阻值隨溫度變化的特性來(lái)測(cè)量溫度。這兩種物理量的變化會(huì)被轉(zhuǎn)換成電信號(hào),并通過(guò)內(nèi)置的微處理器進(jìn)行處理,最終輸出數(shù)字信號(hào)。
DHT11采用單線數(shù)字接口進(jìn)行通信,這意味著只需一根數(shù)據(jù)線即可完成與微控制器之間的數(shù)據(jù)傳輸。這簡(jiǎn)化了電路設(shè)計(jì),減少了布線復(fù)雜度。為了獲取準(zhǔn)確的數(shù)據(jù),用戶需要遵循特定的時(shí)序協(xié)議來(lái)讀取傳感器的輸出。通常情況下,一次完整的數(shù)據(jù)采集過(guò)程包括發(fā)送開(kāi)始信號(hào)、接收響應(yīng)以及讀取溫濕度數(shù)據(jù)等步驟。
該傳感器的工作電壓范圍為3.3V至5.0V,使其能夠兼容多種供電系統(tǒng)。在正常工作條件下,DHT11可以提供±2°C的溫度精度和±5%的相對(duì)濕度精度。盡管這些數(shù)值對(duì)于某些高精度應(yīng)用可能不夠理想,但對(duì)于大多數(shù)日常用途來(lái)說(shuō)已經(jīng)足夠。此外,DHT11具有較寬的工作溫度范圍(0°C至50°C)和濕度范圍(20%RH至90%RH),這使得它能夠在多種環(huán)境中可靠運(yùn)行。
需要注意的是,DHT11傳感器不建議頻繁讀取數(shù)據(jù),因?yàn)檫B續(xù)快速的請(qǐng)求可能會(huì)導(dǎo)致傳感器過(guò)載。一般來(lái)說(shuō),兩次讀取之間至少應(yīng)間隔2秒。此外,由于DHT11沒(méi)有防水功能,在使用時(shí)應(yīng)避免將其直接暴露于水或高濕度環(huán)境中,以免影響其使用壽命和準(zhǔn)確性。
在本項(xiàng)目中,DHT11傳感器將被集成到主控板上,定時(shí)采集礦井內(nèi)的溫濕度數(shù)據(jù),并通過(guò)OLED顯示屏顯示出來(lái)。如果檢測(cè)到的溫濕度超出預(yù)設(shè)的安全閾值,系統(tǒng)會(huì)觸發(fā)報(bào)警機(jī)制,提醒工作人員采取措施改善礦井內(nèi)的環(huán)境條件,從而保障礦工的安全和健康。通過(guò)這種方式,DHT11傳感器為礦井安全監(jiān)測(cè)提供了重要的支持。
【5】紅外熱釋電人體檢測(cè)傳感器
紅外熱釋電人體檢測(cè)傳感器是一種利用人體發(fā)出的紅外輻射來(lái)檢測(cè)人員存在的裝置。這種傳感器基于熱釋電效應(yīng)工作,當(dāng)有溫度變化時(shí)(例如人體移動(dòng)),傳感器中的熱釋電材料會(huì)產(chǎn)生電荷變化,從而生成電信號(hào)。這些信號(hào)經(jīng)過(guò)放大和處理后,可以用來(lái)判斷是否有人進(jìn)入或離開(kāi)監(jiān)測(cè)區(qū)域。
紅外熱釋電傳感器通常包含一個(gè)菲涅爾透鏡,該透鏡能夠?qū)⑻綔y(cè)區(qū)域分成多個(gè)部分,并且每個(gè)部分在不同時(shí)間點(diǎn)上依次被傳感器掃描。這樣的設(shè)計(jì)有助于提高檢測(cè)范圍和靈敏度,同時(shí)減少誤報(bào)率。菲涅爾透鏡還能夠聚焦紅外輻射,使得傳感器對(duì)較遠(yuǎn)距離的人體也能做出反應(yīng)。此外,一些先進(jìn)的傳感器可能還會(huì)配備環(huán)境溫度補(bǔ)償電路,以適應(yīng)不同的工作條件,確保在各種溫度下都能穩(wěn)定工作。
這類傳感器的一個(gè)重要特點(diǎn)是其低功耗特性,非常適合電池供電的應(yīng)用場(chǎng)景。它們通常只需要很少的能量就能保持工作狀態(tài),這在需要長(zhǎng)時(shí)間無(wú)人值守監(jiān)控的情況下尤為重要。然而,紅外熱釋電傳感器也有一些局限性,比如它不能穿透障礙物進(jìn)行檢測(cè),因此安裝位置需要避免被物體遮擋;另外,如果環(huán)境中有其他熱源或溫差較大的物體,也可能引起誤觸發(fā)。
在本項(xiàng)目中,紅外熱釋電人體檢測(cè)傳感器將用于監(jiān)測(cè)礦井內(nèi)是否有人員活動(dòng)。當(dāng)檢測(cè)到人員存在時(shí),系統(tǒng)會(huì)點(diǎn)亮指示燈作為視覺(jué)提示,這有助于增強(qiáng)現(xiàn)場(chǎng)的安全管理。例如,在緊急情況下,這種信息可以幫助救援隊(duì)伍更快地定位被困人員的位置。此外,結(jié)合其他傳感器的數(shù)據(jù),如瓦斯?jié)舛群蜏貪穸?,可以更全面地評(píng)估礦井內(nèi)的安全狀況,為采取進(jìn)一步的安全措施提供依據(jù)。
通過(guò)集成紅外熱釋電人體檢測(cè)傳感器,本項(xiàng)目不僅提高了對(duì)礦工活動(dòng)的實(shí)時(shí)監(jiān)控能力,也增強(qiáng)了整體系統(tǒng)的智能化水平,有助于構(gòu)建一個(gè)更加安全、高效的地下煤礦作業(yè)環(huán)境。
1.6 市場(chǎng)可行性調(diào)查
基于物聯(lián)網(wǎng)設(shè)計(jì)的地下煤礦安全監(jiān)測(cè)與預(yù)警系統(tǒng)是一個(gè)復(fù)雜而全面的系統(tǒng),通過(guò)實(shí)時(shí)監(jiān)測(cè)、數(shù)據(jù)分析和預(yù)警機(jī)制來(lái)提高煤礦的安全性。該系統(tǒng)的設(shè)計(jì)和實(shí)施需要綜合考慮煤礦環(huán)境的特殊性、監(jiān)測(cè)技術(shù)的先進(jìn)性以及預(yù)警機(jī)制的有效性。
【1】系統(tǒng)架構(gòu)
根據(jù)現(xiàn)有研究,基于物聯(lián)網(wǎng)的煤礦安全監(jiān)測(cè)與預(yù)警系統(tǒng)通常包括感知層、傳輸層和應(yīng)用層三個(gè)主要部分。感知層負(fù)責(zé)通過(guò)各種傳感器收集煤礦環(huán)境中的數(shù)據(jù),如瓦斯?jié)舛?、溫度、濕度等。傳輸層則利用有線和無(wú)線通信技術(shù)將收集到的數(shù)據(jù)傳輸?shù)娇刂?a target="_blank">中心。應(yīng)用層則負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行處理和分析,并根據(jù)分析結(jié)果發(fā)出預(yù)警。
【2】關(guān)鍵技術(shù)
- 傳感器技術(shù) :傳感器是監(jiān)測(cè)系統(tǒng)的核心,需要能夠準(zhǔn)確地測(cè)量煤礦環(huán)境中的各種參數(shù)。例如,用于檢測(cè)瓦斯、一氧化碳等有害氣體的傳感器,以及用于監(jiān)測(cè)礦工健康狀況的生理參數(shù)傳感器。
- 無(wú)線通信技術(shù) :由于煤礦環(huán)境的特殊性,傳統(tǒng)的無(wú)線通信技術(shù)可能無(wú)法滿足需求。因此,需要開(kāi)發(fā)適合煤礦環(huán)境的無(wú)線通信技術(shù),如基于RFID和Mesh網(wǎng)絡(luò)的通信系統(tǒng)。
- 數(shù)據(jù)處理與分析 :收集到的數(shù)據(jù)需要通過(guò)高效的數(shù)據(jù)處理和分析算法進(jìn)行處理,以識(shí)別潛在的安全風(fēng)險(xiǎn)。這包括使用大數(shù)據(jù)技術(shù)和云計(jì)算來(lái)處理和分析大量數(shù)據(jù)。
- 預(yù)警機(jī)制 :基于數(shù)據(jù)分析的結(jié)果,系統(tǒng)需要能夠及時(shí)發(fā)出預(yù)警,通知相關(guān)人員采取措施。這可能包括自動(dòng)化的報(bào)警系統(tǒng)和緊急響應(yīng)機(jī)制。
【3】實(shí)施挑戰(zhàn)
- 環(huán)境適應(yīng)性 :煤礦環(huán)境復(fù)雜多變,傳感器和通信設(shè)備需要能夠適應(yīng)高溫、高濕、易爆等惡劣條件。
- 數(shù)據(jù)安全與隱私 :在傳輸和存儲(chǔ)過(guò)程中保護(hù)數(shù)據(jù)的安全性和礦工的隱私是一個(gè)重要挑戰(zhàn)。
- 系統(tǒng)的可靠性和穩(wěn)定性 :系統(tǒng)需要保證長(zhǎng)時(shí)間的穩(wěn)定運(yùn)行,避免因故障導(dǎo)致的安全事故。
【4】參考文獻(xiàn)
1. 孫繼平.煤礦物聯(lián)網(wǎng)特點(diǎn)與關(guān)鍵技術(shù)研究[J].煤炭學(xué)報(bào),2011.
2. 馬小平,胡延軍,繆燕子.物聯(lián)網(wǎng)、大數(shù)據(jù)及云計(jì)算技術(shù)在煤礦安全生產(chǎn)中的應(yīng)用研究[J].工礦自動(dòng)化,2014.
3. B. Jo, Rana Muhammad Asad Khan. “An Event Reporting and Early-Warning Safety System Based on the Internet of Things for Underground Coal Mines: A Case Study.” Applied Sciences(2017).
4. 孫彥景,錢建生,李世銀等.煤礦物聯(lián)網(wǎng)絡(luò)系統(tǒng)理論與關(guān)鍵技術(shù)[J].煤炭科學(xué)技術(shù),2011.
5. Yufeng Jiang, Wei Chen et al. “Real-Time Monitoring of Underground Miners’ Status Based on Mine IoT System.” Sensors (Basel, Switzerland)(2024).
6. 劉瑞祥.基于物聯(lián)網(wǎng)的煤礦井下監(jiān)測(cè)網(wǎng)絡(luò)平臺(tái)關(guān)鍵技術(shù)研究[D].中國(guó)礦業(yè)大學(xué)(北京),2014.
7. 張靜,聶章龍.基于物聯(lián)網(wǎng)的煤礦安全監(jiān)測(cè)與預(yù)警平臺(tái)設(shè)計(jì) 附視頻[J].煤炭技術(shù),2021.
8. 付貴祥,周紅軍,郭繼茹.基于物聯(lián)網(wǎng)的煤礦安全綜合智能預(yù)警系統(tǒng)[J].工礦自動(dòng)化,2014.
9. 田立勤,馬亞楠.基于物聯(lián)網(wǎng)的煤礦實(shí)時(shí)監(jiān)測(cè)的拓?fù)淇煽啃栽O(shè)計(jì)與優(yōu)化分析[J].金屬礦山,2017.
10. 王學(xué)琛,郭昕曜,李墨瀟等.基于物聯(lián)網(wǎng)的煤礦安全風(fēng)險(xiǎn)預(yù)警平臺(tái)的研究及應(yīng)用[J].武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版),2016.
11. 徐州建筑職業(yè)技術(shù)學(xué)院.煤礦安全檢測(cè)系統(tǒng)的物聯(lián)網(wǎng)技術(shù)研究[J].煤炭技術(shù),2011.
12. 國(guó)家安全生產(chǎn)監(jiān)督管理總局通信信息中心.物聯(lián)網(wǎng)技術(shù)在煤礦安全監(jiān)察中的應(yīng)用[J].煤礦安全,2014.
13. 程文嶺.基于物聯(lián)網(wǎng)的數(shù)字式煤礦安全監(jiān)測(cè)監(jiān)控技術(shù)研究[J].科技創(chuàng)新與應(yīng)用,2020.
14. 國(guó)能神東煤炭集團(tuán)有限責(zé)任公司布爾臺(tái)煤礦.基于物聯(lián)網(wǎng)技術(shù)的煤礦用電安全智能監(jiān)測(cè)研究[J].中國(guó)煤炭,2022.
15. 李瑞華,喬玉峰,劉峰.基于物聯(lián)網(wǎng)的礦井安全檢測(cè)系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016.
16. 劉香蘭,趙旭生,董桂剛.基于物聯(lián)網(wǎng)的煤礦瓦斯爆炸動(dòng)態(tài)安全預(yù)警系統(tǒng)的設(shè)計(jì)研究[J].煤炭工程,2012.
17. 淮南聯(lián)合大學(xué)計(jì)算機(jī)系.基于物聯(lián)網(wǎng)技術(shù)的煤礦人員定位系統(tǒng)及其應(yīng)用[J].電腦知識(shí)與技術(shù),2019.
18. 黎敏.基于五層物聯(lián)網(wǎng)架構(gòu)的煤礦安全監(jiān)控系統(tǒng)設(shè)計(jì)[J].煤炭技術(shù),2016.
19. 徐江陵.基于物聯(lián)網(wǎng)的智能化煤礦安全監(jiān)控系統(tǒng)研究[J].煤炭技術(shù),2018.
20. 粟闖,方思宇,容德春等.基于物聯(lián)感知技術(shù)的地下開(kāi)采風(fēng)險(xiǎn)管控系統(tǒng)建設(shè)及應(yīng)用 附視頻[J].中國(guó)礦業(yè),2024.
21. 劉衛(wèi)東,張薇,孟曉靜.基于物聯(lián)網(wǎng)的煤礦檢測(cè)監(jiān)控系統(tǒng)研究[J].電子器件,2015.
22. 郭江濤,楊娟.基于物聯(lián)網(wǎng)感知的煤礦安全監(jiān)控系統(tǒng)設(shè)計(jì)[J].自動(dòng)化與儀器儀表,2015.
23. 黃成玉,李學(xué)哲,張全柱.基于物聯(lián)網(wǎng)技術(shù)的煤礦綜合自動(dòng)化系統(tǒng)[J].煤礦安全,2012.
24. 西安歐亞學(xué)院信息工程學(xué)院.基于物聯(lián)網(wǎng)技術(shù)的煤礦智能安全管理系統(tǒng)研究[J].價(jià)值工程,2011.
25. 朱晶.基于物聯(lián)網(wǎng)技術(shù)的煤礦安全監(jiān)控平臺(tái)的設(shè)計(jì)與關(guān)鍵技術(shù)[J].機(jī)械管理開(kāi)發(fā),2020.
26. 黃彩梅,辛樂(lè),黃丹等.基于物聯(lián)網(wǎng)技術(shù)的煤礦定位與監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].傳感器與微系統(tǒng),2013.
27. 姚逸程.基于物聯(lián)網(wǎng)的煤礦粉塵在線預(yù)警系統(tǒng)[J].綠色科技,2021.
28. Y. Qi, Wen Ji et al. “Analysis and Design of Monitoring System in Coal Mine Based on Internet of Things.” Applied Mechanics and Materials(2012).
29. P. Jayarajan, K. V. Gayathri et al. “Improved Cost Effective IoT Based Coal Mining Safety System.” Journal of Physics: Conference Series(2021).
30. Y. S. Dohare, T. Maity et al. “Design of surveillance and safety system for underground coal mines based on low power WSN.” 2014 International Conference on Signal Propagation and Computer Technology (ICSPCT 2014)(2014).
二、硬件選型
1. NBIoT模塊 - BC26
BC26是一款支持NB-IoT(窄帶物聯(lián)網(wǎng))技術(shù)的無(wú)線通信模塊。它具有低功耗、廣覆蓋的特點(diǎn),非常適合用于遠(yuǎn)程數(shù)據(jù)傳輸。在這個(gè)項(xiàng)目中,BC26模塊將負(fù)責(zé)將采集到的各種環(huán)境信息上傳至華為云物聯(lián)網(wǎng)平臺(tái),確保數(shù)據(jù)能夠被遠(yuǎn)端服務(wù)器接收并處理。
2. 瓦斯?jié)舛葯z測(cè)模塊 - MQ5氣體傳感器
MQ5是一種半導(dǎo)體氣體傳感器,專門用于檢測(cè)可燃?xì)怏w如甲烷(瓦斯)、液化石油氣等。它具有高靈敏度和快速響應(yīng)時(shí)間。在本項(xiàng)目中,MQ5傳感器將用來(lái)監(jiān)測(cè)礦井內(nèi)的瓦斯?jié)舛?。一旦檢測(cè)到的濃度達(dá)到預(yù)設(shè)閾值,控制系統(tǒng)會(huì)立即啟動(dòng)通風(fēng)風(fēng)扇以降低有害氣體濃度。
3. 風(fēng)扇模塊 - 礦用通風(fēng)風(fēng)扇
為了有效降低礦井內(nèi)瓦斯等有害氣體的濃度,系統(tǒng)采用礦用通風(fēng)風(fēng)扇。這些風(fēng)扇通常設(shè)計(jì)為能夠在惡劣環(huán)境下工作,具備防塵、防水等特性。風(fēng)扇的啟停由繼電器控制,根據(jù)MQ5傳感器檢測(cè)到的瓦斯?jié)舛茸詣?dòng)調(diào)節(jié)。
4. OLED顯示屏 - SPI協(xié)議OLED顯示屏
OLED顯示屏以其高對(duì)比度、快速響應(yīng)時(shí)間和寬視角而聞名。在本項(xiàng)目中,采用SPI接口的OLED顯示屏來(lái)顯示實(shí)時(shí)采集的數(shù)據(jù),包括溫濕度、瓦斯?jié)舛鹊汝P(guān)鍵信息。這種顯示屏不僅清晰可見(jiàn),而且功耗較低,適合長(zhǎng)時(shí)間運(yùn)行。
5. 溫濕度傳感器 - DHT11
DHT11是一種經(jīng)濟(jì)實(shí)惠且易于使用的數(shù)字溫濕度傳感器。它能夠同時(shí)測(cè)量溫度和相對(duì)濕度,并通過(guò)單線數(shù)字接口輸出數(shù)據(jù)。在本項(xiàng)目中,DHT11傳感器用于監(jiān)測(cè)礦井內(nèi)的溫濕度條件。當(dāng)檢測(cè)到的數(shù)值超過(guò)設(shè)定的安全閾值時(shí),系統(tǒng)會(huì)觸發(fā)蜂鳴器報(bào)警。
6. 供電電源
- 控制板系統(tǒng)供電 :采用5V 2A外部穩(wěn)壓電源,為微控制器、傳感器以及其他低功耗電子元件提供穩(wěn)定的電力供應(yīng)。
- 其他電器供電 :對(duì)于高功耗設(shè)備如風(fēng)扇,則直接使用市電供電,以保證足夠的電力支持其正常工作。
7. 人體檢測(cè) - 紅外熱釋電模塊
紅外熱釋電傳感器利用人體發(fā)出的紅外輻射來(lái)檢測(cè)人員的存在。在本項(xiàng)目中,該傳感器用于監(jiān)測(cè)礦井內(nèi)是否有人員活動(dòng)。一旦檢測(cè)到人員存在,系統(tǒng)會(huì)點(diǎn)亮指示燈作為視覺(jué)提示,增強(qiáng)現(xiàn)場(chǎng)安全管理。
8. 主控芯片 - STM32F103RCT6
STM32F103RCT6是意法半導(dǎo)體公司推出的一款高性能ARM Cortex-M3微控制器。它具有豐富的外設(shè)資源和強(qiáng)大的計(jì)算能力,適用于各種嵌入式應(yīng)用。在本項(xiàng)目中,STM32F103RCT6作為主控芯片,負(fù)責(zé)處理來(lái)自各個(gè)傳感器的數(shù)據(jù)、執(zhí)行控制邏輯以及管理通信協(xié)議。
三、部署華為云物聯(lián)網(wǎng)平臺(tái)
華為云官網(wǎng): https://www.huaweicloud.com/
打開(kāi)官網(wǎng),搜索物聯(lián)網(wǎng),就能快速找到 設(shè)備接入IoTDA
。
3.1 物聯(lián)網(wǎng)平臺(tái)介紹
華為云物聯(lián)網(wǎng)平臺(tái)(IoT 設(shè)備接入云服務(wù))提供海量設(shè)備的接入和管理能力,將物理設(shè)備聯(lián)接到云,支撐設(shè)備數(shù)據(jù)采集上云和云端下發(fā)命令給設(shè)備進(jìn)行遠(yuǎn)程控制,配合華為云其他產(chǎn)品,幫助我們快速構(gòu)筑物聯(lián)網(wǎng)解決方案。
使用物聯(lián)網(wǎng)平臺(tái)構(gòu)建一個(gè)完整的物聯(lián)網(wǎng)解決方案主要包括3部分:物聯(lián)網(wǎng)平臺(tái)、業(yè)務(wù)應(yīng)用和設(shè)備。
物聯(lián)網(wǎng)平臺(tái)作為連接業(yè)務(wù)應(yīng)用和設(shè)備的中間層,屏蔽了各種復(fù)雜的設(shè)備接口,實(shí)現(xiàn)設(shè)備的快速接入;同時(shí)提供強(qiáng)大的開(kāi)放能力,支撐行業(yè)用戶構(gòu)建各種物聯(lián)網(wǎng)解決方案。
設(shè)備可以通過(guò)固網(wǎng)、2G/3G/4G/5G、NB-IoT、Wifi等多種網(wǎng)絡(luò)接入物聯(lián)網(wǎng)平臺(tái),并使用LWM2M/CoAP、MQTT、HTTPS協(xié)議將業(yè)務(wù)數(shù)據(jù)上報(bào)到平臺(tái),平臺(tái)也可以將控制命令下發(fā)給設(shè)備。
業(yè)務(wù)應(yīng)用通過(guò)調(diào)用物聯(lián)網(wǎng)平臺(tái)提供的API,實(shí)現(xiàn)設(shè)備數(shù)據(jù)采集、命令下發(fā)、設(shè)備管理等業(yè)務(wù)場(chǎng)景。
3.2 開(kāi)通物聯(lián)網(wǎng)服務(wù)
地址: https://www.huaweicloud.com/product/iothub.html
點(diǎn)擊立即創(chuàng)建
。
正在創(chuàng)建標(biāo)準(zhǔn)版實(shí)例,需要等待片刻。
創(chuàng)建完成之后,點(diǎn)擊實(shí)例名稱。 可以看到標(biāo)準(zhǔn)版實(shí)例的設(shè)備接入端口和地址。
在上面也能看到 免費(fèi)單元的限制。
開(kāi)通之后,點(diǎn)擊總覽
,也能查看接入信息。 我們當(dāng)前設(shè)備準(zhǔn)備采用MQTT協(xié)議接入華為云平臺(tái),這里可以看到MQTT協(xié)議的地址和端口號(hào)等信息。
總結(jié):
端口號(hào): MQTT (1883)| MQTTS (8883)
接入地址:ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com
**根據(jù)域名地址得到IP地址信息: **
打開(kāi)Windows電腦的命令行控制臺(tái)終端,使用ping
命令。ping
一下即可。
Microsoft Windows [版本 10.0.19045.4170]
(c) Microsoft Corporation。保留所有權(quán)利。
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 字節(jié)的數(shù)據(jù):
來(lái)自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=35ms TTL=93
來(lái)自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=36ms TTL=93
來(lái)自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=36ms TTL=93
來(lái)自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=39ms TTL=93
117.78.5.125 的 Ping 統(tǒng)計(jì)信息:
數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計(jì)時(shí)間(以毫秒為單位):
最短 = 35ms,最長(zhǎng) = 39ms,平均 = 36ms
C:Users11266 >
MQTT協(xié)議接入端口號(hào)有兩個(gè),1883是非加密端口,8883是證書加密端口,單片機(jī)無(wú)法加載證書,所以使用1883端口比較合適。 接下來(lái)的ESP8266就采用1883端口連接華為云物聯(lián)網(wǎng)平臺(tái)。
3.3 創(chuàng)建產(chǎn)品
(1)創(chuàng)建產(chǎn)品
(2)填寫產(chǎn)品信息
根據(jù)自己產(chǎn)品名字填寫,下面的設(shè)備類型選擇自定義類型。
(3)產(chǎn)品創(chuàng)建成功
創(chuàng)建完成之后點(diǎn)擊查看詳情。
(4)添加自定義模型
產(chǎn)品創(chuàng)建完成之后,點(diǎn)擊進(jìn)入產(chǎn)品詳情頁(yè)面,翻到最下面可以看到模型定義。
模型簡(jiǎn)單來(lái)說(shuō): 就是存放設(shè)備上傳到云平臺(tái)的數(shù)據(jù)。
你可以根據(jù)自己的產(chǎn)品進(jìn)行創(chuàng)建。
比如:
煙霧可以叫 MQ2
溫度可以叫 Temperature
濕度可以叫 humidity
火焰可以叫 flame
其他的傳感器自己用單詞簡(jiǎn)寫命名即可。 這就是你的單片機(jī)設(shè)備端上傳到服務(wù)器的數(shù)據(jù)名字。
先點(diǎn)擊自定義模型。
再創(chuàng)建一個(gè)服務(wù)ID。
接著點(diǎn)擊新增屬性。
3.4 添加設(shè)備
產(chǎn)品是屬于上層的抽象模型,接下來(lái)在產(chǎn)品模型下添加實(shí)際的設(shè)備。添加的設(shè)備最終需要與真實(shí)的設(shè)備關(guān)聯(lián)在一起,完成數(shù)據(jù)交互。
(1)注冊(cè)設(shè)備
(2)根據(jù)自己的設(shè)備填寫
(3)保存設(shè)備信息
創(chuàng)建完畢之后,點(diǎn)擊保存并關(guān)閉,得到創(chuàng)建的設(shè)備密匙信息。該信息在后續(xù)生成MQTT三元組的時(shí)候需要使用。
(4)設(shè)備創(chuàng)建完成
(5)設(shè)備詳情
3.5 MQTT協(xié)議主題訂閱與發(fā)布
(1)MQTT協(xié)議介紹
當(dāng)前的設(shè)備是采用MQTT協(xié)議與華為云平臺(tái)進(jìn)行通信。
MQTT是一個(gè)物聯(lián)網(wǎng)傳輸協(xié)議,它被設(shè)計(jì)用于輕量級(jí)的發(fā)布/訂閱式消息傳輸,旨在為低帶寬和不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中的物聯(lián)網(wǎng)設(shè)備提供可靠的網(wǎng)絡(luò)服務(wù)。MQTT是專門針對(duì)物聯(lián)網(wǎng)開(kāi)發(fā)的輕量級(jí)傳輸協(xié)議。MQTT協(xié)議針對(duì)低帶寬網(wǎng)絡(luò),低計(jì)算能力的設(shè)備,做了特殊的優(yōu)化,使得其能適應(yīng)各種物聯(lián)網(wǎng)應(yīng)用場(chǎng)景。目前MQTT擁有各種平臺(tái)和設(shè)備上的客戶端,已經(jīng)形成了初步的生態(tài)系統(tǒng)。
MQTT是一種消息隊(duì)列協(xié)議,使用發(fā)布/訂閱消息模式,提供一對(duì)多的消息發(fā)布,解除應(yīng)用程序耦合,相對(duì)于其他協(xié)議,開(kāi)發(fā)更簡(jiǎn)單;MQTT協(xié)議是工作在TCP/IP協(xié)議上;由TCP/IP協(xié)議提供穩(wěn)定的網(wǎng)絡(luò)連接;所以,只要具備TCP協(xié)議棧的網(wǎng)絡(luò)設(shè)備都可以使用MQTT協(xié)議。 本次設(shè)備采用的ESP8266就具備TCP協(xié)議棧,能夠建立TCP連接,所以,配合STM32代碼里封裝的MQTT協(xié)議,就可以與華為云平臺(tái)完成通信。
華為云的MQTT協(xié)議接入幫助文檔在這里: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
業(yè)務(wù)流程:
(2)華為云平臺(tái)MQTT協(xié)議使用限制
描述 | 限制 |
---|---|
支持的MQTT協(xié)議版本 | 3.1.1 |
與標(biāo)準(zhǔn)MQTT協(xié)議的區(qū)別 | 支持Qos 0和Qos 1支持Topic自定義不支持QoS2不支持will、retain msg |
MQTTS支持的安全等級(jí) | 采用TCP通道基礎(chǔ) + TLS協(xié)議(最高TLSv1.3版本) |
單帳號(hào)每秒最大MQTT連接請(qǐng)求數(shù) | 無(wú)限制 |
單個(gè)設(shè)備每分鐘支持的最大MQTT連接數(shù) | 1 |
單個(gè)MQTT連接每秒的吞吐量,即帶寬,包含直連設(shè)備和網(wǎng)關(guān) | 3KB/s |
MQTT單個(gè)發(fā)布消息最大長(zhǎng)度,超過(guò)此大小的發(fā)布請(qǐng)求將被直接拒絕 | 1MB |
MQTT連接心跳時(shí)間建議值 | 心跳時(shí)間限定為30至1200秒,推薦設(shè)置為120秒 |
產(chǎn)品是否支持自定義Topic | 支持 |
消息發(fā)布與訂閱 | 設(shè)備只能對(duì)自己的Topic進(jìn)行消息發(fā)布與訂閱 |
每個(gè)訂閱請(qǐng)求的最大訂閱數(shù) | 無(wú)限制 |
(3)主題訂閱格式
幫助文檔地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
對(duì)于設(shè)備而言,一般會(huì)訂閱平臺(tái)下發(fā)消息給設(shè)備 這個(gè)主題。
設(shè)備想接收平臺(tái)下發(fā)的消息,就需要訂閱平臺(tái)下發(fā)消息給設(shè)備 的主題,訂閱后,平臺(tái)下發(fā)消息給設(shè)備,設(shè)備就會(huì)收到消息。
如果設(shè)備想要知道平臺(tái)下發(fā)的消息,需要訂閱上面圖片里標(biāo)注的主題。
以當(dāng)前設(shè)備為例,最終訂閱主題的格式如下:
$oc/devices/{device_id}/sys/messages/down
最終的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down
(4)主題發(fā)布格式
對(duì)于設(shè)備來(lái)說(shuō),主題發(fā)布表示向云平臺(tái)上傳數(shù)據(jù),將最新的傳感器數(shù)據(jù),設(shè)備狀態(tài)上傳到云平臺(tái)。
這個(gè)操作稱為:屬性上報(bào)。
幫助文檔地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html
根據(jù)幫助文檔的介紹, 當(dāng)前設(shè)備發(fā)布主題,上報(bào)屬性的格式總結(jié)如下:
發(fā)布的主題格式:
$oc/devices/{device_id}/sys/properties/report
最終的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report
發(fā)布主題時(shí),需要上傳數(shù)據(jù),這個(gè)數(shù)據(jù)格式是JSON格式。
上傳的JSON數(shù)據(jù)格式如下:
{
"services": [
{
"service_id": < 填服務(wù)ID >,
"properties": {
"< 填屬性名稱1 >": < 填屬性值 >,
"< 填屬性名稱2 >": < 填屬性值 >,
..........
}
}
]
}
根據(jù)JSON格式,一次可以上傳多個(gè)屬性字段。 這個(gè)JSON格式里的,服務(wù)ID,屬性字段名稱,屬性值類型,在前面創(chuàng)建產(chǎn)品的時(shí)候就已經(jīng)介紹了,不記得可以翻到前面去查看。
根據(jù)這個(gè)格式,組合一次上傳的屬性數(shù)據(jù):
{"services": [{"service_id": "stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}
3.6 MQTT三元組
MQTT協(xié)議登錄需要填用戶ID,設(shè)備ID,設(shè)備密碼等信息,就像我們平時(shí)登錄QQ,微信一樣要輸入賬號(hào)密碼才能登錄。MQTT協(xié)議登錄的這3個(gè)參數(shù),一般稱為MQTT三元組。
接下來(lái)介紹,華為云平臺(tái)的MQTT三元組參數(shù)如何得到。
(1)MQTT服務(wù)器地址
要登錄MQTT服務(wù)器,首先記得先知道服務(wù)器的地址是多少,端口是多少。
幫助文檔地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home
MQTT協(xié)議的端口支持1883和8883,它們的區(qū)別是:8883 是加密端口更加安全。但是單片機(jī)上使用比較困難,所以當(dāng)前的設(shè)備是采用1883端口進(jìn)連接的。
根據(jù)上面的域名和端口號(hào),得到下面的IP地址和端口號(hào)信息: 如果設(shè)備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)
華為云的MQTT服務(wù)器地址:117.78.5.125
華為云的MQTT端口號(hào):1883
如何得到IP地址?如何域名轉(zhuǎn)IP? 打開(kāi)Windows的命令行輸入以下命令。
ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com
(2)生成MQTT三元組
華為云提供了一個(gè)在線工具,用來(lái)生成MQTT鑒權(quán)三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打開(kāi)這個(gè)工具,填入設(shè)備的信息(也就是剛才創(chuàng)建完設(shè)備之后保存的信息),點(diǎn)擊生成,就可以得到MQTT的登錄信息了。
下面是打開(kāi)的頁(yè)面:
填入設(shè)備的信息: (上面兩行就是設(shè)備創(chuàng)建完成之后保存得到的)
直接得到三元組信息。
得到三元組之后,設(shè)備端通過(guò)MQTT協(xié)議登錄鑒權(quán)的時(shí)候,填入?yún)?shù)即可。
ClientId 663cb18871d845632a0912e7_dev1_0_0_2024050911
Username 663cb18871d845632a0912e7_dev1
Password 71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237
3.7 模擬設(shè)備登錄測(cè)試
經(jīng)過(guò)上面的步驟介紹,已經(jīng)創(chuàng)建了產(chǎn)品,設(shè)備,數(shù)據(jù)模型,得到MQTT登錄信息。 接下來(lái)就用MQTT客戶端軟件模擬真實(shí)的設(shè)備來(lái)登錄平臺(tái)。測(cè)試與服務(wù)器通信是否正常。
(1)填入登錄信息
打開(kāi)MQTT客戶端軟件,對(duì)號(hào)填入相關(guān)信息(就是上面的文本介紹)。然后,點(diǎn)擊登錄,訂閱主題,發(fā)布主題。
(2)打開(kāi)網(wǎng)頁(yè)查看
完成上面的操作之后,打開(kāi)華為云網(wǎng)頁(yè)后臺(tái),可以看到設(shè)備已經(jīng)在線了。
點(diǎn)擊詳情頁(yè)面,可以看到上傳的數(shù)據(jù):
到此,云平臺(tái)的部署已經(jīng)完成,設(shè)備已經(jīng)可以正常上傳數(shù)據(jù)了。
(3)MQTT登錄測(cè)試參數(shù)總結(jié)
MQTT服務(wù)器: 117.78.5.125
MQTT端口號(hào): 183
//物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息
#define MQTT_ClientID "663cb18871d845632a0912e7_dev1_0_0_2024050911"
#define MQTT_UserName "663cb18871d845632a0912e7_dev1"
#define MQTT_PassWord "71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237"
//訂閱與發(fā)布的主題
#define SET_TOPIC "$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down" //訂閱
#define POST_TOPIC "$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report" //發(fā)布
發(fā)布的數(shù)據(jù):
{"services": [{"service_id": "stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}
3.8 創(chuàng)建IAM賬戶
創(chuàng)建一個(gè)IAM賬戶,因?yàn)榻酉聛?lái)開(kāi)發(fā)上位機(jī),需要使用云平臺(tái)的API接口,這些接口都需要token進(jìn)行鑒權(quán)。簡(jiǎn)單來(lái)說(shuō),就是身份的認(rèn)證。 調(diào)用接口獲取Token時(shí),就需要填寫IAM賬號(hào)信息。所以,接下來(lái)演示一下過(guò)程。
地址: https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/users
**【1】獲取項(xiàng)目憑證 ** 點(diǎn)擊左上角用戶名,選擇下拉菜單里的我的憑證
項(xiàng)目憑證:
28add376c01e4a61ac8b621c714bf459
【2】創(chuàng)建IAM用戶
鼠標(biāo)放在左上角頭像上,在下拉菜單里選擇統(tǒng)一身份認(rèn)證
。
點(diǎn)擊左上角創(chuàng)建用戶
。
創(chuàng)建成功:
【3】創(chuàng)建完成
用戶信息如下:
主用戶名 l19504562721
IAM用戶 ds_abc
密碼 DS12345678
3.9 獲取影子數(shù)據(jù)
幫助文檔:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html
設(shè)備影子介紹:
設(shè)備影子是一個(gè)用于存儲(chǔ)和檢索設(shè)備當(dāng)前狀態(tài)信息的JSON文檔。
每個(gè)設(shè)備有且只有一個(gè)設(shè)備影子,由設(shè)備ID唯一標(biāo)識(shí)
設(shè)備影子僅保存最近一次設(shè)備的上報(bào)數(shù)據(jù)和預(yù)期數(shù)據(jù)
無(wú)論該設(shè)備是否在線,都可以通過(guò)該影子獲取和設(shè)置設(shè)備的屬性
簡(jiǎn)單來(lái)說(shuō):設(shè)備影子就是保存,設(shè)備最新上傳的一次數(shù)據(jù)。
我們?cè)O(shè)計(jì)的軟件里,如果想要獲取設(shè)備的最新?tīng)顟B(tài)信息,就采用設(shè)備影子接口。
如果對(duì)接口不熟悉,可以先進(jìn)行在線調(diào)試:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow
在線調(diào)試接口,可以請(qǐng)求影子接口,了解請(qǐng)求,與返回的數(shù)據(jù)格式。
調(diào)試完成看右下角的響應(yīng)體,就是返回的影子數(shù)據(jù)。
設(shè)備影子接口返回的數(shù)據(jù)如下:
{
"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
}
]
}
調(diào)試成功之后,可以得到訪問(wèn)影子數(shù)據(jù)的真實(shí)鏈接,接下來(lái)的代碼開(kāi)發(fā)中,就采用Qt寫代碼訪問(wèn)此鏈接,獲取影子數(shù)據(jù),完成上位機(jī)開(kāi)發(fā)。
鏈接如下:
https://ad635970a1.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/28add376c01e4a61ac8b621c714bf459/devices/663cb18871d845632a0912e7_dev1/shadow
四、上位機(jī)開(kāi)發(fā)
為了方便查看設(shè)備上傳的數(shù)據(jù),接下來(lái)利用Qt開(kāi)發(fā)一款Android手機(jī)APP 和 Windows上位機(jī)。
使用華為云平臺(tái)提供的API接口獲取設(shè)備上傳的數(shù)據(jù),進(jìn)行可視化顯示,以及遠(yuǎn)程控制設(shè)備。
4.1 Qt開(kāi)發(fā)環(huán)境安裝
Qt的中文官網(wǎng): https://www.qt.io/zh-cn/
QT5.12.6的下載地址:https://download.qt.io/archive/qt/5.12/5.12.6
打開(kāi)下載鏈接后選擇下面的版本進(jìn)行下載:
qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details
軟件安裝時(shí)斷網(wǎng)安裝,否則會(huì)提示輸入賬戶。
安裝的時(shí)候,第一個(gè)復(fù)選框里勾選一個(gè)mingw 32
編譯器即可,其他的不管默認(rèn)就行,直接點(diǎn)擊下一步繼續(xù)安裝。
選擇MinGW 32-bit 編譯器: (一定要看清楚了)
說(shuō)明: 我這里只是介紹PC端,也就是Windows系統(tǒng)下的Qt環(huán)境搭建。 Android的開(kāi)發(fā)環(huán)境比較麻煩,如果想學(xué)習(xí)Android開(kāi)發(fā),想編譯Android程序的APP,需要自己去搭建Android環(huán)境。
也可以看下面這篇文章,不過(guò)這個(gè)文章是在Qt開(kāi)發(fā)專欄里付費(fèi)的,需要訂閱專欄才可以看。 如果不想付費(fèi)看,也可以自行找其他教程,自己搭建好必須的環(huán)境就行了
Android環(huán)境搭建的博客鏈接: https://blog.csdn.net/xiaolong1126626497/article/details/117254453
4.2 新建上位機(jī)工程
前面2講解了需要用的API接口,接下來(lái)就使用Qt設(shè)計(jì)上位機(jī),設(shè)計(jì)界面,完成整體上位機(jī)的邏輯設(shè)計(jì)。
【1】新建工程
【2】設(shè)置項(xiàng)目的名稱。
【3】選擇編譯系統(tǒng)
【4】選擇默認(rèn)繼承的類
【5】選擇編譯器
【6】點(diǎn)擊完成
【7】工程創(chuàng)建完成
4.3 設(shè)計(jì)UI界面與工程配置
【1】打開(kāi)UI文件
打開(kāi)默認(rèn)的界面如下:
【2】開(kāi)始設(shè)計(jì)界面
根據(jù)自己需求設(shè)計(jì)界面。
4.4 編譯Windows上位機(jī)
點(diǎn)擊軟件左下角的綠色三角形按鈕進(jìn)行編譯運(yùn)行。
編譯之后的效果:
4.5 配置Android環(huán)境
如果想編譯Android手機(jī)APP,必須要先自己配置好自己的Android環(huán)境。(搭建環(huán)境的過(guò)程可以自行百度搜索學(xué)習(xí))
然后才可以進(jìn)行下面的步驟。
【1】選擇Android編譯器
【2】創(chuàng)建Android配置文件
創(chuàng)建完成。
【3】配置Android圖標(biāo)與名稱
【3】編譯Android上位機(jī)
Qt本身是跨平臺(tái)的,直接選擇Android的編譯器,就可以將程序編譯到Android平臺(tái)。
然后點(diǎn)擊構(gòu)建。
成功之后,在目錄下可以看到生成的apk
文件,也就是Android手機(jī)的安裝包,電腦端使用QQ
發(fā)送給手機(jī)QQ,手機(jī)登錄QQ接收,就能直接安裝。
生成的apk
的目錄在哪里呢? 編譯完成之后,在控制臺(tái)會(huì)輸出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
五、 BC26-NBIOT模塊調(diào)試過(guò)程
5.1 模塊調(diào)試接線
5.2 測(cè)試模塊
第一步接上之后,串口調(diào)試助手選擇波特率為115200,勾選軟件上的發(fā)送新行選項(xiàng)。發(fā)送AT
過(guò)去,正常模塊會(huì)返回OK
。
只有收到了OK,才表示模塊工作正常。
5.3 上電初始化操作
【1】查詢模塊是否正常
AT
OK
【2】獲取卡號(hào),查詢卡是否插好
AT+CIMI
460041052911195
OK
【3】激活網(wǎng)絡(luò)
AT+CGATT=1
OK
【4】獲取網(wǎng)絡(luò)激活狀態(tài)
AT+CGATT?
+CGATT: 1
OK
【5】查詢網(wǎng)絡(luò)質(zhì)量
AT+CSQ
+CSQ: 26,0
OK
【6】 檢查網(wǎng)絡(luò)狀態(tài)
AT+CEREG=? //
+CEREG: 0,1 //找網(wǎng)成功
OK
5.4 開(kāi)啟GPS定位
如果需要使用GPS定位就開(kāi),不需要使用就不用管。
使用GPS定位還需要將模塊上的GPS天線接好,否則也是沒(méi)有信號(hào)的。
官方文檔:
【1】激活GPS,要等一段時(shí)間
AT+QGNSSC=1
OK
【2】查詢激活狀態(tài),1表示成功激活
AT+QGNSSC?
+QGNSSC: 1
OK
【3】獲取一次GPS定位語(yǔ)句
AT+QGNSSRD="NMEA/RMC"
+QGNSSRD: $GNRMC,120715.00,A,3150.78179,N,11711.93433,E,0.000,,310818,,,A,V*19
OK
六、STM32代碼開(kāi)發(fā)
6.1 BC26-NBIOT配置代碼
#include "ec20.h"
#include "stdlib.h"
#include "string.h"
#include "usart.h"
#include "iwdg.h"
int errcount = 0;
char atstr[BUFLEN];
char AtStrBuf[BUFLEN];
char *strx,*extstrx,*Readystrx;
extern char AtRxBuffer[512],Rxcouter;
////////////////////////////////////////////////////////////////////
char GPRMCSTR[128]; //轉(zhuǎn)載GPS信息 GPRMC 經(jīng)緯度存儲(chǔ)的字符串
char GPRMCSTRLON[64]; //經(jīng)度存儲(chǔ)字符串 也就是119.20694
char GPRMCSTRLAT[64]; //維度存儲(chǔ)字符串,也就是26.06451
char IMEINUMBER[64];//+CGSN: "869523052178994"
//////////////////下面是糾正火星坐標(biāo)的變量定義/////////////////////////
int Get_GPSdata(void);
void Getdata_Change(char status);
typedef struct
{
char UtcDate[6];
char longitude[11];//經(jīng)度原數(shù)據(jù)
char Latitude[10];//緯度源數(shù)據(jù)
char longitudess[4];//整數(shù)部分
char Latitudess[3];
char longitudedd[8];//小數(shù)點(diǎn)部分
char Latitudedd[8];
char Truelongitude[12];//轉(zhuǎn)換過(guò)數(shù)據(jù)
char TrueLatitude[11];//轉(zhuǎn)換過(guò)數(shù)據(jù)
char getstautus;//獲取到定位的標(biāo)志狀態(tài)
float gpsdata[2];
}LongLatidata;
LongLatidata latdata;
float tempdata[2];
char latStrAF[64]; //存放數(shù)據(jù)經(jīng)緯度用來(lái)發(fā)送
char lonStrAF[64]; //存放數(shù)據(jù)經(jīng)緯度用來(lái)顯示
//////////////////////////火星糾偏結(jié)束///////////////////////////////////
////////////////////////只要修改三要素/////////////////////////////////
#define PRODUCEKEY "6402ac07352830580e48ff7b_dev1_0_0_2023030403" //設(shè)備ID
#define DEVICENAME "6402ac07352830580e48ff7b_dev1" //用戶名
#define DEVICESECRET "517f1c8f18d6b7b2e4c134653dc892edd38c3e86153506df57f7c296d13b37f7" //密碼
void Clear_Buffer(void)//清空緩存
{
u8 i;
NBIOTSend_RecAccessMode();
printf(AtRxBuffer);
for(i=0;i< Rxcouter;i++)
AtRxBuffer[i]=0;//緩存
Rxcouter=0;
}
//初始化模塊
void NBIOT_Init(void)
{
Uart2_SendStr("ATrn");
delay_ms(500);
strx=strstr((const char*)AtRxBuffer,(const char*)"OK");//返回OK
errcount = 0;
while(strx==NULL)
{
errcount++;
printf("rn單片機(jī)正在連接到模塊...rn");
Clear_Buffer();
Uart2_SendStr("ATrn");
delay_ms(500);
strx=strstr((const char*)AtRxBuffer,(const char*)"OK");//返回OK
if(errcount >50) //防止死循環(huán)
{
errcount = 0;
reset_4g();
__set_FAULTMASK(1); //關(guān)閉總中斷
NVIC_SystemReset(); //請(qǐng)求單片機(jī)重啟
break;
}
}
Uart2_SendStr("ATE1rn"); //回顯
delay_ms(500);
Clear_Buffer();
/////////////////////////////////
Uart2_SendStr("AT+CPIN?rn");//檢查SIM卡是否在位
delay_ms(500);
strx=strstr((const char*)AtRxBuffer,(const char*)"+CPIN: READY");//查看是否返回ready
while(strx==NULL)
{
Clear_Buffer();
Uart2_SendStr("AT+CPIN?rn");
delay_ms(500);
strx=strstr((const char*)AtRxBuffer,(const char*)"+CPIN: READY");//檢查SIM卡是否在位,等待卡在位,如果卡識(shí)別不到,剩余的工作就沒(méi)法做了
}
Clear_Buffer();
///////////////////////////////////////
Uart2_SendStr("AT+CSQrn"); //檢查CSQ
delay_ms(500);
Clear_Buffer();
Uart2_SendStr("ATIrn"); //檢查模塊的版本號(hào)
delay_ms(500);
Clear_Buffer();
///////////////////////////////////
Uart2_SendStr("AT+CREG?rn");//查看是否注冊(cè)GSM網(wǎng)絡(luò)
delay_ms(500);
Clear_Buffer();
Uart2_SendStr("AT+CEREG?rn");//查看注冊(cè)到哪個(gè)運(yùn)營(yíng)商,支持移動(dòng) 聯(lián)通 電信
delay_ms(500);
Clear_Buffer();
Uart2_SendStr("AT+CIMIrn");//獲取卡號(hào),類似是否存在卡的意思,比較重要。
delay_ms(1000);
strx=strstr((const char*)AtRxBuffer,(const char*)"OK");//只要卡不錯(cuò)誤 基本就成功
if(strx)
{
printf("============rn我的卡號(hào)是 : %s rn===============rn",AtRxBuffer);
delay_ms(1000);
Clear_Buffer();
}
else
{
// printf("卡錯(cuò)誤 : %s rn",AtRxBuffer);
delay_ms(300);
Clear_Buffer();
}
Clear_Buffer();
Uart2_SendStr("AT+CGSNrn");//激活網(wǎng)絡(luò),PDP
delay_ms(300);
strx=strstr((const char*)AtRxBuffer,(const char*)"OK");//返OK
Clear_Buffer();
Uart2_SendStr("AT+CGATT?rn");//查詢激活狀態(tài)
delay_ms(300);
strx=strstr((const char*)AtRxBuffer,(const char*)"+CGATT: 1");//返1 表明激活成功 獲取到IP地址了
Clear_Buffer();
errcount = 0;
while(strx==NULL)
{
errcount++;
Clear_Buffer();
Uart2_SendStr("AT+CGATT?rn");//獲取激活狀態(tài)
delay_ms(300);
strx=strstr((const char*)AtRxBuffer,(const char*)"+CGATT: 1");//返回1,表明注網(wǎng)成功
if(errcount >100) //防止死循環(huán)
{
errcount = 0;
reset_4g();
__set_FAULTMASK(1); //關(guān)閉總中斷
NVIC_SystemReset(); //請(qǐng)求單片機(jī)重啟
break;
}
}
Uart2_SendStr("AT+QCCIDrn");//獲取當(dāng)前卡的IP地址
delay_ms(500);
Clear_Buffer();
}
void Start_GPS(void)
{
Clear_Buffer();
Uart2_SendStr("AT+QGPS=1rn");//查詢激活狀態(tài)
delay_ms(300);
strx=strstr((const char*)AtStrBuf,(const char*)"OK");//返1
if(strx==NULL)
{
//__set_FAULTMASK(1);
//NVIC_SystemReset(); //超時(shí)重啟
delay_ms(300);
}
Clear_Buffer();
}
//////////////////////////////獲取定位數(shù)據(jù)/////////////////////////////////////////////
/*
AT+QGPSGNMEA="RMC"
+QGPSGNMEA: $GNRMC,035645.00,A,2603.9111,N,11912.4140,E,0.336,,140821,,,A,V*19
OK
AT+QGPSGNMEA="RMC"
+QGPSGNMEA: $GPRMC,145620.00,A,2603.972207,N,11912.411739,E,0.0,0.0,171022,3.5,W,A*2F
*/
char *Get_GPS_RMC(char type)
{
Clear_Buffer();
memset(GPRMCSTR,0,128);
Uart2_SendStr("AT+QGPSGNMEA="RMC"rn");//查詢激活狀態(tài)
delay_ms(300);
strx=strstr((const char*)AtRxBuffer,(const char*)"$GPRMC");//返1
while(strx==NULL)
{
Clear_Buffer();
Uart2_SendStr("AT+QGPSGNMEA="RMC"rn");//獲取激活狀態(tài)
delay_ms(300);
strx=strstr((const char*)AtRxBuffer,(const char*)"$GPRMC");//返回1,表明注網(wǎng)成功
}
sprintf(GPRMCSTR,"%s",strx);
Clear_Buffer(); //打印收到的GPS信息
GPRMCSTR[2]= 'P';
//printf("============GETGPRMC==============rn%s",GPRMCSTR); //打印GPRMC
if(GPRMCSTR[17]=='A')
{
memset(latStrAF,0,64);
memset(lonStrAF,0,64);
Get_GPSdata();
if(type==1)
return latStrAF;
if(type==2)
return lonStrAF;
}
return 0;
}
/*****************************************************
下面是矯正火星坐標(biāo)的
*****************************************************/
//解GPS析函數(shù)
//$GPRMC,134952.00,A,2603.9576,N,11912.4098,E,0.154,,280821,,,A,V*18
int Get_GPSdata()
{
int i=0;
strx=strstr((const char*)GPRMCSTR,(const char*)"A,");//獲取緯度的位置
if(strx)
{
for(i=0;i< 9;i++)
{
latdata.Latitude[i]=strx[i+2];//獲取緯度值2603.9576
}
strx=strstr((const char*)GPRMCSTR,(const char*)"N,");//獲取經(jīng)度值
if(strx)
{
for(i=0;i< 10;i++) //獲取經(jīng)度 11912.4098
{
latdata.longitude[i]=strx[i+2];
}
}
printf("latdata.Latitude ,%s rn",latdata.Latitude);
printf("latdata.longitude ,%s rn",latdata.longitude);
latdata.getstautus=1;//
}
else
{
latdata.getstautus=0;
}
Getdata_Change(latdata.getstautus);//數(shù)據(jù)換算
Clear_Buffer();
return 0;
}
/*************解析出經(jīng)緯度數(shù)據(jù),然后直接提交數(shù)據(jù)*******************/
void Getdata_Change(char status)
{
unsigned char i;
if(status)
{
for(i=0;i< 3;i++)
latdata.longitudess[i]=latdata.longitude[i];
for(i=3;i< 10;i++)
latdata.longitudedd[i-3]=latdata.longitude[i];
latdata.gpsdata[0]=(latdata.longitudess[0]-0x30)*100+(latdata.longitudess[1]-0x30)*10+(latdata.longitudess[2]-0x30)
+((latdata.longitudedd[0]-0x30)*10+(latdata.longitudedd[1]-0x30)+(float)(latdata.longitudedd[3]-0x30)/10+
(float)(latdata.longitudedd[4]-0x30)/100+(float)(latdata.longitudedd[5]-0x30)/1000+(float)(latdata.longitudedd[6]-0x30)/10000)/60.0;//獲取完整的數(shù)據(jù)
///////////////////////////////////////////
for(i=0;i< 2;i++)
latdata.Latitudess[i]=latdata.Latitude[i];
for(i=2;i< 9;i++)
latdata.Latitudedd[i-2]=latdata.Latitude[i];
latdata.gpsdata[1]=(float)(latdata.Latitudess[0]-0x30)*10+(latdata.Latitudess[1]-0x30)
+((latdata.Latitudedd[0]-0x30)*10+(latdata.Latitudedd[1]-0x30)+(float)(latdata.Latitudedd[3]-0x30)/10+
(float)(latdata.Latitudedd[4]-0x30)/100+(float)(latdata.Latitudedd[5]-0x30)/1000+(float)(latdata.Latitudedd[6]-0x30)/10000)/60.0;//獲取完整的數(shù)據(jù)b
sprintf(latStrAF,"%f",latdata.gpsdata[1]);
sprintf(lonStrAF,"%f",latdata.gpsdata[0]);
printf("latStrAF,%s rn",latStrAF);
printf("lonStrAF,%s rn",lonStrAF);
}
else
{
latdata.gpsdata[0]=0;
latdata.gpsdata[1]=0;
}
}
/*****************************************************
糾偏結(jié)束
*****************************************************/
/*********************************************************************************
** 函數(shù)名稱 : MakeOnenetPayload(char *Str,u8 Temp,u8 Humi)
** 函數(shù)功能 : 將溫度與濕度封裝成Onenet有效載荷包
** 輸 入 : *str有效載荷保存的目標(biāo)字符串,
** 輸 入 : Temp 溫度值
** 輸 入 : Humi 濕度值
** 輸 出 : 有效載荷字符串
** 返 回 : 有效載荷字符串長(zhǎng)度
*********************************************************************************/
char JsonBuf[256];//臨時(shí)數(shù)據(jù)緩存
u8 MakeOnenetPayload(u8 *Str,u8 Temp,u8 Humi)//將溫度與濕度封裝成Onenet有效載荷包
{
char Payload[] = "{"datastreams":[{"id":"Temp","datapoints":[{"value":%d}]},{"id":"Humi","datapoints":[{"value":%d}]}]}";//onenet有效載荷固定格式
unsigned short StrLen;//有效載荷數(shù)據(jù)長(zhǎng)度
memset(JsonBuf,0,256);
sprintf(JsonBuf,Payload,Temp,Humi);//合成數(shù)據(jù)有效載荷封裝
//printf("rn有效載荷(%d):[%s]rn",strlen(JsonBuf),(char *)JsonBuf);
StrLen = strlen(JsonBuf)/sizeof(char);//計(jì)算有效載荷的數(shù)據(jù)長(zhǎng)度
//printf("rn有效載荷長(zhǎng)度(%d)rn",StrLen);
Str[0] = 'x01';//報(bào)文第一個(gè)字節(jié)的固定顯示
//printf("rnStr[0]=0X(%02X)rn",Str[0]);
//報(bào)文第2個(gè)字節(jié)和第三個(gè)字節(jié)表示有效載荷的長(zhǎng)度的固定顯示
Str[1] = (StrLen & 0XFF00) > >8;//高位
//printf("rnStr[1]=0X(%02X)rn",Str[1]);
Str[2] = StrLen & 0XFF;//低位
//printf("rnStr[2]=0X(%02X)rn",Str[2]);
//拷貝有效載荷數(shù)據(jù)到Str
memcpy(Str+3,JsonBuf,StrLen);//從第三個(gè)字節(jié)開(kāi)始拷貝
return (StrLen+3);//返回長(zhǎng)度
}
u8 CSTX_4G_MQTT_Senddata(char *data)
{
u8 JsonLen;//Json包數(shù)據(jù)長(zhǎng)度
memset(AtStrBuf,0,BUFLEN);
Clear_Buffer();
sprintf(AtStrBuf,"AT+QMTPUB=0,0,0,0,"$oc/devices/6402ac07352830580e48ff7b_dev1/sys/properties/report"rn");
// printf("ATSTR = %s rn",AtStrBuf);
Uart2_SendStr(AtStrBuf);//mqtt提交
delay_ms(300);
strx=strstr((const char*)AtRxBuffer,(const char*)" >");//準(zhǔn)備發(fā)送數(shù)據(jù)
errcount=0;
while(strx==NULL)
{
errcount++;
strx=strstr((const char*)AtRxBuffer,(const char*)" >");//準(zhǔn)備發(fā)送數(shù)據(jù) 模塊的反饋
delay_ms(30);
if(errcount >10) //超時(shí)退出
{
errcount = 0;
break;
}
}
Clear_Buffer();
USART2_Send((char *)data,strlen(data));//發(fā)送json數(shù)據(jù)
UART2_send_byte(0x1A);
delay_ms(300);
errcount=0;
strx=strstr((const char*)AtRxBuffer,(const char*)"+QMTPUB: 0,0,0");//返SEND OK +QMTPUB: 0,0,0
while(strx==NULL)
{
errcount++;
strx=strstr((const char*)AtRxBuffer,(const char*)"+QMTPUB: 0,0,0");//返SEND OK
delay_ms(30);
if(errcount >10) //超時(shí)退出
{
errcount = 0;
break;
}
}
Clear_Buffer();
return 0;
}
u8 MakeOnenetPayloadGPS(u8* Str,char *latstr,char * lonstr)//將溫度與濕度封裝成Onenet有效載荷包
{
char Payload[] = "{"datastreams":[{"id":"location","datapoints":[{"value":{"lon":%s,"lat":%s}}]}]}";//onenet有效載荷固定格式
unsigned short StrLen;//有效載荷數(shù)據(jù)長(zhǎng)度
memset(JsonBuf,0,256);
sprintf(JsonBuf,Payload,lonstr,latstr);//合成數(shù)據(jù)有效載荷封裝
printf("JSONEND= %s rn",JsonBuf);
//printf("rn有效載荷(%d):[%s]rn",strlen(JsonBuf),(char *)JsonBuf);
StrLen = strlen(JsonBuf)/sizeof(char);//計(jì)算有效載荷的數(shù)據(jù)長(zhǎng)度
//printf("rn有效載荷長(zhǎng)度(%d)rn",StrLen);
Str[0] = 'x01';//報(bào)文第一個(gè)字節(jié)的固定顯示
//printf("rnStr[0]=0X(%02X)rn",Str[0]);
//報(bào)文第2個(gè)字節(jié)和第三個(gè)字節(jié)表示有效載荷的長(zhǎng)度的固定顯示
Str[1] = (StrLen & 0XFF00) > >8;//高位
//printf("rnStr[1]=0X(%02X)rn",Str[1]);
Str[2] = StrLen & 0XFF;//低位
//printf("rnStr[2]=0X(%02X)rn",Str[2]);
//拷貝有效載荷數(shù)據(jù)到Str
memcpy(Str+3,JsonBuf,StrLen);//從第三個(gè)字節(jié)開(kāi)始拷貝
return (StrLen+3);//返回長(zhǎng)度
}
void CSTX_4G_ONENETIOTSenddataGPS(char *latstr,char *lonstr)//上發(fā)數(shù)據(jù),上發(fā)的數(shù)據(jù)跟對(duì)應(yīng)的插件有關(guān)系,用戶需要注意插件然后對(duì)應(yīng)數(shù)據(jù)即可
{
// int JsonLen= 0;
// memset(AtStrBuf,0,BUFLEN);
//
// Clear_Buffer(); //發(fā)送命令之前清空之前的模塊反饋的數(shù)據(jù)
// sprintf(AtStrBuf,"AT+QMTPUB=0,0,0,0,"$dp"rn"); //發(fā)送ONENET命令
// printf("AtStrBuf = %s rn",AtStrBuf);
// Uart2_SendStr(AtStrBuf);//mqtt提交
// delay_ms(300);
// strx=strstr((const char*)AtRxBuffer,(const char*)" >");//模塊反饋可以發(fā)送數(shù)據(jù)了
// errcount=0;
// while(strx==NULL)
// {
// errcount++;
// strx=strstr((const char*)AtRxBuffer,(const char*)" >");//模塊反饋可以發(fā)送數(shù)據(jù)了
// delay_ms(30);
// if(errcount >100) //防止死循環(huán)跳出
// {
// errcount = 0;
// break;
// }
// }
// //命令發(fā)送成功下面就去發(fā)送數(shù)據(jù)了
// //Clear_Buffer();
// JsonLen = MakeOnenetPayloadGPS((u8*)Send_Json,latstr,lonstr); //組建CJSON數(shù)據(jù)
// USART2_Send((char *)Send_Json,JsonLen);//發(fā)送json 數(shù)據(jù)
// delay_ms(10);
// UART2_send_byte(0x1A);
// strx=strstr((const char*)AtRxBuffer,(const char*)"+QMTPUB: 0,0,0");//返發(fā)送成功
// errcount=0;
// while(strx==NULL)
// {
// errcount++;
// strx=strstr((const char*)AtRxBuffer,(const char*)"+QMTPUB: 0,0,0");//返發(fā)送成功
// delay_ms(10);
// if(errcount >100) //超時(shí)退出死循環(huán) 表示服務(wù)器連接失敗
// {
// errcount = 0;
// break;
// }
// }
//
// Clear_Buffer();
}
6.2 主函數(shù)里的項(xiàng)目邏輯代碼
下面是項(xiàng)目的主函數(shù)里的項(xiàng)目邏輯代碼(其他子模塊的代碼太多,文檔無(wú)法全部貼出)。
可以去網(wǎng)盤里下載傳感器模塊的代碼:https://pan.quark.cn/s/145a9b3f7f53
#include "stm32f10x.h"
#include "sensors.h" // 傳感器驅(qū)動(dòng)
#include "lcd.h" // LCD顯示驅(qū)動(dòng)
#include "nbiot.h" // NBIoT模塊驅(qū)動(dòng)
#include "mqtt.h" // MQTT協(xié)議庫(kù)
#include "relay.h" // 繼電器控制
#include "delay.h" // 延時(shí)函數(shù)
#include < string.h > // 字符串處理函數(shù)
// 初始化所有外設(shè)
void Hardware_Init(void) {
// 初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;
// ... 配置必要的GPIO引腳(如LCD接口、繼電器控制等)
// 初始化定時(shí)器(用于周期性任務(wù))
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// ... 配置定時(shí)器
// 初始化傳感器
Sensors_Init();
// 初始化LCD
LCD_Init();
// 初始化NBIoT模塊
NB_IoT_Init();
// 初始化MQTT客戶端
MQTT_Init();
}
// 檢查并執(zhí)行灌溉命令
void CheckAndExecuteIrrigationCommands(void) {
// 從云端獲取最新的灌溉命令
char *irrigation_command = MQTT_Subscribe("irrigation/command");
if (irrigation_command != NULL) {
// 解析命令并控制相應(yīng)的繼電器
Relay_Control(irrigation_command);
}
}
// 主函數(shù)
int main(void) {
// 初始化硬件
Hardware_Init();
// 主循環(huán)
while (1) {
// 讀取傳感器數(shù)據(jù)
float soil_temp, soil_humidity, air_temp, air_humidity, light_intensity, air_quality;
Sensors_Read(&soil_temp, &soil_humidity, &air_temp, &air_humidity, &light_intensity, &air_quality);
// 顯示到LCD
LCD_DisplayData(soil_temp, soil_humidity, air_temp, air_humidity, light_intensity, air_quality);
// 通過(guò)NBIoT上傳數(shù)據(jù)到華為云IoT
if (NB_IoT_IsConnected()) {
char data[128];
snprintf(data, sizeof(data),
"soil_temp=%.2f,soil_humidity=%.2f,air_temp=%.2f,air_humidity=%.2f,light_intensity=%.2f,air_quality=%.2f",
soil_temp, soil_humidity, air_temp, air_humidity, light_intensity, air_quality);
MQTT_Publish("sensor/data", data);
}
// 檢查并執(zhí)行灌溉命令
CheckAndExecuteIrrigationCommands();
// 延時(shí)一段時(shí)間
Delay(5000); // 例如每5秒更新一次
}
}
七、總結(jié)
本項(xiàng)目設(shè)計(jì)并實(shí)現(xiàn)一套基于物聯(lián)網(wǎng)技術(shù)的地下煤礦安全監(jiān)測(cè)與預(yù)警系統(tǒng),以提高礦工工作環(huán)境的安全性。該系統(tǒng)通過(guò)集成多種傳感器技術(shù),能夠?qū)崟r(shí)監(jiān)控礦井內(nèi)的溫濕度、瓦斯?jié)舛燃叭藛T活動(dòng)情況,并在檢測(cè)到異常時(shí)及時(shí)發(fā)出警報(bào),采取相應(yīng)的安全措施。
系統(tǒng)硬件核心采用STM32F103RCT6微控制器,結(jié)合DHT11溫濕度傳感器、MQ5氣體傳感器以及紅外熱釋電人體感應(yīng)模塊,分別用于環(huán)境溫濕度、瓦斯?jié)舛群腿藛T存在的監(jiān)測(cè)。當(dāng)環(huán)境參數(shù)超過(guò)預(yù)設(shè)的安全閾值時(shí),系統(tǒng)將自動(dòng)激活蜂鳴器報(bào)警,并通過(guò)控制繼電器啟動(dòng)通風(fēng)風(fēng)扇以降低有害氣體濃度。此外,OLED顯示屏被用作現(xiàn)場(chǎng)顯示終端,提供直觀的數(shù)據(jù)展示。為了實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)傳輸與管理,系統(tǒng)還集成了BC26 NBIOT模塊,可以將收集到的信息上傳至華為云物聯(lián)網(wǎng)平臺(tái),便于管理者進(jìn)行數(shù)據(jù)分析和決策支持。
為提升用戶體驗(yàn),我們使用Qt框架開(kāi)發(fā)了一款運(yùn)行于Windows平臺(tái)上的可視化大屏軟件界面,能夠?qū)崟r(shí)展現(xiàn)來(lái)自地下煤礦的各類監(jiān)測(cè)數(shù)據(jù),使管理人員能夠迅速掌握礦區(qū)狀況并作出響應(yīng)。整個(gè)系統(tǒng)的供電設(shè)計(jì)考慮了穩(wěn)定性和安全性,其中控制電路部分由5V 2A穩(wěn)壓電源供應(yīng),而風(fēng)扇等高功耗設(shè)備則直接接入市電,確保長(zhǎng)時(shí)間可靠運(yùn)行。
本項(xiàng)目不僅增強(qiáng)了地下煤礦作業(yè)場(chǎng)所的安全保障能力,也為未來(lái)構(gòu)建更加智能化、信息化的礦山管理體系奠定了基礎(chǔ)。
審核編輯 黃宇
-
傳感器
+關(guān)注
關(guān)注
2551文章
51084瀏覽量
753444 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44625瀏覽量
373240 -
安全監(jiān)測(cè)
+關(guān)注
關(guān)注
0文章
172瀏覽量
10543
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論