chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于單片機(jī)+物聯(lián)網(wǎng)設(shè)計的居家電路保護(hù)裝置

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2025-01-14 11:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

1.1 項目介紹

【1】項目開發(fā)背景

隨著現(xiàn)代家庭電器設(shè)備的日益增多,家庭用電安全問題逐漸成為人們關(guān)注的重點。為了確保家庭電路的安全可靠運(yùn)行,預(yù)防因電路故障或不當(dāng)使用電器而導(dǎo)致的安全事故,設(shè)計一款高效、智能的居家電路保護(hù)裝置顯得尤為重要。該裝置不僅能夠?qū)崟r監(jiān)測家庭電路中的電壓、電流和功率等關(guān)鍵參數(shù),還能對環(huán)境溫濕度及煙霧濃度進(jìn)行監(jiān)控,從而為用戶提供全方位的家庭用電安全保障。

在傳統(tǒng)家庭電路保護(hù)方案中,通常僅依靠斷路器來提供過載保護(hù),但這種方式無法實現(xiàn)精細(xì)化管理,也無法為用戶提供詳細(xì)的用電信息反饋。因此,我們基于單片機(jī)物聯(lián)網(wǎng)技術(shù),開發(fā)了一款集成了多種功能的智能居家電路保護(hù)裝置。這款裝置安裝于家庭總電表輸出端,支持多達(dá)20路獨(dú)立線路的連接,每一路都可以單獨(dú)監(jiān)控其用電情況,包括電壓、電流、功率的變化。通過內(nèi)置的高精度電力參數(shù)采集模塊,裝置能夠準(zhǔn)確測量并分析各線路的用電數(shù)據(jù),一旦檢測到異常,如電流或功率超過設(shè)定閾值,它將立即切斷電源,并通過本地蜂鳴器發(fā)出警報,同時向用戶的手機(jī)APP發(fā)送通知,以便用戶及時采取措施。

考慮到智能家居系統(tǒng)的普及以及用戶對于遠(yuǎn)程監(jiān)控的需求,我們的設(shè)計方案特別加入了WIFI聯(lián)網(wǎng)功能。利用MQTT協(xié)議,所有狀態(tài)信息都可以上傳至華為云物聯(lián)網(wǎng)服務(wù)器,用戶無論身處何地,只需打開手機(jī)上的Android應(yīng)用程序,即可查看家中的用電狀況,了解歷史變化趨勢,并可查看以波形或數(shù)字形式呈現(xiàn)的數(shù)據(jù)。此外,通過這個應(yīng)用程序,用戶還能夠?qū)崿F(xiàn)遠(yuǎn)程控制,例如恢復(fù)被切斷的電源或者調(diào)整報警閾值。

為了讓用戶更直觀地掌握當(dāng)前的用電情況,我們在裝置上配置了一個OLED顯示屏,可以實時顯示采集到的所有信息。這樣即使沒有智能手機(jī),用戶也能一目了然地看到重要的用電數(shù)據(jù)。同時,我們也選用了SHT30傳感器來監(jiān)測環(huán)境溫濕度,以及MQ2傳感器用于煙霧濃度監(jiān)測,這些都進(jìn)一步增強(qiáng)了裝置的安全性和功能性。

整個項目采用STM32F103RCT6作為主控芯片,它具有高性能、低功耗的特點,非常適合處理復(fù)雜的計算任務(wù)和通信任務(wù)。軟件方面,STM32的開發(fā)使用Keil5工具鏈,編程語言選擇C語言,而Android應(yīng)用則采用Qt框架進(jìn)行開發(fā),編程語言為C++。這種組合不僅保證了硬件和軟件之間的緊密配合,也使得系統(tǒng)具備良好的穩(wěn)定性和擴(kuò)展性。通過這樣一個智能居家電路保護(hù)裝置,我們希望能夠為每一個家庭帶來更加安心、便捷的用電體驗。

image-20241211113521546

image-20241211113607405

【2】設(shè)計實現(xiàn)的功能

當(dāng)前項目使用的硬件模塊對應(yīng)的代碼工程已經(jīng)更新到網(wǎng)盤:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink

(1) 電路監(jiān)測與保護(hù)功能
支持直流電和單相交流電的電壓、電流、功率監(jiān)測功能。當(dāng)檢測到某一路線路的電流或功率超過設(shè)定閥值時,裝置會立即切斷電源,同時通過本地蜂鳴器報警,上傳告警信息至物聯(lián)網(wǎng)服務(wù)器,并推送到手機(jī)APP。

(2) 多路電路獨(dú)立監(jiān)控
支持最多20路獨(dú)立線路的用電參數(shù)監(jiān)測,包括電壓、電流、功率等。各路參數(shù)的歷史變化數(shù)據(jù)會以波形圖或數(shù)字形式在手機(jī)APP中顯示,方便用戶掌握各電器的用電情況。

(3) 環(huán)境溫濕度監(jiān)測功能
通過SHT30傳感器實時測量周圍環(huán)境的溫度和濕度,并將數(shù)據(jù)上傳到物聯(lián)網(wǎng)服務(wù)器和手機(jī)APP,同時支持在本地OLED顯示屏上顯示當(dāng)前的環(huán)境信息。

(4) 煙霧濃度檢測功能
利用MQ2傳感器監(jiān)測空氣中的煙霧濃度。如果煙霧濃度超過設(shè)定的安全閾值,裝置會立即觸發(fā)本地蜂鳴器報警,同時將告警信息上傳至物聯(lián)網(wǎng)服務(wù)器,并推送到手機(jī)APP進(jìn)行遠(yuǎn)程提醒。

(5) 數(shù)據(jù)上云與遠(yuǎn)程監(jiān)控
支持通過WIFI模塊與物聯(lián)網(wǎng)服務(wù)器連接,采用MQTT協(xié)議上傳設(shè)備的各類數(shù)據(jù)(包括電路監(jiān)測數(shù)據(jù)、環(huán)境溫濕度數(shù)據(jù)、煙霧濃度數(shù)據(jù)等)。用戶可通過Android手機(jī)APP實時查看設(shè)備狀態(tài),獲取數(shù)據(jù)歷史記錄,并遠(yuǎn)程操作和管理設(shè)備。

(6) 本地實時數(shù)據(jù)顯示
采用0.96英寸OLED顯示屏,實時顯示所有監(jiān)測數(shù)據(jù),包括電壓、電流、功率、環(huán)境溫濕度、煙霧濃度等信息,便于用戶在現(xiàn)場查看設(shè)備工作狀態(tài)。

(7) 超限保護(hù)與告警功能
當(dāng)檢測到任何線路的電流、功率超出設(shè)定閥值,或煙霧濃度超標(biāo)時,裝置會自動切斷相關(guān)線路的電源,并發(fā)出蜂鳴器告警,同時通過物聯(lián)網(wǎng)服務(wù)器將信息傳遞至手機(jī)APP。

(8) 歷史數(shù)據(jù)存儲與波形顯示
支持電壓、電流、功率等參數(shù)的歷史變化數(shù)據(jù)存儲,并通過手機(jī)APP以波形圖形式顯示,方便用戶進(jìn)行用電分析和趨勢判斷。

(9) 手機(jī)APP遠(yuǎn)程控制功能
用戶可通過手機(jī)APP遠(yuǎn)程控制設(shè)備,包括開關(guān)各路電路、修改參數(shù)閾值,以及查看歷史數(shù)據(jù)和告警記錄等。

(10) 智能化與模塊化設(shè)計
所有功能模塊化設(shè)計,方便硬件擴(kuò)展與維護(hù),同時通過軟件配置和調(diào)試實現(xiàn)靈活功能升級,適應(yīng)不同家庭需求。

(11) 全面的安全與節(jié)能方案
通過精準(zhǔn)的監(jiān)測和智能控制,幫助用戶在確保安全的前提下合理用電、減少浪費(fèi),實現(xiàn)節(jié)能減排的目標(biāo)。

【3】項目硬件模塊組成

(1) 主控模塊 :采用STM32F103RCT6作為核心控制器,該芯片具備高性能ARM Cortex-M3內(nèi)核,提供豐富的外設(shè)接口和足夠的處理能力,以滿足對多路電力參數(shù)的實時監(jiān)測、數(shù)據(jù)處理以及與云端通信的需求。

(2) 電力參數(shù)采集模塊 :選用支持串口通信的電力參數(shù)采集模塊,用于精確測量每一路電路中的電壓、電流和功率等電能參數(shù)。此模塊能夠?qū)⒉杉降臄?shù)據(jù)通過串行接口發(fā)送給主控MCU進(jìn)行分析處理,確保了數(shù)據(jù)的準(zhǔn)確性與穩(wěn)定性。

(3) 環(huán)境溫濕度傳感器 :安裝SHT30數(shù)字溫濕度傳感器,用以監(jiān)控周圍環(huán)境的溫度和濕度變化。該傳感器具有高精度和快速響應(yīng)的特點,可以為用戶提供準(zhǔn)確的室內(nèi)環(huán)境信息,并幫助檢測潛在的安全隱患。

(4) 煙霧濃度檢測模塊 :集成MQ2氣體傳感器,專門用來探測空氣中煙霧濃度。當(dāng)檢測到異常高的煙霧水平時,系統(tǒng)會觸發(fā)報警機(jī)制,提醒用戶可能存在火災(zāi)風(fēng)險。

(5) 無線通信模塊 :采用ESP8266 WIFI模塊,負(fù)責(zé)實現(xiàn)設(shè)備與互聯(lián)網(wǎng)之間的連接,使得裝置可以通過MQTT協(xié)議向華為云物聯(lián)網(wǎng)平臺上傳數(shù)據(jù)。此外,它還支持遠(yuǎn)程配置和控制功能,允許用戶通過手機(jī)APP管理家居用電情況。

(6) 本地顯示模塊 :配備一塊OLED顯示屏,用于直觀地呈現(xiàn)當(dāng)前各路電路的電壓、電流、功率狀態(tài),以及環(huán)境溫濕度和煙霧濃度等信息。OLED屏幕提供了清晰的視覺效果,便于用戶即時了解家庭用電狀況。

(7) 聲光報警模塊 :包括一個高電平觸發(fā)的有源蜂鳴器,當(dāng)檢測到任何危險信號(如過載、短路或者高煙霧濃度)時,蜂鳴器會發(fā)出響亮的聲音警報;同時還可以添加LED指示燈來增強(qiáng)視覺警示效果。

(8) 電源管理模塊 :設(shè)計專門的電源管理系統(tǒng),確保整個系統(tǒng)的穩(wěn)定供電??紤]到不同應(yīng)用場景下的需求,該模塊應(yīng)能兼容直流和單相交流輸入,并且擁有適當(dāng)?shù)倪^壓、欠壓保護(hù)措施,以保障系統(tǒng)長期可靠運(yùn)行。

(9) 繼電器控制模塊 :為了實現(xiàn)對各路電路的通斷控制,每個回路上都會串聯(lián)一個小型繼電器。這些繼電器受主控MCU控制,在發(fā)生異常情況時迅速切斷相關(guān)電路,防止事故擴(kuò)大化。

1.2 設(shè)計思路

本項目設(shè)計的核心思路是將電路保護(hù)功能與物聯(lián)網(wǎng)技術(shù)相結(jié)合,構(gòu)建一個智能化、模塊化的居家電路保護(hù)裝置。通過對家庭電路的實時監(jiān)控和遠(yuǎn)程管理,實現(xiàn)對電路安全的全面保障和對用電信息的高效管理。整個設(shè)計從功能需求出發(fā),綜合硬件選型、軟件開發(fā)、數(shù)據(jù)通信和用戶體驗等多個方面展開,力求提供一套完整且實用的解決方案。

基于對家庭用電安全問題的分析,確定了裝置的主要功能,包括電路監(jiān)測與保護(hù)、環(huán)境參數(shù)監(jiān)測、煙霧濃度檢測等。為了實現(xiàn)這些功能,選擇STM32F103RCT6作為主控芯片,利用其性能穩(wěn)定、資源豐富的特點,通過與外部傳感器和模塊的結(jié)合,構(gòu)建多功能數(shù)據(jù)采集與處理系統(tǒng)。設(shè)計中采用的電力參數(shù)采集模塊通過串口通信采集電壓、電流、功率等關(guān)鍵參數(shù),確保數(shù)據(jù)的精確性和可靠性。同時,為提升系統(tǒng)的適用性,支持最多20路獨(dú)立線路的電路監(jiān)控與保護(hù),滿足大多數(shù)家庭的用電需求。

考慮到家庭環(huán)境對安全和舒適的雙重要求,設(shè)計中加入了環(huán)境溫濕度監(jiān)測和煙霧濃度檢測功能。環(huán)境溫濕度通過SHT30傳感器獲取,實時反映家庭的環(huán)境狀態(tài),幫助用戶及時調(diào)整室內(nèi)環(huán)境。煙霧濃度通過MQ2傳感器檢測,當(dāng)煙霧濃度超限時觸發(fā)報警,及時預(yù)警潛在火災(zāi)風(fēng)險,為家庭安全提供額外保障。這些功能的加入,不僅豐富了裝置的應(yīng)用場景,還顯著提升了用戶的安全感。

為了實現(xiàn)設(shè)備的智能化和遠(yuǎn)程管理,項目設(shè)計中引入了物聯(lián)網(wǎng)技術(shù)。裝置通過WIFI模塊接入互聯(lián)網(wǎng),利用MQTT協(xié)議與華為云物聯(lián)網(wǎng)服務(wù)器通信。所有數(shù)據(jù),包括電路參數(shù)、環(huán)境參數(shù)和報警信息,都將實時上傳至服務(wù)器。用戶可通過Android手機(jī)APP查看這些數(shù)據(jù),APP采用Qt開發(fā),提供直觀的用戶界面和高效的交互方式。此外,APP還支持遠(yuǎn)程操作,包括線路開關(guān)控制、參數(shù)閾值設(shè)置等,極大地提升了用戶的便捷性和對設(shè)備的掌控能力。

數(shù)據(jù)展示方面,項目設(shè)計兼顧了遠(yuǎn)程和本地兩種場景。在遠(yuǎn)程端,手機(jī)APP提供波形和數(shù)字兩種顯示方式,滿足用戶對用電數(shù)據(jù)的詳細(xì)分析需求。在本地端,使用0.96英寸OLED顯示屏實時顯示當(dāng)前監(jiān)測的所有數(shù)據(jù),方便用戶在現(xiàn)場直觀了解設(shè)備的運(yùn)行狀態(tài)。此外,歷史數(shù)據(jù)的存儲和展示功能,使用戶能夠回顧和分析各項參數(shù)的變化趨勢,幫助優(yōu)化用電習(xí)慣。

為了確保系統(tǒng)的穩(wěn)定性與可靠性,設(shè)計中采用了模塊化思路,各功能模塊相對獨(dú)立,互不干擾。例如,電路監(jiān)測模塊、環(huán)境監(jiān)測模塊、煙霧檢測模塊和數(shù)據(jù)通信模塊分別設(shè)計和測試,在主控芯片的統(tǒng)一管理下協(xié)調(diào)運(yùn)行。這樣不僅簡化了硬件設(shè)計和軟件開發(fā)過程,還提高了系統(tǒng)的可維護(hù)性和擴(kuò)展性。

整體設(shè)計還充分考慮了設(shè)備的安全性。通過硬件和軟件的結(jié)合,裝置在檢測到電路超載或煙霧超標(biāo)時,能迅速切斷電源并發(fā)出警報,最大程度降低風(fēng)險。同時,利用物聯(lián)網(wǎng)技術(shù)實現(xiàn)遠(yuǎn)程報警提醒,讓用戶即使不在家中也能及時掌握安全狀況。綜合以上設(shè)計思路,本項目不僅滿足了現(xiàn)代家庭對電路保護(hù)的基本需求,還通過智能化手段提升了用戶體驗,為建設(shè)更加安全、舒適和節(jié)能的家庭環(huán)境提供了可靠的技術(shù)支持。

1.3 系統(tǒng)功能總結(jié)

當(dāng)前項目使用的相關(guān)軟件工具、模塊源碼已經(jīng)上傳到網(wǎng)盤:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink

功能模塊描述
主控模塊使用STM32F103RCT6作為核心控制器,負(fù)責(zé)整體數(shù)據(jù)處理、邏輯控制及與各子系統(tǒng)的通信。
電力參數(shù)監(jiān)測實時監(jiān)測每一路線路上的電壓、電流和功率,并在超過設(shè)定閾值時自動切斷電源并報警。
環(huán)境溫濕度監(jiān)測通過SHT30傳感器實時監(jiān)測環(huán)境溫度和濕度,提供室內(nèi)環(huán)境信息,幫助識別潛在的安全風(fēng)險。
煙霧濃度監(jiān)測利用MQ2傳感器檢測空氣中的煙霧濃度,在濃度超標(biāo)時觸發(fā)警報并向用戶發(fā)送通知。
無線通信功能內(nèi)置WIFI模塊ESP8266,使用MQTT協(xié)議將設(shè)備狀態(tài)上傳至華為云物聯(lián)網(wǎng)平臺,支持遠(yuǎn)程監(jiān)控。
本地顯示功能配備OLED顯示屏,實時顯示當(dāng)前用電情況、環(huán)境參數(shù)等信息,方便用戶查看。
聲光報警功能包含高電平觸發(fā)的有源蜂鳴器和可能的LED指示燈,在檢測到異常情況時發(fā)出聲音和燈光警示。
遠(yuǎn)程控制功能用戶可通過手機(jī)APP實現(xiàn)對設(shè)備的遠(yuǎn)程控制,包括但不限于調(diào)整報警閾值、恢復(fù)被切斷的電源等。
歷史數(shù)據(jù)分析支持對測量的電壓、電流、功率參數(shù)的歷史變化進(jìn)行記錄,并能在APP上以波形或數(shù)字形式展示。
電源管理功能設(shè)計有專門的電源管理系統(tǒng),確保系統(tǒng)穩(wěn)定供電,同時具備過壓、欠壓保護(hù)等功能。
繼電器控制功能每個回路配備小型繼電器,用于快速響應(yīng)異常情況下的斷電操作,保障安全。
外部接口擴(kuò)展功能提供擴(kuò)展接口,為未來的硬件升級或連接額外傳感器留出空間。

1.4 開發(fā)工具的選擇

【1】設(shè)備端開發(fā)

STM32的編程語言選擇C語言,C語言執(zhí)行效率高,大學(xué)里主學(xué)的C語言,C語言編譯出來的可執(zhí)行文件最接近于機(jī)器碼,匯編語言執(zhí)行效率最高,但是匯編的移植性比較差,目前在一些操作系統(tǒng)內(nèi)核里還有一些低配的單片機(jī)使用的較多,平常的單片機(jī)編程還是以C語言為主。C語言的執(zhí)行效率僅次于匯編,語法理解簡單、代碼通用性強(qiáng),也支持跨平臺,在嵌入式底層、單片機(jī)編程里用的非常多,當(dāng)前的設(shè)計就是采用C語言開發(fā)。

開發(fā)工具選擇Keil,keil是一家世界領(lǐng)先的嵌入式微控制器軟件開發(fā)商,在2015年,keil被ARM公司收購。因為當(dāng)前芯片選擇的是STM32F103系列,STMF103是屬于ARM公司的芯片構(gòu)架、Cortex-M3內(nèi)核系列的芯片,所以使用Kile來開發(fā)STM32是有先天優(yōu)勢的,而keil在各大高校使用的也非常多,很多教科書里都是以keil來教學(xué),開發(fā)51單片機(jī)、STM32單片機(jī)等等。目前作為MCU芯片開發(fā)的軟件也不只是keil一家獨(dú)大,IAR在MCU微處理器開發(fā)領(lǐng)域里也使用的非常多,IAR擴(kuò)展性更強(qiáng),也支持STM32開發(fā),也支持其他芯片,比如:CC2530,51單片機(jī)的開發(fā)。從軟件的使用上來講,IAR比keil更加簡潔,功能相對少一些。如果之前使用過keil,而且使用頻率較多,已經(jīng)習(xí)慣再使用IAR是有點不適應(yīng)界面的。

image-20221210225339928

【2】上位機(jī)開發(fā)

上位機(jī)的開發(fā)選擇Qt框架,編程語言采用C++;Qt是一個1991年由Qt Company開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣埽褂锰厥獾拇a生成擴(kuò)展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴(kuò)展,并且允許真正地組件編程。Qt能輕松創(chuàng)建具有原生C++性能的連接設(shè)備、用戶界面(UI)和應(yīng)用程序。它功能強(qiáng)大且結(jié)構(gòu)緊湊,擁有直觀的工具和庫。

image-20230218001243591

image-20230218001219105

二、部署華為云物聯(lián)網(wǎng)平臺

華為云官網(wǎng): https://www.huaweicloud.com/

打開官網(wǎng),搜索物聯(lián)網(wǎng),就能快速找到 設(shè)備接入IoTDA。

image-20221204193824815

2.1 物聯(lián)網(wǎng)平臺介紹

華為云物聯(lián)網(wǎng)平臺(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)平臺構(gòu)建一個完整的物聯(lián)網(wǎng)解決方案主要包括3部分:物聯(lián)網(wǎng)平臺、業(yè)務(wù)應(yīng)用和設(shè)備。

物聯(lián)網(wǎng)平臺作為連接業(yè)務(wù)應(yīng)用和設(shè)備的中間層,屏蔽了各種復(fù)雜的設(shè)備接口,實現(xiàn)設(shè)備的快速接入;同時提供強(qiáng)大的開放能力,支撐行業(yè)用戶構(gòu)建各種物聯(lián)網(wǎng)解決方案。

設(shè)備可以通過固網(wǎng)、2G/3G/4G/5G、NB-IoT、Wifi等多種網(wǎng)絡(luò)接入物聯(lián)網(wǎng)平臺,并使用LWM2M/CoAP、MQTT、HTTPS協(xié)議將業(yè)務(wù)數(shù)據(jù)上報到平臺,平臺也可以將控制命令下發(fā)給設(shè)備。

業(yè)務(wù)應(yīng)用通過調(diào)用物聯(lián)網(wǎng)平臺提供的API,實現(xiàn)設(shè)備數(shù)據(jù)采集、命令下發(fā)、設(shè)備管理等業(yè)務(wù)場景。

img

2.2 開通物聯(lián)網(wǎng)服務(wù)

地址: https://www.huaweicloud.com/product/iothub.html

image-20221204194233414

點擊立即創(chuàng)建。

image-20240117134653452

正在創(chuàng)建標(biāo)準(zhǔn)版實例,需要等待片刻。

image-20240117134729401

創(chuàng)建完成之后,點擊實例名稱。 可以看到標(biāo)準(zhǔn)版實例的設(shè)備接入端口和地址。

image-20240425180759670

在上面也能看到 免費(fèi)單元的限制。

image-20240425180817704

開通之后,點擊總覽,也能查看接入信息。 我們當(dāng)前設(shè)備準(zhǔn)備采用MQTT協(xié)議接入華為云平臺,這里可以看到MQTT協(xié)議的地址和端口號等信息。

image-20240425180845461

總結(jié):

端口號:   MQTT (1883)| MQTTS (8883)	
接入地址:ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com

**根據(jù)域名地址得到IP地址信息: **

打開Windows電腦的命令行控制臺終端,使用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ù):
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時間=35ms TTL=93
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時間=36ms TTL=93
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時間=36ms TTL=93
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時間=39ms TTL=93

117.78.5.125 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 35ms,最長 = 39ms,平均 = 36ms

C:Users11266 >

MQTT協(xié)議接入端口號有兩個,1883是非加密端口,8883是證書加密端口,單片機(jī)無法加載證書,所以使用1883端口比較合適。 接下來的ESP8266就采用1883端口連接華為云物聯(lián)網(wǎng)平臺。

2.3 創(chuàng)建產(chǎn)品

(1)創(chuàng)建產(chǎn)品

image-20230109164412041

(2)填寫產(chǎn)品信息

根據(jù)自己產(chǎn)品名字填寫,下面的設(shè)備類型選擇自定義類型。

image-20240612094809689

(3)產(chǎn)品創(chuàng)建成功

image-20240612095148945

創(chuàng)建完成之后點擊查看詳情。

image-20240612095134263

(4)添加自定義模型

產(chǎn)品創(chuàng)建完成之后,點擊進(jìn)入產(chǎn)品詳情頁面,翻到最下面可以看到模型定義。

模型簡單來說: 就是存放設(shè)備上傳到云平臺的數(shù)據(jù)。

你可以根據(jù)自己的產(chǎn)品進(jìn)行創(chuàng)建。

比如:

煙霧可以叫  MQ2
溫度可以叫  Temperature
濕度可以叫  humidity
火焰可以叫  flame
其他的傳感器自己用單詞簡寫命名即可。 這就是你的單片機(jī)設(shè)備端上傳到服務(wù)器的數(shù)據(jù)名字。

先點擊自定義模型。

image-20240612095517900

再創(chuàng)建一個服務(wù)ID。

image-20240612095542749

接著點擊新增屬性。

image-20240612095648815

image-20240612095711898

2.4 添加設(shè)備

產(chǎn)品是屬于上層的抽象模型,接下來在產(chǎn)品模型下添加實際的設(shè)備。添加的設(shè)備最終需要與真實的設(shè)備關(guān)聯(lián)在一起,完成數(shù)據(jù)交互。

(1)注冊設(shè)備

image-20240425181935561

(2)根據(jù)自己的設(shè)備填寫

image-20240612100115167

(3)保存設(shè)備信息

創(chuàng)建完畢之后,點擊保存并關(guān)閉,得到創(chuàng)建的設(shè)備密匙信息。該信息在后續(xù)生成MQTT三元組的時候需要使用。

image-20240612100128061

(4)設(shè)備創(chuàng)建完成

image-20240612100147232

(5)設(shè)備詳情

image-20240612100202960

image-20240612100217236

2.5 MQTT協(xié)議主題訂閱與發(fā)布

(1)MQTT協(xié)議介紹

當(dāng)前的設(shè)備是采用MQTT協(xié)議與華為云平臺進(jìn)行通信。

MQTT是一個物聯(lián)網(wǎng)傳輸協(xié)議,它被設(shè)計用于輕量級的發(fā)布/訂閱式消息傳輸,旨在為低帶寬和不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中的物聯(lián)網(wǎng)設(shè)備提供可靠的網(wǎng)絡(luò)服務(wù)。MQTT是專門針對物聯(lián)網(wǎng)開發(fā)的輕量級傳輸協(xié)議。MQTT協(xié)議針對低帶寬網(wǎng)絡(luò),低計算能力的設(shè)備,做了特殊的優(yōu)化,使得其能適應(yīng)各種物聯(lián)網(wǎng)應(yīng)用場景。目前MQTT擁有各種平臺和設(shè)備上的客戶端,已經(jīng)形成了初步的生態(tài)系統(tǒng)。

MQTT是一種消息隊列協(xié)議,使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合,相對于其他協(xié)議,開發(fā)更簡單;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é)議,就可以與華為云平臺完成通信。

華為云的MQTT協(xié)議接入幫助文檔在這里: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

img

業(yè)務(wù)流程:

img

(2)華為云平臺MQTT協(xié)議使用限制

描述限制
支持的MQTT協(xié)議版本3.1.1
與標(biāo)準(zhǔn)MQTT協(xié)議的區(qū)別支持Qos 0和Qos 1支持Topic自定義不支持QoS2不支持will、retain msg
MQTTS支持的安全等級采用TCP通道基礎(chǔ) + TLS協(xié)議(最高TLSv1.3版本)
單帳號每秒最大MQTT連接請求數(shù)無限制
單個設(shè)備每分鐘支持的最大MQTT連接數(shù)1
單個MQTT連接每秒的吞吐量,即帶寬,包含直連設(shè)備和網(wǎng)關(guān)3KB/s
MQTT單個發(fā)布消息最大長度,超過此大小的發(fā)布請求將被直接拒絕1MB
MQTT連接心跳時間建議值心跳時間限定為30至1200秒,推薦設(shè)置為120秒
產(chǎn)品是否支持自定義Topic支持
消息發(fā)布與訂閱設(shè)備只能對自己的Topic進(jìn)行消息發(fā)布與訂閱
每個訂閱請求的最大訂閱數(shù)無限制

(3)主題訂閱格式

幫助文檔地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

image-20221207153310037

對于設(shè)備而言,一般會訂閱平臺下發(fā)消息給設(shè)備 這個主題。

設(shè)備想接收平臺下發(fā)的消息,就需要訂閱平臺下發(fā)消息給設(shè)備 的主題,訂閱后,平臺下發(fā)消息給設(shè)備,設(shè)備就會收到消息。

如果設(shè)備想要知道平臺下發(fā)的消息,需要訂閱上面圖片里標(biāo)注的主題。

以當(dāng)前設(shè)備為例,最終訂閱主題的格式如下:
$oc/devices/{device_id}/sys/messages/down
    
最終的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down

(4)主題發(fā)布格式

對于設(shè)備來說,主題發(fā)布表示向云平臺上傳數(shù)據(jù),將最新的傳感器數(shù)據(jù),設(shè)備狀態(tài)上傳到云平臺。

這個操作稱為:屬性上報。

幫助文檔地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html

image-20221207153637391

根據(jù)幫助文檔的介紹, 當(dāng)前設(shè)備發(fā)布主題,上報屬性的格式總結(jié)如下:

發(fā)布的主題格式:
$oc/devices/{device_id}/sys/properties/report
 
最終的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report
發(fā)布主題時,需要上傳數(shù)據(jù),這個數(shù)據(jù)格式是JSON格式。

上傳的JSON數(shù)據(jù)格式如下:

{
  "services": [
    {
      "service_id": < 填服務(wù)ID >,
      "properties": {
        "< 填屬性名稱1 >": < 填屬性值 >,
        "< 填屬性名稱2 >": < 填屬性值 >,
        ..........
      }
    }
  ]
}
根據(jù)JSON格式,一次可以上傳多個屬性字段。 這個JSON格式里的,服務(wù)ID,屬性字段名稱,屬性值類型,在前面創(chuàng)建產(chǎn)品的時候就已經(jīng)介紹了,不記得可以翻到前面去查看。

根據(jù)這個格式,組合一次上傳的屬性數(shù)據(jù):
{"services": [{"service_id": "stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}

2.6 MQTT三元組

MQTT協(xié)議登錄需要填用戶ID,設(shè)備ID,設(shè)備密碼等信息,就像我們平時登錄QQ,微信一樣要輸入賬號密碼才能登錄。MQTT協(xié)議登錄的這3個參數(shù),一般稱為MQTT三元組。

接下來介紹,華為云平臺的MQTT三元組參數(shù)如何得到。

(1)MQTT服務(wù)器地址

要登錄MQTT服務(wù)器,首先記得先知道服務(wù)器的地址是多少,端口是多少。

幫助文檔地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home

image-20240509193207359

MQTT協(xié)議的端口支持1883和8883,它們的區(qū)別是:8883 是加密端口更加安全。但是單片機(jī)上使用比較困難,所以當(dāng)前的設(shè)備是采用1883端口進(jìn)連接的。

根據(jù)上面的域名和端口號,得到下面的IP地址和端口號信息: 如果設(shè)備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)

華為云的MQTT服務(wù)器地址:117.78.5.125
華為云的MQTT端口號:1883

如何得到IP地址?如何域名轉(zhuǎn)IP? 打開Windows的命令行輸入以下命令。

ping  ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com

image-20240425182610048

(2)生成MQTT三元組

華為云提供了一個在線工具,用來生成MQTT鑒權(quán)三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

打開這個工具,填入設(shè)備的信息(也就是剛才創(chuàng)建完設(shè)備之后保存的信息),點擊生成,就可以得到MQTT的登錄信息了。

下面是打開的頁面:

image-20240425183025893

填入設(shè)備的信息: (上面兩行就是設(shè)備創(chuàng)建完成之后保存得到的)

直接得到三元組信息。

image-20240509193310020

得到三元組之后,設(shè)備端通過MQTT協(xié)議登錄鑒權(quán)的時候,填入?yún)?shù)即可。

ClientId  663cb18871d845632a0912e7_dev1_0_0_2024050911
Username  663cb18871d845632a0912e7_dev1
Password  71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237

2.7 模擬設(shè)備登錄測試

經(jīng)過上面的步驟介紹,已經(jīng)創(chuàng)建了產(chǎn)品,設(shè)備,數(shù)據(jù)模型,得到MQTT登錄信息。 接下來就用MQTT客戶端軟件模擬真實的設(shè)備來登錄平臺。測試與服務(wù)器通信是否正常。

(1)填入登錄信息

打開MQTT客戶端軟件,對號填入相關(guān)信息(就是上面的文本介紹)。然后,點擊登錄,訂閱主題,發(fā)布主題。

image-20240509193457358

(2)打開網(wǎng)頁查看

完成上面的操作之后,打開華為云網(wǎng)頁后臺,可以看到設(shè)備已經(jīng)在線了。

image-20240612100508790

點擊詳情頁面,可以看到上傳的數(shù)據(jù):

image-20240612100529581

到此,云平臺的部署已經(jīng)完成,設(shè)備已經(jīng)可以正常上傳數(shù)據(jù)了。

(3)MQTT登錄測試參數(shù)總結(jié)

MQTT服務(wù)器:  117.78.5.125
MQTT端口號:  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}}]}

2.8 創(chuàng)建IAM賬戶

創(chuàng)建一個IAM賬戶,因為接下來開發(fā)上位機(jī),需要使用云平臺的API接口,這些接口都需要token進(jìn)行鑒權(quán)。簡單來說,就是身份的認(rèn)證。 調(diào)用接口獲取Token時,就需要填寫IAM賬號信息。所以,接下來演示一下過程。

地址: https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/users

**【1】獲取項目憑證 ** 點擊左上角用戶名,選擇下拉菜單里的我的憑證

image-20240509193646253

image-20240509193701262

項目憑證:

28add376c01e4a61ac8b621c714bf459

【2】創(chuàng)建IAM用戶

鼠標(biāo)放在左上角頭像上,在下拉菜單里選擇統(tǒng)一身份認(rèn)證。

image-20240509193729078

點擊左上角創(chuàng)建用戶。

image-20240509193744287

image-20240314153208692

image-20240314153228359

image-20240314153258229

創(chuàng)建成功:

image-20240314153315444

【3】創(chuàng)建完成

image-20240509193828289

用戶信息如下:

主用戶名  l19504562721
IAM用戶  ds_abc
密碼     DS12345678

2.9 獲取影子數(shù)據(jù)

幫助文檔:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html

設(shè)備影子介紹:

設(shè)備影子是一個用于存儲和檢索設(shè)備當(dāng)前狀態(tài)信息的JSON文檔。
每個設(shè)備有且只有一個設(shè)備影子,由設(shè)備ID唯一標(biāo)識
設(shè)備影子僅保存最近一次設(shè)備的上報數(shù)據(jù)和預(yù)期數(shù)據(jù)
無論該設(shè)備是否在線,都可以通過該影子獲取和設(shè)置設(shè)備的屬性

簡單來說:設(shè)備影子就是保存,設(shè)備最新上傳的一次數(shù)據(jù)。

我們設(shè)計的軟件里,如果想要獲取設(shè)備的最新狀態(tài)信息,就采用設(shè)備影子接口。

如果對接口不熟悉,可以先進(jìn)行在線調(diào)試:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow

在線調(diào)試接口,可以請求影子接口,了解請求,與返回的數(shù)據(jù)格式。

調(diào)試完成看右下角的響應(yīng)體,就是返回的影子數(shù)據(jù)。

image-20240509194152229

設(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)試成功之后,可以得到訪問影子數(shù)據(jù)的真實鏈接,接下來的代碼開發(fā)中,就采用Qt寫代碼訪問此鏈接,獲取影子數(shù)據(jù),完成上位機(jī)開發(fā)。

image-20240509194214716

鏈接如下:

https://ad635970a1.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/28add376c01e4a61ac8b621c714bf459/devices/663cb18871d845632a0912e7_dev1/shadow

三、上位機(jī)開發(fā)(C++版)

為了方便查看設(shè)備上傳的數(shù)據(jù),接下來利用Qt開發(fā)一款A(yù)ndroid手機(jī)APP 和 Windows上位機(jī)。

使用華為云平臺提供的API接口獲取設(shè)備上傳的數(shù)據(jù),進(jìn)行可視化顯示,以及遠(yuǎn)程控制設(shè)備。

3.1 Qt開發(fā)環(huán)境安裝

Qt的中文官網(wǎng): https://www.qt.io/zh-cn/image-20221207160550486

image-20221207160606892

QT5.12.6的下載地址:https://download.qt.io/archive/qt/5.12/5.12.6

打開下載鏈接后選擇下面的版本進(jìn)行下載:

如果下載不了,可以在網(wǎng)盤里找到安裝包下載: 飛書文檔記錄的網(wǎng)盤地址:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink

軟件安裝時斷網(wǎng)安裝,否則會提示輸入賬戶。

安裝的時候,第一個復(fù)選框里的編譯器可以全選,直接點擊下一步繼續(xù)安裝。

image-20221203151742653

選擇編譯器: (一定要看清楚了)

image-20241028152725134

3.2 新建上位機(jī)工程

前面2講解了需要用的API接口,接下來就使用Qt設(shè)計上位機(jī),設(shè)計界面,完成整體上位機(jī)的邏輯設(shè)計。

【1】新建工程

image-20240117144052547

【2】設(shè)置項目的名稱。

image-20241112142627805

【3】選擇編譯系統(tǒng)

image-20240117144239681

【4】選擇默認(rèn)繼承的類

image-20240117144302275

【5】選擇編譯器

image-20241028153603487

【6】點擊完成

image-20240117144354252

【7】工程創(chuàng)建完成

image-20241112142836874

3.3 切換編譯器

在左下角是可以切換編譯器的。 可以選擇用什么樣的編譯器編譯程序。

目前新建工程的時候選擇了2種編譯器。 一種是mingw32這個編譯Windows下運(yùn)行的程序。 一種是Android編譯器,可以生成Android手機(jī)APP。

不過要注意:Android的編譯器需要配置一些環(huán)境才可以正常使用,這個大家可以網(wǎng)上找找教程配置一下就行了。

比如:https://blog.csdn.net/xiaolong1126626497/article/details/117254453

windows的編譯器就沒有這么麻煩,安裝好Qt就可以編譯使用。

下面我這里就選擇的 mingw32這個編譯器,編譯Windows下運(yùn)行的程序。

image-20241112142912481

3.4 編譯測試功能

創(chuàng)建完畢之后,編譯測試一下功能是否OK。

點擊左下角的綠色三角形按鈕。

正常運(yùn)行就可以看到彈出一個白色的框框。這就表示工程環(huán)境沒有問題了。 接下來就可以放心的設(shè)計界面了。

image-20241112142939735

3.5 設(shè)計UI界面與工程配置

【1】打開UI文件

image-20241112143019233

打開默認(rèn)的界面如下:

image-20240425194845233

【2】開始設(shè)計界面

根據(jù)自己需求設(shè)計界面。

3.6 編譯Windows上位機(jī)

點擊軟件左下角的綠色三角形按鈕進(jìn)行編譯運(yùn)行。

image-20240509202031739

3.7 配置Android環(huán)境

如果想編譯Android手機(jī)APP,必須要先自己配置好自己的Android環(huán)境。(搭建環(huán)境的過程可以自行百度搜索學(xué)習(xí))

然后才可以進(jìn)行下面的步驟。

【1】選擇Android編譯器

image-20240425232651515

image-20240509202408776

【2】創(chuàng)建Android配置文件

image-20240117144604025

image-20240117144635052

image-20240117144652014

創(chuàng)建完成。

【3】配置Android圖標(biāo)與名稱

image-20240612100947190

【3】編譯Android上位機(jī)

Qt本身是跨平臺的,直接選擇Android的編譯器,就可以將程序編譯到Android平臺。

然后點擊構(gòu)建。

image-20240509202534407

成功之后,在目錄下可以看到生成的apk文件,也就是Android手機(jī)的安裝包,電腦端使用QQ發(fā)送給手機(jī)QQ,手機(jī)登錄QQ接收,就能直接安裝。

生成的apk的目錄在哪里呢? 編譯完成之后,在控制臺會輸出APK文件的路徑。

知道目錄在哪里之后,在Windows的文件資源管理器里,找到路徑,具體看下圖,找到生成的apk文件。

image-20240509202712295

四、PyQt5(Python版)

4.1 安裝PyQt5

在Python中安裝PyQt庫非常簡單,可以使用pip這個包管理工具來完成。PyQt有兩個主要版本:PyQt5(基于Qt 5)和PyQt6(基于Qt 6)。

我這里安裝Qt5,以Qt5為例進(jìn)行開發(fā)。

要安裝PyQt5,打開命令行界面,然后運(yùn)行以下命令:

pip install PyQt5

安裝過程中:

image-20241128222327822

安裝完畢。

image-20241128222708039

4.2 安裝QtDesigner

如果想使用PyQt5的設(shè)計工具(Qt Designer),用圖形方式設(shè)計界面,可以安裝pyqt5-tools

pip install pyqt5-tools

安裝過程如下:

image-20241128222745062

安裝過程中

image-20241128223523710

安裝完畢。

image-20241128224259036

4.3 測試Qt環(huán)境

安裝完成后,先寫一份測試代碼,創(chuàng)建一個窗口,運(yùn)行測試Qt環(huán)境是否正常。

新建一個文件:hello_pyqt.py

image-20241128224337337

編寫代碼如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget  # 如果使用PyQt6,這里改為 from PyQt6.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('Hello PyQt')
window.show()

sys.exit(app.exec_())

在終端命令行中運(yùn)行:

python hello_pyqt.py

如果一切正常,應(yīng)該能看到一個標(biāo)題為Hello PyQt的空白窗口。這表明PyQt已經(jīng)成功安裝并且可以正常使用了。

4.4 設(shè)計代碼

PyQt5 展示了獲取數(shù)據(jù)后如何構(gòu)建圖形界面,實時顯示溫度、濕度、煙霧濃度、電壓、電流、功率的數(shù)值及其波形圖。

安裝依賴:

pip install pyqt5 pyqtchart

完整代碼

import sys
import random
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget
from PyQt5.QtChart import QChart, QChartView, QLineSeries
from PyQt5.QtCore import QTimer, QPointF


class DataFetcher:
    """模擬從服務(wù)器獲取數(shù)據(jù)的類"""
    def get_data(self):
        """獲取模擬數(shù)據(jù)"""
        return {
            "temperature": random.uniform(20.0, 30.0),
            "humidity": random.uniform(40.0, 60.0),
            "smoke_level": random.randint(200, 400),
            "voltage": random.uniform(220.0, 240.0),
            "current": random.uniform(5.0, 15.0),
            "power": random.uniform(500, 2000)
        }


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Home Circuit Protection Monitor")

        # 初始化布局和標(biāo)簽
        self.temperature_label = QLabel("Temperature: 0 °C")
        self.humidity_label = QLabel("Humidity: 0 %")
        self.smoke_label = QLabel("Smoke: 0 ppm")
        self.voltage_label = QLabel("Voltage: 0 V")
        self.current_label = QLabel("Current: 0 A")
        self.power_label = QLabel("Power: 0 W")

        # 初始化波形圖
        self.voltage_chart, self.voltage_series = self.create_chart("Voltage Waveform")
        self.current_chart, self.current_series = self.create_chart("Current Waveform")
        self.power_chart, self.power_series = self.create_chart("Power Waveform")

        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.temperature_label)
        layout.addWidget(self.humidity_label)
        layout.addWidget(self.smoke_label)
        layout.addWidget(self.voltage_label)
        layout.addWidget(self.current_label)
        layout.addWidget(self.power_label)
        layout.addWidget(QChartView(self.voltage_chart))
        layout.addWidget(QChartView(self.current_chart))
        layout.addWidget(QChartView(self.power_chart))

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

        # 初始化數(shù)據(jù)獲取器
        self.data_fetcher = DataFetcher()

        # 定時器,每秒刷新數(shù)據(jù)
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_data)
        self.timer.start(1000)

        # 時間步計數(shù)
        self.time_step = 0

    def create_chart(self, title):
        """創(chuàng)建一個帶有標(biāo)題的波形圖"""
        chart = QChart()
        chart.setTitle(title)
        series = QLineSeries()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chart.axisX().setTitleText("Time")
        chart.axisY().setTitleText("Value")
        return chart, series

    def update_data(self):
        """更新界面和波形圖的數(shù)據(jù)"""
        data = self.data_fetcher.get_data()

        # 更新文本標(biāo)簽
        self.temperature_label.setText(f"Temperature: {data['temperature']:.1f} °C")
        self.humidity_label.setText(f"Humidity: {data['humidity']:.1f} %")
        self.smoke_label.setText(f"Smoke: {data['smoke_level']} ppm")
        self.voltage_label.setText(f"Voltage: {data['voltage']:.1f} V")
        self.current_label.setText(f"Current: {data['current']:.1f} A")
        self.power_label.setText(f"Power: {data['power']:.1f} W")

        # 更新波形圖
        self.update_chart(self.voltage_series, data['voltage'])
        self.update_chart(self.current_series, data['current'])
        self.update_chart(self.power_series, data['power'])

        self.time_step += 1

    def update_chart(self, series, value):
        """更新指定波形圖的數(shù)據(jù)"""
        series.append(QPointF(self.time_step, value))
        if series.count() > 100:  # 限制最大點數(shù)
            series.remove(0)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(800, 600)
    window.show()
    sys.exit(app.exec_())

五、STM32代碼開發(fā)

當(dāng)前項目使用的相關(guān)軟件工具、傳感器代碼工程,已經(jīng)上傳到網(wǎng)盤:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink

【1】完整代碼

下面是核心框架和主程序。

#include "stm32f10x.h"
#include "usart.h"
#include "oled.h"
#include "buzzer.h"
#include "sht30.h"
#include "mq2.h"
#include "esp8266.h"
#include "power_monitor.h"

// 定義電流和功率閾值
#define CURRENT_THRESHOLD 15.0    // 15A
#define POWER_THRESHOLD 3000.0    // 3000W

// 煙霧濃度閾值
#define SMOKE_THRESHOLD 300       // 示例值

// 全局變量
float voltage = 0.0;
float current = 0.0;
float power = 0.0;
float energy = 0.0;
float temperature = 0.0;
float humidity = 0.0;
uint16_t smoke_level = 0;

// 警告標(biāo)志
uint8_t overcurrent_flag = 0;
uint8_t overpower_flag = 0;
uint8_t smoke_alarm_flag = 0;

// 初始化函數(shù)
void System_Init(void) {
    // 初始化串口
    USART_Init();
    
    // 初始化OLED顯示屏
    OLED_Init();
    
    // 初始化蜂鳴器
    Buzzer_Init();
    
    // 初始化環(huán)境溫濕度傳感器
    SHT30_Init();
    
    // 初始化煙霧傳感器
    MQ2_Init();
    
    // 初始化ESP8266 WiFi模塊
    ESP8266_Init();
    
    // 初始化電力參數(shù)采集模塊
    PowerMonitor_Init();
}

// 讀取傳感器數(shù)據(jù)
void Read_Sensors(void) {
    // 讀取電力參數(shù)
    PowerMonitor_Read(&voltage, ¤t, &power, &energy);
    
    // 讀取溫濕度
    SHT30_Read(&temperature, &humidity);
    
    // 讀取煙霧濃度
    smoke_level = MQ2_Read();
}

// 顯示數(shù)據(jù)到OLED
void Display_Data(void) {
    OLED_Clear();
    OLED_ShowString(0, 0, "Voltage:");
    OLED_ShowFloat(56, 0, voltage, 1);
    OLED_ShowString(90, 0, "V");
    
    OLED_ShowString(0, 10, "Current:");
    OLED_ShowFloat(56, 10, current, 1);
    OLED_ShowString(90, 10, "A");
    
    OLED_ShowString(0, 20, "Power:");
    OLED_ShowFloat(56, 20, power, 1);
    OLED_ShowString(90, 20, "W");
    
    OLED_ShowString(0, 30, "Temp:");
    OLED_ShowFloat(56, 30, temperature, 1);
    OLED_ShowString(90, 30, "C");
    
    OLED_ShowString(0, 40, "Humi:");
    OLED_ShowFloat(56, 40, humidity, 1);
    OLED_ShowString(90, 40, "%");
    
    OLED_ShowString(0, 50, "Smoke:");
    OLED_ShowNumber(56, 50, smoke_level);
    OLED_Refresh();
}

// 檢查報警條件
void Check_Alarm(void) {
    overcurrent_flag = (current > CURRENT_THRESHOLD);
    overpower_flag = (power > POWER_THRESHOLD);
    smoke_alarm_flag = (smoke_level > SMOKE_THRESHOLD);
    
    if (overcurrent_flag || overpower_flag || smoke_alarm_flag) {
        Buzzer_On(); // 啟動蜂鳴器
    } else {
        Buzzer_Off(); // 關(guān)閉蜂鳴器
    }
}

// 上傳數(shù)據(jù)到云端
void Upload_Data(void) {
    char mqtt_message[256];
    sprintf(mqtt_message, 
        "{ "voltage": %.1f, "current": %.1f, "power": %.1f, "
        ""temperature": %.1f, "humidity": %.1f, "smoke": %d }",
        voltage, current, power, temperature, humidity, smoke_level);
    
    ESP8266_MQTT_Publish("home/protection", mqtt_message);
}

// 主程序
int main(void) {
    System_Init(); // 系統(tǒng)初始化
    
    while (1) {
        Read_Sensors();    // 讀取傳感器數(shù)據(jù)
        Display_Data();    // 顯示數(shù)據(jù)到OLED
        Check_Alarm();     // 檢查是否報警
        Upload_Data();     // 上傳數(shù)據(jù)到云端
    }
}

【2】說明

  1. 模塊初始化
    • 初始化所有必要的模塊,包括串口、OLED、蜂鳴器、傳感器和WiFi模塊。
  2. 傳感器讀取
    • 通過調(diào)用子模塊的接口,獲取電力參數(shù)、溫濕度以及煙霧濃度。
  3. 數(shù)據(jù)展示
    • 使用OLED顯示屏展示實時數(shù)據(jù)。
  4. 報警檢查
    • 比較測量值與設(shè)定的閾值,如果超出范圍,激活蜂鳴器報警。
  5. 數(shù)據(jù)上傳
    • 通過ESP8266模塊,利用MQTT協(xié)議上傳數(shù)據(jù)到華為云物聯(lián)網(wǎng)平臺。
  6. 主循環(huán)
    • 循環(huán)讀取數(shù)據(jù)、顯示數(shù)據(jù)、檢查報警和上傳云端數(shù)據(jù)。

六、總結(jié)

在本項目中,設(shè)計并開發(fā)了一款基于單片機(jī)和物聯(lián)網(wǎng)技術(shù)的智能居家電路保護(hù)裝置。這一裝置不僅解決了傳統(tǒng)家庭電路保護(hù)方案中信息反饋不足、管理粗放的問題,還通過引入先進(jìn)的傳感技術(shù)網(wǎng)絡(luò)通信手段,實現(xiàn)了對家庭用電情況的精細(xì)化管理和全方位監(jiān)控。該裝置安裝于家庭總電表輸出端,能夠支持多達(dá)20路獨(dú)立線路的連接,并為每一路提供電壓、電流和功率的實時監(jiān)測服務(wù)。

通過集成高精度的電力參數(shù)采集模塊,裝置可以準(zhǔn)確地測量并分析各線路的用電數(shù)據(jù),確保了監(jiān)測結(jié)果的真實性和可靠性。一旦檢測到異常情況,如電流或功率超過設(shè)定閾值,系統(tǒng)會立即采取行動:切斷電源以防止?jié)撛诘陌踩鹿剩⑼ㄟ^本地蜂鳴器發(fā)出警報提醒用戶。同時,借助內(nèi)置的WIFI模塊,所有狀態(tài)信息都可以上傳至華為云物聯(lián)網(wǎng)平臺,用戶無論身處何地,只需打開手機(jī)上的Android應(yīng)用程序,即可查看家中的用電狀況,了解歷史變化趨勢,并可查看以波形或數(shù)字形式呈現(xiàn)的數(shù)據(jù)。此外,通過這個應(yīng)用程序,用戶還可以實現(xiàn)遠(yuǎn)程控制,例如恢復(fù)被切斷的電源或者調(diào)整報警閾值,極大地提升了用戶體驗。

為了增強(qiáng)裝置的功能性與安全性,我們在設(shè)計中加入了環(huán)境溫濕度傳感器SHT30和煙霧濃度檢測傳感器MQ2,它們分別用于監(jiān)控室內(nèi)環(huán)境條件和空氣中的煙霧水平。這些額外的監(jiān)測功能進(jìn)一步提高了裝置對于突發(fā)狀況的響應(yīng)能力,使得它不僅僅是一個電路保護(hù)設(shè)備,更成為了一個智能家居生態(tài)系統(tǒng)的重要組成部分。OLED顯示屏的應(yīng)用,則讓用戶無需依賴智能手機(jī)也能隨時掌握當(dāng)前的用電情況和其他關(guān)鍵信息,提供了更加直觀的操作體驗。

在硬件選型方面,選擇了STM32F103RCT6作為主控芯片,它具備高性能ARM Cortex-M3內(nèi)核,不僅滿足了復(fù)雜的計算任務(wù)需求,也保證了系統(tǒng)的穩(wěn)定運(yùn)行。軟件開發(fā)采用了Keil5工具鏈進(jìn)行編程,結(jié)合C語言編寫代碼,而Android應(yīng)用則使用Qt框架開發(fā),采用C++語言編寫,確保了不同部分之間的無縫對接。整個項目的實施過程中,注重每一個細(xì)節(jié),從選擇合適的元器件到優(yōu)化算法邏輯,力求打造出一個高效、可靠且易于使用的智能居家電路保護(hù)解決方案。

這款智能居家電路保護(hù)裝置集成了多種先進(jìn)技術(shù),為用戶提供更加安全、便捷的家庭用電管理方式。它不僅是現(xiàn)代家居生活中不可或缺的安全保障工具,也是邁向智慧生活的一大步。隨著智能家居市場的不斷發(fā)展和技術(shù)的進(jìn)步,我們相信,這一裝置將為更多家庭帶來安心、舒適的居住體驗,并推動智能家居領(lǐng)域向著更高層次發(fā)展。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6071

    文章

    45256

    瀏覽量

    660079
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2938

    文章

    46924

    瀏覽量

    402527
  • STM32
    +關(guān)注

    關(guān)注

    2301

    文章

    11073

    瀏覽量

    369374
  • 電路保護(hù)
    +關(guān)注

    關(guān)注

    4

    文章

    392

    瀏覽量

    56718
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    什么是變壓器保護(hù)裝置?變壓器保護(hù)裝置的作用

    變壓器在運(yùn)行過程中可能會面臨故障風(fēng)險,如過載、短路等,這些故障如果不及時發(fā)現(xiàn)和處理,可能會導(dǎo)致設(shè)備損壞,因此,變壓器保護(hù)裝置的應(yīng)用尤為重要,下面小編來說說什么是變壓器保護(hù)裝置?變壓器保護(hù)裝置的作用是什么。
    的頭像 發(fā)表于 05-27 14:56 ?786次閱讀
    什么是變壓器<b class='flag-5'>保護(hù)裝置</b>?變壓器<b class='flag-5'>保護(hù)裝置</b>的作用

    弧光保護(hù)裝置與傳統(tǒng)過流保護(hù)的差異

    弧光保護(hù)裝置與傳統(tǒng)過流保護(hù)的差異: 對比項弧光保護(hù)裝置傳統(tǒng)過流保護(hù) 檢測對象電弧光+電流突變僅電流幅值 動作時間5-15ms 1100ms-2s 適用場景開關(guān)柜內(nèi)部短路線路過載/遠(yuǎn)端短
    發(fā)表于 05-07 09:59

    如何提高弧光保護(hù)裝置的動作速度?

    等設(shè)備的布局,科學(xué)合理地布置弧光傳感器,縮短信號傳輸距離;優(yōu)化布線方案,采用優(yōu)質(zhì)線纜,減少信號傳輸延遲和干擾。 確保電源穩(wěn)定:配備穩(wěn)定可靠的電源系統(tǒng),設(shè)置電源監(jiān)測和保護(hù)電路,當(dāng)電源出現(xiàn)異常時能迅速采取措施,保證弧光保護(hù)裝置始終處
    發(fā)表于 05-06 10:09

    繼電保護(hù)裝置試驗儀選型指南

    在智能電網(wǎng)與新能源并網(wǎng)加速落地的背景下,?繼電保護(hù)裝置試驗儀?已成為保障電力系統(tǒng)可靠性的“數(shù)字哨兵”。面對微秒級時序控制、多裝置協(xié)同測試等嚴(yán)苛需求,?武漢特高壓電力科技有限公司?憑借自主研發(fā)
    發(fā)表于 04-30 08:57

    空壓機(jī)斷油保護(hù)裝置各個安裝現(xiàn)場實錄來了 # #plc #聯(lián)網(wǎng)

    保護(hù)裝置
    jf_35231275
    發(fā)布于 :2025年04月22日 16:06:48

    折彎機(jī)保護(hù)裝置-

    保護(hù)裝置
    jf_18500570
    發(fā)布于 :2025年03月22日 12:59:54

    折彎機(jī)保護(hù)裝置-折彎安全,裝置保護(hù)

    保護(hù)裝置
    jf_18500570
    發(fā)布于 :2025年01月20日 09:47:51

    折彎機(jī)保護(hù)裝置-折彎安全,激光保護(hù)

    保護(hù)裝置
    jf_18500570
    發(fā)布于 :2024年12月28日 09:53:51

    折彎機(jī)保護(hù)裝置-激光保護(hù),安全必備

    保護(hù)裝置
    jf_18500570
    發(fā)布于 :2024年11月30日 09:34:52

    聯(lián)網(wǎng)學(xué)習(xí)路線來啦!

    開發(fā)的方法,成為了未來一個單片機(jī)程序員的必備技能。 3.2.2網(wǎng)絡(luò)通信協(xié)議棧 聯(lián)網(wǎng)開發(fā),離不開網(wǎng)絡(luò)的支持。作為網(wǎng)絡(luò)協(xié)議的實際統(tǒng)治者——TCP/IP,相信了解一些計算機(jī)知識的人都不陌生,在單片
    發(fā)表于 11-11 16:03

    單片機(jī)聯(lián)網(wǎng)中的作用

    隨著技術(shù)的飛速發(fā)展,聯(lián)網(wǎng)已經(jīng)成為連接物理世界與數(shù)字世界的橋梁。聯(lián)網(wǎng)設(shè)備通過互聯(lián)網(wǎng)相互連接,實現(xiàn)數(shù)據(jù)的收集、處理和傳輸,從而提高效率、降低
    的頭像 發(fā)表于 11-01 14:27 ?1977次閱讀

    按用戶技術(shù)要求定制功能的保護(hù)裝置

    按用戶技術(shù)要求定制功能的保護(hù)裝置廣眾科技自成立以來就潛力于礦山設(shè)備保護(hù)方面的業(yè)務(wù),當(dāng)然一些基本的保護(hù)裝置——QHF釋壓閥,儲氣罐超溫超壓保護(hù)裝置,空壓機(jī)斷油
    發(fā)表于 10-31 14:51

    折彎機(jī)保護(hù)裝置-激光裝置,折彎無憂

    保護(hù)裝置
    jf_18500570
    發(fā)布于 :2024年10月28日 13:18:12

    微機(jī)綜合繼電器保護(hù)裝置

    微機(jī)綜合繼電器保護(hù)裝置,即微機(jī)繼電保護(hù)裝置或微機(jī)綜保裝置,是電力系統(tǒng)中的重要組成部分。以下是對其的詳細(xì)介紹: 一、定義與組成 微機(jī)繼電保護(hù)裝置是由高集成度、總線不出芯片
    的頭像 發(fā)表于 10-25 14:49 ?2702次閱讀
    微機(jī)綜合繼電器<b class='flag-5'>保護(hù)裝置</b>

    鋒麗折彎機(jī)安裝折彎機(jī)保護(hù)裝置案例來嘍 #安全 #折彎機(jī)保護(hù)裝置

    保護(hù)裝置
    jf_31892182
    發(fā)布于 :2024年10月22日 16:42:45