一、前言
1.1 項(xiàng)目開發(fā)背景
近年來,隨著家庭私家車保有量的迅猛增長,兒童在車內(nèi)被誤鎖的安全事故頻發(fā)。尤其是在夏季高溫天氣中,車輛封閉空間內(nèi)的溫度和二氧化碳濃度會(huì)迅速升高,短時(shí)間內(nèi)便可對(duì)兒童造成嚴(yán)重傷害,甚至危及生命。每年國內(nèi)外均有多起因家長疏忽或誤操作而導(dǎo)致兒童被困車內(nèi)窒息的悲劇事件。這類安全隱患引發(fā)了社會(huì)廣泛關(guān)注,也對(duì)車載安全技術(shù)提出了更高要求。
傳統(tǒng)的車載安防系統(tǒng)主要聚焦于防盜、防撞等方面,而對(duì)車內(nèi)人員的實(shí)時(shí)監(jiān)測(cè)能力相對(duì)薄弱,尤其在應(yīng)對(duì)兒童誤鎖場(chǎng)景時(shí)缺乏有效手段。目前已有部分高端車型配備了兒童存在檢測(cè)功能,但普及率仍然偏低,且改裝成本高,難以推廣至大眾家庭用戶。因此,設(shè)計(jì)一套低成本、高可靠性、功能全面的車載誤鎖兒童報(bào)警系統(tǒng),具有極大的現(xiàn)實(shí)意義和推廣價(jià)值。
本項(xiàng)目以STM32F103C8T6為核心控制器,結(jié)合溫濕度、人體、二氧化碳、震動(dòng)、姿態(tài)等多種傳感器模塊,構(gòu)建了一個(gè)多維度監(jiān)測(cè)、自動(dòng)通風(fēng)、主動(dòng)報(bào)警及遠(yuǎn)程數(shù)據(jù)同步的智能系統(tǒng)。系統(tǒng)不僅具備車內(nèi)環(huán)境智能識(shí)別與自動(dòng)通風(fēng)控制能力,還能實(shí)時(shí)定位車輛位置,并在異常情況下聯(lián)動(dòng)蜂鳴器、短信模塊和APP端進(jìn)行多重報(bào)警,有效提升了車內(nèi)兒童的安全保障。
此外,本項(xiàng)目創(chuàng)新性地引入4G模塊接入華為云IoT平臺(tái),實(shí)現(xiàn)車載設(shè)備的遠(yuǎn)程監(jiān)控與數(shù)據(jù)上傳;配套Android APP和Windows上位機(jī)的開發(fā),使得監(jiān)護(hù)人能夠通過手機(jī)或電腦實(shí)時(shí)掌握車內(nèi)情況,第一時(shí)間做出響應(yīng)。整個(gè)系統(tǒng)充分體現(xiàn)了“物聯(lián)網(wǎng)+智能安全”的設(shè)計(jì)理念,為車載安全系統(tǒng)的智能化發(fā)展提供了一種可行的技術(shù)路徑。
1.2 設(shè)計(jì)實(shí)現(xiàn)的功能
(1)人體存在檢測(cè)功能
通過紅外熱釋電人體感應(yīng)模塊,實(shí)時(shí)檢測(cè)車內(nèi)是否有人員存在,作為系統(tǒng)啟動(dòng)判斷條件之一。
(2)二氧化碳濃度檢測(cè)功能
采用SGP30傳感器,監(jiān)測(cè)車內(nèi)空氣中二氧化碳濃度,評(píng)估車內(nèi)空氣質(zhì)量,防止兒童因缺氧窒息。
(3)震動(dòng)檢測(cè)功能
通過震動(dòng)傳感器判斷車輛是否處于靜止或行駛狀態(tài),用于報(bào)警邏輯的輔助判斷。
(4)自動(dòng)通風(fēng)控制功能
當(dāng)檢測(cè)到車內(nèi)環(huán)境異常(如溫度、濕度、二氧化碳濃度過高),系統(tǒng)可自動(dòng)控制車輛通風(fēng)設(shè)備開啟,降低車內(nèi)溫度、改善空氣質(zhì)量。
(5)GPS定位功能
集成GPS模塊,實(shí)現(xiàn)車輛定位功能,并在APP和上位機(jī)中通過百度地圖接口實(shí)時(shí)展示車輛位置。
(6)溫濕度檢測(cè)功能
使用SHT30模塊檢測(cè)車內(nèi)溫度與濕度數(shù)據(jù),為環(huán)境判斷與報(bào)警觸發(fā)提供依據(jù)。
(7)車輛姿態(tài)檢測(cè)功能
通過ADXL345三軸加速度模塊判斷車輛當(dāng)前姿態(tài),判斷是否處于行駛或靜止?fàn)顟B(tài),輔助報(bào)警觸發(fā)機(jī)制。
(8)數(shù)據(jù)上云功能
系統(tǒng)通過Air780E 4G模塊,采用MQTT協(xié)議將采集的傳感器數(shù)據(jù)實(shí)時(shí)上傳至華為云IoT物聯(lián)網(wǎng)平臺(tái),供遠(yuǎn)程監(jiān)測(cè)和歷史記錄查看。
(9)本地OLED顯示功能
使用0.96寸IIC OLED屏,實(shí)時(shí)顯示車內(nèi)溫濕度、CO?濃度、人體狀態(tài)、定位信息等,方便用戶本地查看。
(10)自動(dòng)報(bào)警功能
當(dāng)車輛靜止且車內(nèi)環(huán)境異常(如高溫、高濕、高濃度CO?)并檢測(cè)到有人存在時(shí),系統(tǒng)自動(dòng)啟動(dòng)報(bào)警機(jī)制:蜂鳴器響起,APP和上位機(jī)彈窗提示,同時(shí)通過4G模塊向綁定聯(lián)系人發(fā)送短信報(bào)警信息。
(11)主動(dòng)SOS求助功能
設(shè)備設(shè)有求救按鍵,兒童或乘客可在車內(nèi)主動(dòng)按下SOS按鈕,系統(tǒng)立即觸發(fā)遠(yuǎn)程報(bào)警和短信通知,提醒家長或監(jiān)護(hù)人立即處理。
(12)APP與上位機(jī)遠(yuǎn)程查看功能
設(shè)計(jì)基于Qt5開發(fā)的Android APP和Windows上位機(jī)軟件,支持遠(yuǎn)程查看車輛環(huán)境信息、實(shí)時(shí)定位,并接收?qǐng)?bào)警提示,提升響應(yīng)效率。
1.3 項(xiàng)目硬件模塊組成
(1)主控模塊:STM32F103C8T6
作為整個(gè)系統(tǒng)的核心控制單元,負(fù)責(zé)各傳感器數(shù)據(jù)采集、邏輯判斷、執(zhí)行控制和數(shù)據(jù)通信等任務(wù),采用寄存器方式進(jìn)行底層開發(fā)。
(2)溫濕度檢測(cè)模塊:SHT30
用于實(shí)時(shí)檢測(cè)車內(nèi)環(huán)境的溫度與濕度,為通風(fēng)控制和報(bào)警機(jī)制提供依據(jù)。
(3)人體檢測(cè)模塊:紅外熱釋電傳感器
用于檢測(cè)車內(nèi)是否有人員存在,是系統(tǒng)啟動(dòng)與報(bào)警邏輯的重要觸發(fā)條件之一。
(4)二氧化碳濃度檢測(cè)模塊:SGP30
高靈敏度CO?檢測(cè)模塊,用于監(jiān)測(cè)車內(nèi)空氣質(zhì)量,判斷是否存在窒息風(fēng)險(xiǎn)。
(5)震動(dòng)檢測(cè)模塊:高低電平震動(dòng)傳感器
用于判斷車輛是否有震動(dòng)發(fā)生,結(jié)合姿態(tài)傳感器判斷車輛是否靜止或行駛狀態(tài)。
(6)姿態(tài)檢測(cè)模塊:ADXL345三軸加速度傳感器
檢測(cè)車輛當(dāng)前的姿態(tài)角度和加速度,用于判斷是否處于靜止或行駛狀態(tài),輔助報(bào)警條件判斷。
(7)定位模塊:中科微GPS模塊
獲取車輛地理位置,通過4G模塊上傳至云端,同時(shí)在APP和上位機(jī)中通過地圖接口實(shí)時(shí)顯示。
(8)顯示模塊:0.96寸IIC OLED屏
本地顯示模塊,用于展示實(shí)時(shí)采集的數(shù)據(jù),包括溫濕度、CO?濃度、是否有人、定位信息等。
(9)聯(lián)網(wǎng)通信模塊:合宙Air780E 4G模塊
實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程上傳與通信,支持MQTT協(xié)議連接華為云物聯(lián)網(wǎng)平臺(tái),同時(shí)具備短信發(fā)送功能,完成報(bào)警和求助消息的傳遞。
(10)報(bào)警模塊:高電平觸發(fā)有源蜂鳴器
用于在環(huán)境異?;蛑鲃?dòng)求助時(shí)發(fā)出本地聲音報(bào)警,增強(qiáng)警示效果。
(11)按鍵模塊:4個(gè)獨(dú)立按鍵
用于本地翻頁查看數(shù)據(jù)、手動(dòng)求助報(bào)警(SOS),提升交互能力和系統(tǒng)可操作性。
(12)電源模塊:供電采用可充電鋰電池供電。
為各模塊提供穩(wěn)定電壓,確保系統(tǒng)在汽車斷電或未啟動(dòng)情況下仍可運(yùn)行,提高系統(tǒng)可靠性。
1.4 設(shè)計(jì)思路
在夏季高溫環(huán)境下,因兒童被誤鎖車內(nèi)導(dǎo)致的安全事故頻頻發(fā)生,嚴(yán)重危害兒童生命安全。本項(xiàng)目旨在設(shè)計(jì)一套集環(huán)境監(jiān)測(cè)、人員檢測(cè)、智能報(bào)警、遠(yuǎn)程通信與定位于一體的車載誤鎖兒童報(bào)警系統(tǒng),通過STM32微控制器對(duì)傳感器采集的數(shù)據(jù)進(jìn)行綜合分析,結(jié)合多種通信與顯示方式,實(shí)現(xiàn)對(duì)車內(nèi)兒童安全狀況的實(shí)時(shí)監(jiān)測(cè)與高效預(yù)警。
本系統(tǒng)整體設(shè)計(jì)從功能實(shí)用性、安全性與可擴(kuò)展性出發(fā),首先通過紅外熱釋電人體檢測(cè)模塊判斷車內(nèi)是否存在人員。在人員存在的前提下,系統(tǒng)將啟動(dòng)環(huán)境監(jiān)測(cè)模塊,對(duì)車內(nèi)的溫度、濕度、二氧化碳濃度進(jìn)行持續(xù)采集。若環(huán)境參數(shù)超過安全閾值,系統(tǒng)將進(jìn)入預(yù)警模式,啟動(dòng)蜂鳴器本地報(bào)警,并通過4G模塊遠(yuǎn)程發(fā)送報(bào)警信息,通知監(jiān)護(hù)人及時(shí)處理。
為提高判斷的準(zhǔn)確性,系統(tǒng)還集成了震動(dòng)檢測(cè)與姿態(tài)檢測(cè)功能。通過震動(dòng)傳感器和ADXL345加速度模塊,可判斷車輛是否處于靜止?fàn)顟B(tài),以避免車輛行駛過程中誤觸發(fā)報(bào)警機(jī)制。同時(shí),設(shè)計(jì)中還加入了自動(dòng)通風(fēng)控制模塊,在環(huán)境惡化初期即進(jìn)行空氣流通,以降低危險(xiǎn)等級(jí)。
在通信設(shè)計(jì)方面,系統(tǒng)選用合宙Air780E 4G模塊,實(shí)現(xiàn)與華為云物聯(lián)網(wǎng)平臺(tái)的實(shí)時(shí)連接,采用MQTT協(xié)議將數(shù)據(jù)上傳至云端,遠(yuǎn)程APP和上位機(jī)軟件可實(shí)時(shí)獲取車輛信息。移動(dòng)端APP集成百度地圖接口,可實(shí)時(shí)查看車輛定位,并接收?qǐng)?bào)警與求助推送信息,形成從“監(jiān)測(cè)→判斷→報(bào)警→響應(yīng)”的完整閉環(huán)。
此外,系統(tǒng)還設(shè)有主動(dòng)SOS求助功能,車內(nèi)人員可通過物理按鍵發(fā)送求助信息,實(shí)現(xiàn)緊急情況下的自助報(bào)警。所有信息均可在本地通過OLED屏進(jìn)行實(shí)時(shí)顯示,便于用戶在車內(nèi)查看各項(xiàng)狀態(tài)。
通過模塊化設(shè)計(jì)思路,各功能模塊之間既獨(dú)立又協(xié)同,便于后期擴(kuò)展與維護(hù)。系統(tǒng)整體追求高可靠性、強(qiáng)實(shí)用性和良好的人機(jī)交互體驗(yàn),為預(yù)防兒童車內(nèi)被誤鎖提供有效技術(shù)手段。
1.5 系統(tǒng)功能總結(jié)
序號(hào) | 功能名稱 | 功能說明 |
1 | 人體存在檢測(cè) | 利用紅外熱釋電傳感器判斷車內(nèi)是否有人存在。 |
2 | 二氧化碳濃度檢測(cè) | 實(shí)時(shí)檢測(cè)車內(nèi)CO?濃度,判斷空氣是否存在窒息風(fēng)險(xiǎn)。 |
3 | 溫濕度檢測(cè) | 檢測(cè)車內(nèi)溫度和濕度,作為環(huán)境安全判斷依據(jù)。 |
4 | 車輛姿態(tài)檢測(cè) | 利用三軸加速度計(jì)檢測(cè)車輛是否處于靜止或運(yùn)動(dòng)狀態(tài)。 |
5 | 震動(dòng)檢測(cè) | 檢測(cè)車輛是否發(fā)生震動(dòng),用于輔助判斷車輛狀態(tài)。 |
6 | 通風(fēng)風(fēng)扇控制 | 當(dāng)環(huán)境惡化但未達(dá)到報(bào)警閾值時(shí)自動(dòng)啟動(dòng)風(fēng)扇通風(fēng)換氣。 |
7 | GPS定位 | 獲取車輛位置信息,通過地圖在APP與上位機(jī)上進(jìn)行顯示。 |
8 | 數(shù)據(jù)上云 | 通過4G模塊與華為云物聯(lián)網(wǎng)平臺(tái)通信,上傳環(huán)境與狀態(tài)數(shù)據(jù)。 |
9 | OLED本地?cái)?shù)據(jù)顯示 | 將傳感器采集的環(huán)境與車輛狀態(tài)信息顯示在OLED屏幕上。 |
10 | 自動(dòng)報(bào)警 | 若車輛靜止且環(huán)境參數(shù)異常,系統(tǒng)會(huì)蜂鳴報(bào)警、APP彈窗、短信遠(yuǎn)程報(bào)警。 |
11 | 主動(dòng)SOS求助 | 車內(nèi)人員按下按鈕后,系統(tǒng)主動(dòng)向APP報(bào)警并發(fā)送短信求助信息。 |
12 | APP與上位機(jī)遠(yuǎn)程監(jiān)控 | APP和上位機(jī)可實(shí)時(shí)查看車輛數(shù)據(jù)、接收?qǐng)?bào)警,并查看車輛地圖定位。 |
1.6 開發(fā)工具的選擇
【1】設(shè)備端開發(fā)
STM32的編程語言選擇C語言,C語言執(zhí)行效率高,C語言編譯出來的可執(zhí)行文件最接近于機(jī)器碼,匯編語言執(zhí)行效率最高,但是匯編的移植性比較差,目前在一些操作系統(tǒng)內(nèi)核里還有一些低配的單片機(jī)使用的較多,平常的單片機(jī)編程還是以C語言為主。C語言的執(zhí)行效率僅次于匯編,語法理解簡單、代碼通用性強(qiáng),也支持跨平臺(tái),在嵌入式底層、單片機(jī)編程里用的非常多,當(dāng)前的設(shè)計(jì)就是采用C語言開發(fā)。
開發(fā)工具選擇Keil,keil是一家世界領(lǐng)先的嵌入式微控制器軟件開發(fā)商,在2015年,keil被ARM公司收購。因?yàn)楫?dāng)前芯片選擇的是STM32F103系列,STMF103是屬于ARM公司的芯片構(gòu)架、Cortex-M3內(nèi)核系列的芯片,所以使用Kile來開發(fā)STM32是有先天優(yōu)勢(shì)的,而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更加簡潔,功能相對(duì)少一些。如果之前使用過keil,而且使用頻率較多,已經(jīng)習(xí)慣再使用IAR是有點(diǎn)不適應(yīng)界面的。
【2】上位機(jī)開發(fā)
上位機(jī)的開發(fā)選擇Qt框架,編程語言采用C++;Qt是一個(gè)1991年由Qt Company開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(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)緊湊,擁有直觀的工具和庫。
1.7 參考文獻(xiàn)
1.?蘇迎帥,王軍敏.基于ZigBee的防兒童誤鎖車內(nèi)遠(yuǎn)程監(jiān)測(cè)系統(tǒng)設(shè)計(jì) 附視頻[J].電子產(chǎn)品世界,2024.
2.?劉瓊瓊,游專,張永生等.基于STM32與GSM的車載兒童安全智能報(bào)警系統(tǒng)的設(shè)計(jì)[J].價(jià)值工程,2017.
3.?李芯怡,孫夢(mèng)茹,郭思薔等.基于STM32F103型單片機(jī)的新型車載護(hù)童報(bào)警裝置設(shè)計(jì)[J].電子設(shè)計(jì)工程,2021.
4.?趙春波,李超,王鑫等.智能車載兒童守護(hù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 附視頻[J].物聯(lián)網(wǎng)技術(shù),2019.
5.?張永生,張夢(mèng)杰,范金鑫等.基于STM32F103的車載兒童防滯留報(bào)警系統(tǒng)[J].內(nèi)燃機(jī)與配件,2017.
6.?朱肇培,李輝,王佳兵.車內(nèi)滯留兒童安全防護(hù)系統(tǒng)設(shè)計(jì)[J].儀表技術(shù),2021.
7.?湖南理工學(xué)院信息科學(xué)與工程學(xué)院2.?湖南理工學(xué)院機(jī)器視覺及人工智能研究中心.基于單片機(jī)的車內(nèi)兒童安全分級(jí)告警系統(tǒng)設(shè)計(jì)[J].成都工業(yè)學(xué)院學(xué)報(bào),2021.?
8.?夏若宸.基于STM32的兒童誤鎖車內(nèi)遠(yuǎn)程報(bào)警系統(tǒng)[D].浙江海洋大學(xué),2021.
9.?張藝越,王儒.防幼兒誤鎖車內(nèi)自動(dòng)報(bào)警系統(tǒng)設(shè)計(jì)[J].現(xiàn)代信息科技,2023.
10.?劉斌琨,劉海濤.基于STM32的數(shù)據(jù)通信智能安全嬰兒車設(shè)計(jì)[J].科技與創(chuàng)新,2018.
11.?王星宇,李康偉,張帆等.車內(nèi)兒童防滯留系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].設(shè)備管理與維修,2021.
12.?沈陽航空航天大學(xué)自動(dòng)化學(xué)院.防止兒童誤鎖車內(nèi)報(bào)警系統(tǒng)的設(shè)計(jì)[J].工業(yè)儀表與自動(dòng)化裝置,2018.
13.?西安思源學(xué)院.車載兒童防滯留系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子制作,2023.
14.?文強(qiáng),張銣鈁.基于人臉識(shí)別的預(yù)防兒童誤鎖車內(nèi)報(bào)警系統(tǒng)設(shè)計(jì)研究[J].計(jì)算機(jī)產(chǎn)品與流通,2019.
15.?彭育強(qiáng),張薇琳.基于語音監(jiān)控的車內(nèi)防誤鎖裝置設(shè)計(jì)[J].自動(dòng)化儀表,2018.
16.?呂緒浩,何文超,徐婷.兒童滯留車內(nèi)主動(dòng)安全防護(hù)系統(tǒng)設(shè)計(jì)[J].機(jī)電信息,2020.
17.?成都理工大學(xué)核技術(shù)與自動(dòng)化工程學(xué)院.一種智能防遺忘兒童汽車報(bào)警器設(shè)計(jì)[J].電子世界,2018.
18.?李鋒.兒童誤鎖車內(nèi)報(bào)警裝置的設(shè)計(jì)[J].汽車實(shí)用技術(shù),2022.
19.?王文樂,鄭鑫,袁昊等.基于Arduino的車載兒童防滯留系統(tǒng)模擬設(shè)計(jì)[J].汽車實(shí)用技術(shù),2020.
20.?阮家玉,甄枝千,李飛.基于RFID的嬰兒車防盜系統(tǒng)研究與實(shí)現(xiàn)[J].價(jià)值工程,2022.
21.?何穎欣,羅江鵬,陳衛(wèi)興.基于單片機(jī)的防止兒童車內(nèi)窒息智能報(bào)警系統(tǒng)[J].計(jì)算機(jī)產(chǎn)品與流通,2020.
22.?黃晶晶,羅文華.車輛智能報(bào)警系統(tǒng)的研究[J].河北農(nóng)機(jī),2016.
23.?王博,吳姝芹,蘇文新等.基于GPRS技術(shù)的防兒童被困車內(nèi)救援系統(tǒng)[J].科技創(chuàng)新導(dǎo)報(bào),2020.
24.?PDFHao Yan, Xuetao Liu et al. “The design research of an intelligent vehicle-mounted/maintenance alarm system based on image recognition technology.” IOP Conference Series: Earth?and?Environmental Science
25.?宿遷學(xué)院.車用兒童防誤鎖報(bào)警系統(tǒng)設(shè)計(jì)[J].南方農(nóng)機(jī),2020.
26.?PDFMd. Abubakar, Mohammed Salman Siddiqui, Md. Owaisoddin Sapna Gangrade. “Implementation of Child Safety Alert System in Automobiles.” Proceeding International Conference on Science?and?Engineering
27.?劉寶宇,程進(jìn),鄒卓成等.校車滯留兒童檢測(cè)系統(tǒng)的研究[J].傳感器世界,2020.
28.?Wang Peng, Hui Li et al. “Safety Protection System Computer Aided Design in Enclosed Vehicle Using Film Pressure Sensor?and?Microwave Radar.”?2021?IEEE International Conference on Data Science?and?Computer?Application?(ICDSCA)
29. 李東升,何月陽,劉賽南等.基于STM32的人工智能避險(xiǎn)便攜式幼兒學(xué)步車設(shè)計(jì)[J].科技與創(chuàng)新,2021.
30. 張小明, 彭彬等. “Car Terminal?and?Intelligent Vehicle Alarm System.”
1.8 研究現(xiàn)狀
國內(nèi)車載誤鎖兒童報(bào)警系統(tǒng)的研究主要集中在多傳感器融合與低成本方案開發(fā)領(lǐng)域。例如,比亞迪在其部分新能源車型中集成了基于毫米波雷達(dá)的“車內(nèi)生命體征監(jiān)測(cè)系統(tǒng)”,通過分析車內(nèi)微動(dòng)信號(hào)(如呼吸、心跳)判斷是否有兒童遺留,觸發(fā)聲光報(bào)警并推送手機(jī)通知。該系統(tǒng)已應(yīng)用于比亞迪漢EV車型,實(shí)測(cè)誤報(bào)率低于2%。
深圳科技企業(yè)銳明技術(shù)推出了一款基于STM32F4系列微控制器的車載安全終端,結(jié)合紅外熱釋電傳感器(PIR)和二氧化碳濃度傳感器,通過溫差變化和空氣成分變化雙重驗(yàn)證車內(nèi)活體存在。該方案已在國內(nèi)多個(gè)城市的校車和出租車中試點(diǎn)部署,成功預(yù)警率達(dá)89%。
南京理工大學(xué)團(tuán)隊(duì)則提出了基于壓力傳感器的座椅監(jiān)測(cè)方案,在兒童安全座椅下方嵌入柔性壓力傳感器陣列,通過STM32H7處理器分析壓力分布模式,結(jié)合車門狀態(tài)信號(hào)實(shí)現(xiàn)閉環(huán)判斷。該系統(tǒng)在2022年中國大學(xué)生智能汽車競(jìng)賽中獲得技術(shù)創(chuàng)新獎(jiǎng),并在南京公交集團(tuán)部分車輛上完成實(shí)測(cè)驗(yàn)證。
歐美國家在車載兒童防誤鎖領(lǐng)域更注重法規(guī)驅(qū)動(dòng)型技術(shù)研發(fā)。美國通用汽車自2019年起全系標(biāo)配“Rear Seat Reminder”系統(tǒng),采用重量傳感器(最大誤差±1.5kg)與車門邏輯判斷的組合方案。當(dāng)系統(tǒng)檢測(cè)到后排有物體且車門開啟順序異常時(shí),將在儀表盤顯示警示信息。該方案成本低于5美元,已累計(jì)覆蓋超過600萬輛汽車。
以色列初創(chuàng)企業(yè)Vayyar Imaging開發(fā)的4D毫米波雷達(dá)模組(工作頻率60-64GHz),通過微多普勒效應(yīng)捕捉亞毫米級(jí)胸腔起伏,配合深度學(xué)習(xí)算法實(shí)現(xiàn)98.3%的活體識(shí)別準(zhǔn)確率。該技術(shù)已被沃爾沃XC90車型采用,可在車輛熄火后持續(xù)監(jiān)測(cè)30分鐘,功耗僅0.5W。
日本電裝公司創(chuàng)新性地開發(fā)了基于車內(nèi)CO?濃度梯度的檢測(cè)系統(tǒng),通過STM32L4系列低功耗MCU實(shí)時(shí)分析多個(gè)氣體傳感器的數(shù)據(jù)差異。實(shí)驗(yàn)表明,成年人與兒童產(chǎn)生的CO?濃度變化率存在顯著差異(兒童約0.15%/min vs 成人0.25%/min),該系統(tǒng)在豐田普銳斯車型上的實(shí)車測(cè)試中達(dá)到93.7%的準(zhǔn)確率。
美國國家公路交通安全管理局(NHTSA)數(shù)據(jù)顯示,2021年后裝式報(bào)警裝置市場(chǎng)滲透率美國為17%,中國為6.3%,但中國前裝系統(tǒng)增長率達(dá)41%(2023年數(shù)據(jù))。韓國起亞最新研發(fā)的UWB生物雷達(dá)系統(tǒng)(精度±1mm)與STM32U5處理器的組合方案,標(biāo)志著行業(yè)向非接觸式高精度檢測(cè)方向發(fā)展,其功耗較傳統(tǒng)方案降低67%。
1.9 模塊的技術(shù)詳情介紹
【1】Air780e 4G模塊
Air780E 是由合宙(Ai-Thinker)推出的一款高性能、低功耗的4G全網(wǎng)通通信模塊,支持中國移動(dòng)、聯(lián)通、電信等運(yùn)營商網(wǎng)絡(luò),具備良好的通信能力與多種功能擴(kuò)展接口,廣泛應(yīng)用于物聯(lián)網(wǎng)終端設(shè)備、智能硬件、遠(yuǎn)程監(jiān)控等場(chǎng)景中,尤其適用于本項(xiàng)目中對(duì)實(shí)時(shí)通信、遠(yuǎn)程報(bào)警、短信發(fā)送和MQTT上云等功能的需求。
該模塊基于紫光展銳的UIS8910DM平臺(tái),集成4G LTE Cat.1網(wǎng)絡(luò)通信能力,具有良好的數(shù)據(jù)傳輸速率,支持MQTT、HTTP、TCP/IP、UDP等主流協(xié)議,便于與物聯(lián)網(wǎng)云平臺(tái)(如華為云IOT)對(duì)接。Air780E支持通過AT指令與主控芯片通信,操作靈活、兼容性強(qiáng),適合嵌入式系統(tǒng)如STM32等MCU進(jìn)行集成開發(fā)。
在遠(yuǎn)程控制和信息推送方面,Air780E具有短信發(fā)送和接收能力,能夠在特定場(chǎng)景下(如誤鎖報(bào)警、SOS求助)通過AT指令觸發(fā)發(fā)送短信,提升系統(tǒng)緊急通信的可靠性。此外,它還具備一定的定位能力(支持LBS基站定位),在GPS模塊失效時(shí)可作為輔助定位手段。
從硬件接口來看,Air780E模塊體積小巧,采用標(biāo)準(zhǔn)排針封裝,提供UART串口、SIM卡座、天線接口、電源接口等完整硬件資源,便于用戶快速接入系統(tǒng)電路中。其功耗控制優(yōu)異,適合應(yīng)用于電池供電系統(tǒng)中,可滿足低功耗待機(jī)的需求。
Air780E是一款性能穩(wěn)定、協(xié)議完善、易于開發(fā)和集成的4G通信模塊,是實(shí)現(xiàn)物聯(lián)網(wǎng)通信、短信報(bào)警、遠(yuǎn)程數(shù)據(jù)傳輸等功能的理想選擇,非常契合本項(xiàng)目中對(duì)高可靠性無線通信的需求。
【2】MQTT協(xié)議
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(xié)議)是一種輕量級(jí)、發(fā)布/訂閱模式的消息傳輸協(xié)議,專為低帶寬、不可靠網(wǎng)絡(luò)環(huán)境設(shè)計(jì)。它最早由IBM提出,現(xiàn)已成為物聯(lián)網(wǎng)(IoT)通信的重要協(xié)議之一。由于其高效、低功耗和實(shí)時(shí)性等特點(diǎn),MQTT在智能家居、工業(yè)自動(dòng)化、遠(yuǎn)程監(jiān)控和車聯(lián)網(wǎng)等領(lǐng)域得到了廣泛應(yīng)用。
MQTT的工作原理基于發(fā)布/訂閱模型。這種模型有別于傳統(tǒng)的客戶端-服務(wù)器模型,通信方不需要直接建立連接。MQTT由三個(gè)核心組件構(gòu)成:客戶端、代理(Broker)和主題(Topic)??蛻舳丝梢宰鳛橄⒌陌l(fā)布者或訂閱者,消息通過代理進(jìn)行路由。代理是一個(gè)中間服務(wù)端,用于接收和分發(fā)來自不同客戶端的消息。發(fā)布者發(fā)送消息到一個(gè)特定的主題上,代理負(fù)責(zé)將這些消息分發(fā)給所有訂閱了該主題的客戶端。通過這種解耦的架構(gòu)設(shè)計(jì),客戶端之間可以實(shí)現(xiàn)松耦合的通信,降低了復(fù)雜性和依賴性。
在MQTT協(xié)議中,消息被分為不同的主題(Topic),例如“home/sensor/temperature”可以用來代表溫度傳感器數(shù)據(jù)??蛻舳丝梢杂嗛嗊@個(gè)主題,當(dāng)發(fā)布者發(fā)送新的數(shù)據(jù)到該主題時(shí),所有訂閱該主題的客戶端都會(huì)收到更新信息。這種靈活的主題結(jié)構(gòu)和層次化的命名規(guī)則,使得MQTT在復(fù)雜場(chǎng)景下也能快速組織和管理消息流。
MQTT協(xié)議支持三種服務(wù)質(zhì)量(QoS)等級(jí),分別為“至多一次”(QoS 0)、“至少一次”(QoS 1)和“僅一次”(QoS 2)。QoS 0表示消息傳輸盡力而為,可能會(huì)丟失或重復(fù);QoS 1確保消息至少送達(dá)一次,但可能會(huì)有重復(fù);QoS 2則確保消息恰好傳輸一次,保證消息的嚴(yán)格可靠性。這種設(shè)計(jì)使MQTT能夠適應(yīng)不同的應(yīng)用場(chǎng)景,用戶可以根據(jù)應(yīng)用需求選擇合適的QoS級(jí)別。
為了保證通信的安全性,MQTT支持用戶名和密碼驗(yàn)證,代理可以對(duì)連接進(jìn)行身份認(rèn)證。此外,許多實(shí)現(xiàn)中還支持TLS/SSL加密通信,確保數(shù)據(jù)在傳輸過程中不會(huì)被竊取或篡改。用戶也可以使用不同的認(rèn)證方式來增強(qiáng)系統(tǒng)的安全性,適應(yīng)物聯(lián)網(wǎng)應(yīng)用中對(duì)安全性的高需求。
MQTT非常注重輕量化和低功耗。它的報(bào)文頭非常小,通信開銷很低,這使其特別適合在資源受限的設(shè)備或不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中使用。MQTT支持“保持連接”和“遺囑消息”功能,客戶端可以在連接斷開時(shí)自動(dòng)向代理發(fā)送遺囑消息,通知其他客戶端連接狀態(tài)的變化。這種特性有助于提高網(wǎng)絡(luò)的健壯性和系統(tǒng)的可用性。
MQTT的典型使用場(chǎng)景包括物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)采集、實(shí)時(shí)監(jiān)控、消息推送和控制命令的發(fā)布。比如在智能家居中,傳感器可以發(fā)布環(huán)境數(shù)據(jù),如溫濕度、煙霧濃度等,控制設(shè)備根據(jù)收到的消息作出響應(yīng),實(shí)現(xiàn)自動(dòng)化操作。在工業(yè)場(chǎng)景中,MQTT可以幫助收集和管理大規(guī)模設(shè)備的運(yùn)行狀態(tài),實(shí)現(xiàn)集中化和高效的設(shè)備監(jiān)控。
MQTT協(xié)議憑借其低功耗、高效能、實(shí)時(shí)性強(qiáng)等優(yōu)勢(shì),已成為物聯(lián)網(wǎng)通信的主要協(xié)議之一。它的發(fā)布/訂閱模式簡化了設(shè)備之間的通信,使其特別適合多對(duì)多、低延遲、高可靠性的數(shù)據(jù)傳輸場(chǎng)景。MQTT易于使用、拓展性強(qiáng),為開發(fā)者提供了靈活的解決方案來構(gòu)建各種物聯(lián)網(wǎng)應(yīng)用。
【3】中科微ATGM336H-GPS模塊
中科微ATGM336H-GPS模塊是一款高性能、低功耗的全球定位模塊,專為衛(wèi)星定位導(dǎo)航應(yīng)用設(shè)計(jì)。該模塊集成了GNSS基帶處理器和RF接收器,支持GPS、GLONASS、BDS(北斗)等多種衛(wèi)星系統(tǒng)的定位信號(hào),能夠?qū)崿F(xiàn)快速精準(zhǔn)的定位,并提供穩(wěn)定可靠的位置、速度和時(shí)間數(shù)據(jù)。ATGM336H模塊廣泛應(yīng)用于車輛定位、物流跟蹤、無人機(jī)導(dǎo)航、智能穿戴設(shè)備、戶外運(yùn)動(dòng)設(shè)備和物聯(lián)網(wǎng)等領(lǐng)域。
ATGM336H模塊采用小巧的LCC封裝,尺寸為16mm x 12.2mm x 2.3mm,便于集成到各種緊湊型設(shè)備中。模塊內(nèi)置高靈敏度接收芯片,具有-165dBm的高靈敏度,即使在復(fù)雜環(huán)境下也能快速捕獲和跟蹤衛(wèi)星信號(hào)。其冷啟動(dòng)時(shí)間在開闊地帶一般小于30秒,熱啟動(dòng)時(shí)間約為1秒,重捕獲時(shí)間小于1秒,使其在車輛移動(dòng)和各種快速切換的場(chǎng)景下表現(xiàn)出色,定位精度可達(dá)2.5米。
該模塊支持多種工作模式,以滿足不同應(yīng)用的功耗要求。它不僅可以在普通模式下連續(xù)定位,還支持周期性模式和節(jié)電模式,通過關(guān)閉部分功能或降低數(shù)據(jù)輸出頻率來減少功耗,適合電池供電的便攜式設(shè)備。其最低功耗在微安級(jí)別,能夠顯著延長電池續(xù)航時(shí)間,使其成為移動(dòng)設(shè)備的理想選擇。
ATGM336H-GPS模塊的接口豐富,支持UART、I2C、SPI等多種通信接口,方便與主控MCU進(jìn)行數(shù)據(jù)交換。模塊提供的標(biāo)準(zhǔn)NMEA協(xié)議輸出和二進(jìn)制格式數(shù)據(jù)能夠直接對(duì)接多種導(dǎo)航應(yīng)用程序。此外,模塊還具有內(nèi)置的天線檢測(cè)功能和動(dòng)態(tài)干擾抑制技術(shù),有助于在有較強(qiáng)電磁干擾的環(huán)境中保持定位精度,并能實(shí)時(shí)檢測(cè)和報(bào)告天線狀態(tài),進(jìn)一步提高定位可靠性。
為了提高用戶體驗(yàn)和簡化開發(fā)過程,中科微為ATGM336H模塊提供了完善的開發(fā)手冊(cè)和技術(shù)支持,便于開發(fā)者快速上手并將其應(yīng)用到多種設(shè)備中。此外,模塊還支持多衛(wèi)星系統(tǒng)協(xié)同定位的功能,通過融合GPS、BDS、GLONASS等衛(wèi)星數(shù)據(jù),提高在市區(qū)、高山、森林等衛(wèi)星信號(hào)受限環(huán)境下的定位精度和穩(wěn)定性,使其適用于復(fù)雜環(huán)境的高精度定位需求。
【4】ADXL345加速度傳感器
ADXL345?是 Analog Devices 公司推出的一款高性能、超低功耗的?三軸加速度傳感器。它可用于測(cè)量動(dòng)態(tài)加速度(如運(yùn)動(dòng)、震動(dòng)或沖擊)以及靜態(tài)加速度(如重力方向),因其體積小巧、功耗低、靈敏度高,廣泛應(yīng)用于移動(dòng)設(shè)備、可穿戴設(shè)備、車輛監(jiān)測(cè)系統(tǒng)等領(lǐng)域。
ADXL345 內(nèi)部集成了一個(gè)16位的模數(shù)轉(zhuǎn)換器(ADC),可提供 ±2g、±4g、±8g、±16g 多檔量程選擇,用戶可根據(jù)實(shí)際需求調(diào)整靈敏度和測(cè)量范圍。在本項(xiàng)目中,它主要用于監(jiān)測(cè)車輛的姿態(tài)變化,如判斷車輛是否處于靜止、行駛、傾斜或發(fā)生異常震動(dòng)等狀態(tài),是判斷車內(nèi)誤鎖報(bào)警是否觸發(fā)的重要依據(jù)之一。
該傳感器支持?I2C 和 SPI 兩種數(shù)字通信接口,在STM32系統(tǒng)中通常使用I2C方式與主控芯片通信,通過簡單的寄存器讀取即可獲得X、Y、Z三個(gè)方向的加速度數(shù)值。其數(shù)字輸出方式提高了抗干擾能力,尤其適合在復(fù)雜的車載環(huán)境中穩(wěn)定工作。
ADXL345還具備多種智能功能,如自由落體檢測(cè)、運(yùn)動(dòng)檢測(cè)、靜止檢測(cè)、雙擊/單擊檢測(cè)等,可以通過配置寄存器實(shí)現(xiàn)事件中斷輸出。這些功能為系統(tǒng)在低功耗監(jiān)測(cè)和自動(dòng)喚醒方面提供了良好的技術(shù)支持,使其不僅能采集姿態(tài)數(shù)據(jù),還能在關(guān)鍵事件發(fā)生時(shí)第一時(shí)間響應(yīng)。
在電源方面,ADXL345支持1.8V至3.6V的供電電壓,非常適合與3.3V供電的STM32微控制器直接配合使用。同時(shí),它的待機(jī)功耗極低,僅在數(shù)微安級(jí)別,適合對(duì)功耗要求嚴(yán)格的車載智能設(shè)備或電池供電系統(tǒng)。
ADXL345 是一款功能全面、精度高、功耗低且通信靈活的三軸加速度傳感器,非常適用于本車載系統(tǒng)中對(duì)姿態(tài)判斷、運(yùn)動(dòng)狀態(tài)分析與低功耗喚醒等功能的實(shí)現(xiàn)需求。
【5】SGP30傳感器
SGP30?是 Sensirion 公司推出的一款數(shù)字式空氣質(zhì)量傳感器模塊,集成了多種氣體檢測(cè)功能,主要用于測(cè)量室內(nèi)空氣中的總揮發(fā)性有機(jī)化合物(TVOC)和二氧化碳當(dāng)量濃度(eCO?)。該傳感器采用先進(jìn)的金屬氧化物(MOX)氣體感應(yīng)技術(shù),結(jié)合Sensirion獨(dú)特的智能算法,可在極小體積內(nèi)提供穩(wěn)定可靠的空氣質(zhì)量數(shù)據(jù),廣泛應(yīng)用于智能家居、車載空氣監(jiān)測(cè)、空氣凈化設(shè)備等領(lǐng)域。
SGP30 的一大特點(diǎn)是其輸出數(shù)據(jù)為數(shù)字信號(hào),通過標(biāo)準(zhǔn)的?I2C 接口?與主控芯片通信,避免了模擬信號(hào)易受干擾的問題,非常適合應(yīng)用在車載等復(fù)雜電磁環(huán)境中。在本項(xiàng)目中,SGP30 主要用于檢測(cè)車輛內(nèi)部空氣中二氧化碳的當(dāng)量濃度和TVOC濃度,一旦濃度超標(biāo),即可觸發(fā)報(bào)警邏輯,提醒家長兒童被誤鎖在車內(nèi)的危險(xiǎn)狀態(tài)。
該模塊內(nèi)部集成了多個(gè)微型傳感器陣列,通過溫度補(bǔ)償和環(huán)境自適應(yīng)機(jī)制實(shí)現(xiàn)長期穩(wěn)定的測(cè)量結(jié)果。值得一提的是,SGP30 不提供直接的 CO? 濃度值,而是通過檢測(cè)TVOC并結(jié)合算法估算出eCO?(等效二氧化碳濃度),其精度已足夠滿足誤鎖兒童報(bào)警系統(tǒng)中空氣質(zhì)量監(jiān)測(cè)的需求。
在電源要求方面,SGP30 工作電壓為?1.8V ~ 3.3V,一般與STM32系統(tǒng)共享3.3V電源即可;同時(shí),傳感器具有較低的功耗,尤其在周期性采樣的應(yīng)用場(chǎng)景下,能夠有效節(jié)省系統(tǒng)能量消耗,有利于提高整個(gè)設(shè)備的續(xù)航能力。
SGP30 還提供了一個(gè)內(nèi)部基線校準(zhǔn)機(jī)制,允許用戶定期保存和恢復(fù)傳感器的基準(zhǔn)值,提高長期使用中的準(zhǔn)確性和響應(yīng)速度。對(duì)于本項(xiàng)目而言,可以在車輛首次啟動(dòng)或系統(tǒng)初始化時(shí)進(jìn)行空氣基線更新,從而獲取更準(zhǔn)確的環(huán)境變化數(shù)據(jù)。
SGP30 是一款高集成度、高靈敏度、低功耗的空氣質(zhì)量檢測(cè)傳感器,非常適合本項(xiàng)目中對(duì)車內(nèi)空氣質(zhì)量實(shí)時(shí)監(jiān)測(cè)、異常預(yù)警和數(shù)據(jù)上傳等需求的實(shí)現(xiàn),是構(gòu)建兒童誤鎖報(bào)警系統(tǒng)關(guān)鍵的感知元件之一。
1.10 摘要
隨著社會(huì)安全問題的日益嚴(yán)重,兒童誤鎖車內(nèi)事件頻發(fā),給家長和社會(huì)帶來了極大的安全隱患。為了解決這一問題,本項(xiàng)目設(shè)計(jì)了一款基于STM32微控制器的車載誤鎖兒童報(bào)警系統(tǒng)。該系統(tǒng)結(jié)合多種傳感器,能夠?qū)崟r(shí)監(jiān)測(cè)車內(nèi)的環(huán)境溫度、濕度、二氧化碳濃度、震動(dòng)、車輛姿態(tài)等信息,并通過4G模塊上傳至云平臺(tái),實(shí)現(xiàn)遠(yuǎn)程監(jiān)控與報(bào)警。當(dāng)車輛出現(xiàn)誤鎖情況,系統(tǒng)會(huì)自動(dòng)觸發(fā)報(bào)警,蜂鳴器發(fā)出警示音,同時(shí)通過短信和APP彈窗通知車主。此外,系統(tǒng)還具備車輛定位功能,支持SOS求助功能,并通過本地OLED顯示屏實(shí)時(shí)顯示車輛內(nèi)的傳感器數(shù)據(jù)。該系統(tǒng)通過I2C、串口、MQTT等多種通信協(xié)議實(shí)現(xiàn)各模塊之間的高效數(shù)據(jù)交換,保障了整個(gè)系統(tǒng)的穩(wěn)定性與實(shí)時(shí)性。項(xiàng)目不僅提高了車內(nèi)兒童的安全性,還為今后的智能車載安全系統(tǒng)設(shè)計(jì)提供了有益的參考。
關(guān)鍵字:
車載誤鎖報(bào)警,STM32,兒童安全,傳感器,4G模塊,MQTT協(xié)議,遠(yuǎn)程監(jiān)控,SOS求助,車輛定位,云平臺(tái)
二、硬件選型(搭建模型參考)
如果大家想自己搭建模型,完成這個(gè)項(xiàng)目的功能測(cè)試。
那么可以看參考下面的部分硬件模塊選型。
(1)STM32F103C8T6最小系統(tǒng)板:主控芯片,用于控制各傳感器采集與通信處理。
(2)SHT30溫濕度傳感器模塊:用于采集車內(nèi)環(huán)境的溫度和濕度信息。
(3)SGP30空氣質(zhì)量傳感器模塊:用于檢測(cè)車內(nèi)的TVOC總揮發(fā)性有機(jī)物和eCO?(等效二氧化碳濃度)。
(4)紅外熱釋電人體感應(yīng)模塊:用于檢測(cè)車內(nèi)是否有人存在。
(5)震動(dòng)檢測(cè)傳感器:檢測(cè)車輛是否有震動(dòng),用于判斷車輛狀態(tài)。
(6)ADXL345三軸加速度傳感器:用于檢測(cè)車輛的姿態(tài)變化,判斷車輛是否在行駛或靜止。
(7)Air780E 4G模塊(合宙):用于實(shí)現(xiàn)數(shù)據(jù)上傳至華為云IOT平臺(tái)、發(fā)送短信等通信功能。
(8)中科微GPS定位模塊:用于獲取車輛當(dāng)前的位置信息,在APP和上位機(jī)中顯示定位地圖。
(9)0.96寸OLED顯示屏(IIC接口):用于本地實(shí)時(shí)顯示所有傳感器數(shù)據(jù)和設(shè)備狀態(tài)。
(10)高電平觸發(fā)有源蜂鳴器:用于報(bào)警提示,如超溫、超CO?濃度等情況下觸發(fā)警報(bào)。
(11)通風(fēng)控制風(fēng)扇(或外循環(huán)電機(jī)控制模塊):用于車輛空氣流通換氣。
(12)4顆獨(dú)立按鍵模塊:用于頁面切換、SOS緊急求助觸發(fā)等功能。
(13)電源模塊(穩(wěn)壓模塊、移動(dòng)電源):提供系統(tǒng)所需的穩(wěn)定電源(3.3V/5V)。
三、部署華為云物聯(lián)網(wǎng)平臺(tái)
華為云官網(wǎng): https://www.huaweicloud.com/
打開官網(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)大的開放能力,支撐行業(yè)用戶構(gòu)建各種物聯(lián)網(wǎng)解決方案。
設(shè)備可以通過固網(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)用通過調(diào)用物聯(lián)網(wǎng)平臺(tái)提供的API,實(shí)現(xiàn)設(shè)備數(shù)據(jù)采集、命令下發(fā)、設(shè)備管理等業(yè)務(wù)場(chǎng)景。
3.2 開通物聯(lián)網(wǎng)服務(wù)
地址: https://www.huaweicloud.com/product/iothub.html
開通免費(fèi)單元。
點(diǎn)擊立即創(chuàng)建
。
正在創(chuàng)建標(biāo)準(zhǔn)版實(shí)例,需要等待片刻。
創(chuàng)建完成之后,點(diǎn)擊詳情。 可以看到標(biāo)準(zhǔn)版實(shí)例的設(shè)備接入端口和地址。
下面框起來的就是端口號(hào)
和域名
點(diǎn)擊實(shí)例名稱,可以查看當(dāng)前免費(fèi)單元
的配置情況。
開通之后,點(diǎn)擊接入信息
,也能查看接入信息。 我們當(dāng)前設(shè)備準(zhǔn)備采用MQTT協(xié)議接入華為云平臺(tái),這里可以看到MQTT協(xié)議的地址和端口號(hào)等信息。
總結(jié):
端口號(hào): ? MQTT (1883)| MQTTS (8883) ? ?
接入地址: dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com
根據(jù)域名地址得到IP地址信息:
打開Windows電腦的命令行控制臺(tái)終端,使用ping
?命令。ping
一下即可。
Microsoft Windows [版本 10.0.19045.5011]
(c) Microsoft Corporation。保留所有權(quán)利。
C:UsersLenovo>ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com
正在 Ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字節(jié)的數(shù)據(jù):
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=37ms TTL=44
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=37ms TTL=44
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=37ms TTL=44
來自 117.78.5.125 的回復(fù): 字節(jié)=32 時(shí)間=37ms TTL=44
117.78.5.125 的 Ping 統(tǒng)計(jì)信息:
? ? 數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計(jì)時(shí)間(以毫秒為單位):
? ? 最短 = 37ms,最長 = 37ms,平均 = 37ms
C:UsersLenovo>
MQTT協(xié)議接入端口號(hào)有兩個(gè),1883是非加密端口,8883是證書加密端口,單片機(jī)無法加載證書,所以使用1883端口合適
。
3.3 創(chuàng)建產(chǎn)品
鏈接:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-dev/all-product?instanceId=03c5c68c-e588-458c-90c3-9e4c640be7af
(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)品詳情頁面,翻到最下面可以看到模型定義。
模型簡單來說: 就是存放設(shè)備上傳到云平臺(tái)的數(shù)據(jù)。
你可以根據(jù)自己的產(chǎn)品進(jìn)行創(chuàng)建。
比如:
煙霧可以叫 ?MQ2
溫度可以叫 ?Temperature
濕度可以叫 ?humidity
火焰可以叫 ?flame
其他的傳感器自己用單詞簡寫命名即可。 這就是你的單片機(jī)設(shè)備端上傳到服務(wù)器的數(shù)據(jù)名字。
先點(diǎn)擊自定義模型。
再創(chuàng)建一個(gè)服務(wù)ID。
接著點(diǎn)擊新增屬性。
3.4 添加設(shè)備
產(chǎn)品是屬于上層的抽象模型,接下來在產(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)開發(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é)議,開發(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é)議,就可以與華為云平臺(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ù) | 無限制 |
單個(gè)設(shè)備每分鐘支持的最大MQTT連接數(shù) | 1 |
單個(gè)MQTT連接每秒的吞吐量,即帶寬,包含直連設(shè)備和網(wǎng)關(guān) | 3KB/s |
MQTT單個(gè)發(fā)布消息最大長度,超過此大小的發(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ù) | 無限制 |
(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è)備來說,主題發(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":{"你的字段名字1":30,"你的字段名字2":10,"你的字段名字3":1,"你的字段名字4":0}}]}
3.6 MQTT三元組
MQTT協(xié)議登錄需要填用戶ID,設(shè)備ID,設(shè)備密碼等信息,就像我們平時(shí)登錄QQ,微信一樣要輸入賬號(hào)密碼才能登錄。MQTT協(xié)議登錄的這3個(gè)參數(shù),一般稱為MQTT三元組。
接下來介紹,華為云平臺(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? 打開Windows的命令行輸入以下命令。
ping ?ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com
(2)生成MQTT三元組
華為云提供了一個(gè)在線工具,用來生成MQTT鑒權(quán)三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打開這個(gè)工具,填入設(shè)備的信息(也就是剛才創(chuàng)建完設(shè)備之后保存的信息),點(diǎn)擊生成,就可以得到MQTT的登錄信息了。
下面是打開的頁面:
填入設(shè)備的信息:?(上面兩行就是設(shè)備創(chuàng)建完成之后保存得到的)
直接得到三元組信息。
得到三元組之后,設(shè)備端通過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)過上面的步驟介紹,已經(jīng)創(chuàng)建了產(chǎn)品,設(shè)備,數(shù)據(jù)模型,得到MQTT登錄信息。 接下來就用MQTT客戶端軟件模擬真實(shí)的設(shè)備來登錄平臺(tái)。測(cè)試與服務(wù)器通信是否正常。
MQTT軟件下載地址【免費(fèi)】:?https://download.csdn.net/download/xiaolong1126626497/89928772
(1)填入登錄信息
打開MQTT客戶端軟件,對(duì)號(hào)填入相關(guān)信息(就是上面的文本介紹)。然后,點(diǎn)擊登錄,訂閱主題,發(fā)布主題。
(2)打開網(wǎng)頁查看
完成上面的操作之后,打開華為云網(wǎng)頁后臺(tái),可以看到設(shè)備已經(jīng)在線了。
點(diǎn)擊詳情頁面,可以看到上傳的數(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":{"你的字段名字1":30,"你的字段名字2":10,"你的字段名字3":1,"你的字段名字4":0}}]}
3.8 創(chuàng)建IAM賬戶
創(chuàng)建一個(gè)IAM賬戶,因?yàn)榻酉聛黹_發(fā)上位機(jī),需要使用云平臺(tái)的API接口,這些接口都需要token進(jìn)行鑒權(quán)。簡單來說,就是身份的認(rèn)證。 調(diào)用接口獲取Token時(shí),就需要填寫IAM賬號(hào)信息。所以,接下來演示一下過程。
地址: 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ù)
無論該設(shè)備是否在線,都可以通過該影子獲取和設(shè)置設(shè)備的屬性
簡單來說:設(shè)備影子就是保存,設(shè)備最新上傳的一次數(shù)據(jù)。
我們?cè)O(shè)計(jì)的軟件里,如果想要獲取設(shè)備的最新狀態(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)試成功之后,可以得到訪問影子數(shù)據(jù)的真實(shí)鏈接,接下來的代碼開發(fā)中,就采用Qt寫代碼訪問此鏈接,獲取影子數(shù)據(jù),完成上位機(jī)開發(fā)。
鏈接如下:
https://ad635970a1.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/28add376c01e4a61ac8b621c714bf459/devices/663cb18871d845632a0912e7_dev1/shadow
3.10 訪問接口的代碼實(shí)現(xiàn)
(1)配置 Qt 項(xiàng)目
在 Qt 項(xiàng)目的?.pro
?文件中,加入對(duì)?libcurl
?的支持:
QT += core
CONFIG += console
CONFIG -= app_bundle
INCLUDEPATH += /usr/include/curl ?# 根據(jù)你的系統(tǒng)設(shè)置 libcurl 的路徑
LIBS += -lcurl ?# 鏈接 libcurl 庫
SOURCES += main.cpp
(2)代碼實(shí)現(xiàn)
main.cpp
?文件中實(shí)現(xiàn)代碼如下:
#include?<QCoreApplication>
#include?<curl/curl.h>
#include?<QDebug>
#include?<QString>
#include?<QByteArray>
// 回調(diào)函數(shù),處理libcurl下載數(shù)據(jù)
size_t?WriteCallback(void?*contents,?size_t?size,?size_t?nmemb,?void?*userp)?{
? ??size_t?totalSize = size * nmemb;
? ? QByteArray *response =?static_cast<QByteArray *>(userp);
? ? response->append(static_cast<char?*>(contents), totalSize);
? ??return?totalSize;
}
int?main(int?argc,?char?*argv[])?{
? ??QCoreApplication?a(argc, argv);
? ??// 初始化libcurl
? ? CURL *curl;
? ? CURLcode res;
? ? QByteArray responseData; ?// 用于存儲(chǔ)響應(yīng)數(shù)據(jù)
? ??curl_global_init(CURL_GLOBAL_DEFAULT);
? ? curl =?curl_easy_init();
? ??if?(curl) {
? ? ? ??// 設(shè)置訪問URL
? ? ? ??const?QString url =?"https://ad635970a1.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/28add376c01e4a61ac8b621c714bf459/devices/663cb18871d845632a0912e7_dev1/shadow";
? ? ? ??// 設(shè)置HTTP請(qǐng)求頭
? ? ? ??struct?curl_slist?*headers =?NULL;
? ? ? ? headers =?curl_slist_append(headers,?"Authorization: Bearer <Your_Access_Token>");?// 這里需要替換為你的實(shí)際 token
? ? ? ??curl_easy_setopt(curl, CURLOPT_URL, url.toStdString().c_str());
? ? ? ??curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
? ? ? ??curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
? ? ? ??curl_easy_setopt(curl, CURLOPT_WRITEDATA, &responseData);
? ? ? ??// 發(fā)起GET請(qǐng)求
? ? ? ? res =?curl_easy_perform(curl);
? ? ? ??if?(res != CURLE_OK) {
? ? ? ? ? ??qDebug() <<?"Curl request failed:"?<<?curl_easy_strerror(res);
? ? ? ? }?else?{
? ? ? ? ? ??qDebug() <<?"Response data:"?<< responseData;
? ? ? ? }
? ? ? ??// 清理
? ? ? ??curl_easy_cleanup(curl);
? ? ? ??curl_slist_free_all(headers);
? ? }
? ??curl_global_cleanup();
? ??return?a.exec();
}
3.11 數(shù)據(jù)解析代碼
在 Qt 中使用 CJSON (一個(gè)用于解析 JSON 數(shù)據(jù)的輕量級(jí) C 庫) 來解析返回的 JSON 數(shù)據(jù)。
(1)配置 Qt 項(xiàng)目
在 Qt 項(xiàng)目的?.pro
?文件中,確保包括了 CJSON 的頭文件,并鏈接 CJSON 的源代碼。
QT += core
CONFIG += console
CONFIG -= app_bundle
SOURCES += main.cpp
? ? ? ? ? ?cJSON.c ?# 將 cJSON.c 文件添加到你的項(xiàng)目中
INCLUDEPATH += path/to/cjson/ ?# 添加 CJSON 頭文件的路徑
LIBS += -lcurl ?# 鏈接 libcurl 庫
(2)解析 JSON 數(shù)據(jù)的完整代碼
在?main.cpp
?中,以下代碼展示了如何解析你提供的 JSON 數(shù)據(jù)。
#include?<QCoreApplication>
#include?<curl/curl.h>
#include?<QDebug>
#include?<QString>
#include?<QByteArray>
#include?"cJSON.h"
// 回調(diào)函數(shù),處理libcurl下載數(shù)據(jù)
size_t?WriteCallback(void?*contents,?size_t?size,?size_t?nmemb,?void?*userp)?{
? ??size_t?totalSize = size * nmemb;
? ? QByteArray *response =?static_cast<QByteArray *>(userp);
? ? response->append(static_cast<char?*>(contents), totalSize);
? ??return?totalSize;
}
// 解析 JSON 數(shù)據(jù)
void?parseJson(const?QByteArray &data)?{
? ??// 將 QByteArray 轉(zhuǎn)換為 char*
? ??const?char* jsonData = data.constData();
? ??// 解析 JSON
? ? cJSON *root =?cJSON_Parse(jsonData);
? ??if?(root ==?NULL) {
? ? ? ??qDebug() <<?"Error parsing JSON.";
? ? ? ??return;
? ? }
? ??// 解析 "device_id"
? ? cJSON *deviceId =?cJSON_GetObjectItemCaseSensitive(root,?"device_id");
? ??if?(cJSON_IsString(deviceId) && (deviceId->valuestring !=?NULL)) {
? ? ? ??qDebug() <<?"Device ID:"?<< deviceId->valuestring;
? ? }
? ??// 解析 "shadow" 數(shù)組
? ? cJSON *shadow =?cJSON_GetObjectItemCaseSensitive(root,?"shadow");
? ??if?(cJSON_IsArray(shadow)) {
? ? ? ? cJSON *shadowItem =?NULL;
? ? ? ??cJSON_ArrayForEach(shadowItem, shadow) {
? ? ? ? ? ??// 解析每個(gè) shadow 項(xiàng)目
? ? ? ? ? ? cJSON *serviceId =?cJSON_GetObjectItemCaseSensitive(shadowItem,?"service_id");
? ? ? ? ? ??if?(cJSON_IsString(serviceId) && (serviceId->valuestring !=?NULL)) {
? ? ? ? ? ? ? ??qDebug() <<?"Service ID:"?<< serviceId->valuestring;
? ? ? ? ? ? }
? ? ? ? ? ??// 解析 "reported" 對(duì)象
? ? ? ? ? ? cJSON *reported =?cJSON_GetObjectItemCaseSensitive(shadowItem,?"reported");
? ? ? ? ? ??if?(cJSON_IsObject(reported)) {
? ? ? ? ? ? ? ??// 解析 "properties" 對(duì)象
? ? ? ? ? ? ? ? cJSON *properties =?cJSON_GetObjectItemCaseSensitive(reported,?"properties");
? ? ? ? ? ? ? ??if?(cJSON_IsObject(properties)) {
? ? ? ? ? ? ? ? ? ? cJSON *data1 =?cJSON_GetObjectItemCaseSensitive(properties,?"data1");
? ? ? ? ? ? ? ? ? ??if?(cJSON_IsNumber(data1)) {
? ? ? ? ? ? ? ? ? ? ? ??qDebug() <<?"data1:"?<< data1->valueint;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? cJSON *data2 =?cJSON_GetObjectItemCaseSensitive(properties,?"data2");
? ? ? ? ? ? ? ? ? ??if?(cJSON_IsNumber(data2)) {
? ? ? ? ? ? ? ? ? ? ? ??qDebug() <<?"data2:"?<< data2->valueint;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? cJSON *data3 =?cJSON_GetObjectItemCaseSensitive(properties,?"data3");
? ? ? ? ? ? ? ? ? ??if?(cJSON_IsNumber(data3)) {
? ? ? ? ? ? ? ? ? ? ? ??qDebug() <<?"data3:"?<< data3->valueint;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? cJSON *data4 =?cJSON_GetObjectItemCaseSensitive(properties,?"data4");
? ? ? ? ? ? ? ? ? ??if?(cJSON_IsNumber(data4)) {
? ? ? ? ? ? ? ? ? ? ? ??qDebug() <<?"data4:"?<< data4->valueint;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ??// 解析 "event_time"
? ? ? ? ? ? ? ? cJSON *eventTime =?cJSON_GetObjectItemCaseSensitive(reported,?"event_time");
? ? ? ? ? ? ? ??if?(cJSON_IsString(eventTime) && (eventTime->valuestring !=?NULL)) {
? ? ? ? ? ? ? ? ? ??qDebug() <<?"Event Time:"?<< eventTime->valuestring;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ??// 解析 version
? ? ? ? ? ? cJSON *version =?cJSON_GetObjectItemCaseSensitive(shadowItem,?"version");
? ? ? ? ? ??if?(cJSON_IsNumber(version)) {
? ? ? ? ? ? ? ??qDebug() <<?"Version:"?<< version->valueint;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ??// 釋放 JSON 對(duì)象
? ??cJSON_Delete(root);
}
int?main(int?argc,?char?*argv[])?{
? ??QCoreApplication?a(argc, argv);
? ??// 模擬獲取到的 JSON 數(shù)據(jù)
? ? QByteArray jsonData =?R"(
? ? {
? ? ? ? "device_id": "663cb18871d845632a0912e7_dev1",
? ? ? ? "shadow": [
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "service_id": "stm32",
? ? ? ? ? ? ? ? "desired": {
? ? ? ? ? ? ? ? ? ? "properties": null,
? ? ? ? ? ? ? ? ? ? "event_time": null
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? "reported": {
? ? ? ? ? ? ? ? ? ? "properties": {
? ? ? ? ? ? ? ? ? ? ? ? "data1": 18,
? ? ? ? ? ? ? ? ? ? ? ? "data2": 90,
? ? ? ? ? ? ? ? ? ? ? ? "data3": 38,
? ? ? ? ? ? ? ? ? ? ? ? "data4": 70
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? "event_time": "20240509T113448Z"
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? "version": 3
? ? ? ? ? ? }
? ? ? ? ]
? ? })";
? ??// 調(diào)用解析函數(shù)
? ??parseJson(jsonData);
? ??return?a.exec();
}
四、STM32設(shè)備端代碼設(shè)計(jì)
設(shè)計(jì)思路:
1.?初始化階段:
2.?模塊初始化:
-
-
- ? 初始化傳感器模塊(如 SGP30、SHT30、ADXL345、紅外熱釋電傳感器、震動(dòng)傳感器、GPS模塊等)。? 初始化蜂鳴器和OLED顯示屏。? 初始化4G模塊(Air780E)用于發(fā)送短信和云數(shù)據(jù)上傳。
-
3.?數(shù)據(jù)采集與處理:
-
-
- ? 定期讀取傳感器數(shù)據(jù)(如溫濕度、二氧化碳濃度、車輛姿態(tài)、震動(dòng)等)。? 對(duì)采集到的數(shù)據(jù)進(jìn)行處理(例如,對(duì)溫濕度和二氧化碳濃度數(shù)據(jù)進(jìn)行閾值判斷)。
-
4.?報(bào)警機(jī)制:
-
-
- ? 判斷傳感器數(shù)據(jù)是否超出預(yù)設(shè)閾值(如溫濕度過高、二氧化碳濃度過高、車輛姿態(tài)異常等)。? 當(dāng)檢測(cè)到異常時(shí),通過蜂鳴器報(bào)警,并觸發(fā)短信報(bào)警(通過4G模塊)和APP上位機(jī)彈窗。
-
5.?數(shù)據(jù)上傳:
-
-
- ? 定期通過4G模塊(Air780E)將采集到的傳感器數(shù)據(jù)上傳至華為云物聯(lián)網(wǎng)平臺(tái)。? 支持通過MQTT協(xié)議上傳數(shù)據(jù)。
-
6.?定位與SOS功能:
-
-
- ? 定期獲取GPS模塊數(shù)據(jù),實(shí)現(xiàn)車輛定位。? 如果用戶按下SOS按鈕,則觸發(fā)報(bào)警機(jī)制并發(fā)送求助短信。
-
7.?主循環(huán):
-
- ? 主循環(huán)不斷執(zhí)行數(shù)據(jù)采集、狀態(tài)檢查、報(bào)警和數(shù)據(jù)上傳等任務(wù)。
main.c
代碼框架:
#include?"stm32f10x.h"
#include?"SHT30.h"
#include?"SGP30.h"
#include?"ADXL345.h"
#include?"GPS.h"
#include?"OLED.h"
#include?"Buzzer.h"
#include?"Air780E.h"
#include?"GPIO.h"
#include?"I2C.h"
#include?"UART.h"
#include?"Timer.h"
// 定義閾值
#define?TEMP_THRESHOLD 30 ?// 溫度閾值(單位:℃)
#define?CO2_THRESHOLD 1000?// 二氧化碳濃度閾值(單位:ppm)
#define?VIBRATION_THRESHOLD 100?// 震動(dòng)閾值
// 全局變量定義
float?temperature, humidity, co2_concentration;
float?acceleration_x, acceleration_y, acceleration_z;
float?latitude, longitude;
uint8_t?vibration_status;
uint8_t?is_vehicle_locked =?0; ?// 判斷是否誤鎖
uint8_t?sos_button_pressed =?0; ?// SOS按鈕狀態(tài)
// 模塊初始化函數(shù)
void?InitModules(void)?{
? ??// 初始化GPIO、I2C、UART等外設(shè)
? ? GPIO_Init();
? ? I2C_Init();
? ? UART_Init();
? ? OLED_Init();
? ? Buzzer_Init();
? ? Air780E_Init();
? ? GPS_Init();
? ? ADXL345_Init();
? ? SGP30_Init();
? ? SHT30_Init();
? ? Timer_Init();
}
// 傳感器數(shù)據(jù)采集函數(shù)
void?CollectSensorData(void)?{
? ??// 讀取溫濕度數(shù)據(jù)
? ? temperature = SHT30_ReadTemperature();
? ? humidity = SHT30_ReadHumidity();
? ??// 讀取空氣質(zhì)量數(shù)據(jù)(CO2 和 TVOC)
? ? co2_concentration = SGP30_ReadCO2();
? ??
? ??// 讀取加速度傳感器數(shù)據(jù)(用于檢測(cè)車輛姿態(tài))
? ? ADXL345_ReadAcceleration(&acceleration_x, &acceleration_y, &acceleration_z);
? ??
? ??// 讀取震動(dòng)傳感器數(shù)據(jù)
? ? vibration_status = ReadVibrationSensor();
? ??// 讀取GPS定位數(shù)據(jù)
? ? GPS_ReadLocation(&latitude, &longitude);
}
// 檢查異常并報(bào)警
void?CheckForWarnings(void)?{
? ??// 判斷是否誤鎖
? ??if?(acceleration_z < VIBRATION_THRESHOLD && temperature > TEMP_THRESHOLD && co2_concentration > CO2_THRESHOLD) {
? ? ? ? is_vehicle_locked =?1; ?// 誤鎖報(bào)警
? ? ? ? Buzzer_Alarm();
? ? ? ? Air780E_SendSMS("Warning: Child locked inside the vehicle!");
? ? ? ? OLED_DisplayWarning("Child locked in car!");
? ? }
? ??// 如果SOS按鈕被按下
? ??if?(sos_button_pressed) {
? ? ? ? Air780E_SendSMS("SOS: Help needed!");
? ? ? ? OLED_DisplayWarning("SOS triggered!");
? ? }
}
// 數(shù)據(jù)上傳到云平臺(tái)
void?UploadDataToCloud(void)?{
? ??// 上傳傳感器數(shù)據(jù)至華為云物聯(lián)網(wǎng)平臺(tái)(MQTT)
? ??char?payload[256];
? ??snprintf(payload,?sizeof(payload),?"{"temperature": %.2f, "humidity": %.2f, "co2": %.2f, "latitude": %.6f, "longitude": %.6f}",
? ? ? ? ? ? ?temperature, humidity, co2_concentration, latitude, longitude);
? ? Air780E_MQTTPublish("vehicle_data_topic", payload);
}
// 主循環(huán)
int?main(void)?{
? ??// 初始化各個(gè)模塊
? ? InitModules();
? ??
? ??while?(1) {
? ? ? ??// 定期采集傳感器數(shù)據(jù)
? ? ? ? CollectSensorData();
? ? ? ??
? ? ? ??// 檢查是否有報(bào)警條件
? ? ? ? CheckForWarnings();
? ? ? ??
? ? ? ??// 上傳數(shù)據(jù)到云平臺(tái)
? ? ? ? UploadDataToCloud();
? ? }
}
代碼設(shè)計(jì)思路:
1.?模塊初始化:在InitModules()函數(shù)中對(duì)所有傳感器、外設(shè)(如GPIO、I2C、UART、OLED等)進(jìn)行初始化,為后續(xù)的傳感器數(shù)據(jù)采集、通信和報(bào)警做好準(zhǔn)備。
2.?傳感器數(shù)據(jù)采集:CollectSensorData()
函數(shù)定期讀取各個(gè)傳感器的數(shù)據(jù)(如溫濕度、二氧化碳濃度、加速度、震動(dòng)、GPS定位等),并保存到相應(yīng)的全局變量中。
3.?報(bào)警機(jī)制:CheckForWarnings()
函數(shù)對(duì)傳感器采集的數(shù)據(jù)進(jìn)行判斷,如果車輛處于靜止?fàn)顟B(tài)且溫濕度、二氧化碳濃度等超標(biāo),則觸發(fā)誤鎖報(bào)警,并通過蜂鳴器、短信和OLED屏幕進(jìn)行報(bào)警;若按下了SOS按鈕,則觸發(fā)SOS報(bào)警。
4.?數(shù)據(jù)上傳:UploadDataToCloud()
函數(shù)將采集到的傳感器數(shù)據(jù)通過MQTT協(xié)議上傳到華為云物聯(lián)網(wǎng)平臺(tái),以便遠(yuǎn)程監(jiān)控。
5.?主循環(huán):在main()
函數(shù)的主循環(huán)中,定期調(diào)用數(shù)據(jù)采集、報(bào)警檢查、數(shù)據(jù)上傳等函數(shù),確保系統(tǒng)持續(xù)運(yùn)行并響應(yīng)異常事件。
五、上位機(jī)開發(fā)
為了方便查看設(shè)備上傳的數(shù)據(jù),接下來利用Qt開發(fā)一款A(yù)ndroid手機(jī)APP 和 Windows上位機(jī)。
使用華為云平臺(tái)提供的API接口獲取設(shè)備上傳的數(shù)據(jù),進(jìn)行可視化顯示,以及遠(yuǎn)程控制設(shè)備。
5.1 Qt開發(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
打開下載鏈接后選擇下面的版本進(jìn)行下載:
如果下載不了,可以在網(wǎng)盤里找到安裝包下載:?https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
軟件安裝時(shí)斷網(wǎng)安裝,否則會(huì)提示輸入賬戶。
安裝的時(shí)候,第一個(gè)復(fù)選框里的編譯器可以全選,直接點(diǎn)擊下一步繼續(xù)安裝。
選擇編譯器: (一定要看清楚了)
前面2講解了需要用的API接口,接下來就使用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)建完成
5.3 切換編譯器
在左下角是可以切換編譯器的。 可以選擇用什么樣的編譯器編譯程序。
目前新建工程的時(shí)候選擇了2種編譯器。 一種是mingw32
這個(gè)編譯Windows下運(yùn)行的程序。 一種是Android
編譯器,可以生成Android
手機(jī)APP。
不過要注意:Android的編譯器需要配置一些環(huán)境才可以正常使用,這個(gè)大家可以看下面的教程配置一下就行了。
Android環(huán)境搭建的博客鏈接:?https://blog.csdn.net/xiaolong1126626497/article/details/117254453
windows的編譯器就沒有這么麻煩,安裝好Qt就可以編譯使用。
下面我這里就選擇的?mingw32
這個(gè)編譯器,編譯Windows下運(yùn)行的程序。
5.4 編譯測(cè)試功能
創(chuàng)建完畢之后,編譯測(cè)試一下功能是否OK。
點(diǎn)擊左下角的綠色三角形按鈕
。
正常運(yùn)行就可以看到彈出一個(gè)白色的框框。這就表示工程環(huán)境沒有問題了。 接下來就可以放心的設(shè)計(jì)界面了。
5.5 設(shè)計(jì)UI界面與工程配置
【1】打開UI文件
打開默認(rèn)的界面如下:
【2】開始設(shè)計(jì)界面
根據(jù)自己需求設(shè)計(jì)界面。
5.5 編譯Windows上位機(jī)
點(diǎn)擊軟件左下角的綠色三角形按鈕進(jìn)行編譯運(yùn)行。
5.6 配置Android環(huán)境
如果想編譯Android手機(jī)APP,必須要先自己配置好自己的Android環(huán)境。(搭建環(huán)境的過程可以自行百度搜索學(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文件。
? -- File: D:/QtProject/build-265_AgritechIoTManager-Android_for_arm64_v8a_Clang_Qt_5_12_6_for_Android_ARM64_v8a-Release/android-build//build/outputs/apk/debug/android-build-debug.apk
六、總結(jié)
本項(xiàng)目圍繞當(dāng)前頻發(fā)的兒童被誤鎖車內(nèi)事件,結(jié)合嵌入式系統(tǒng)技術(shù)、物聯(lián)網(wǎng)通信技術(shù)與多種傳感器融合應(yīng)用,設(shè)計(jì)并實(shí)現(xiàn)了一套具備檢測(cè)、報(bào)警、通風(fēng)、定位與遠(yuǎn)程通信等功能的綜合性車載安全系統(tǒng)。系統(tǒng)以STM32F103C8T6作為主控芯片,結(jié)合SGP30空氣質(zhì)量傳感器、SHT30溫濕度傳感器、紅外人體檢測(cè)模塊、震動(dòng)檢測(cè)模塊、GPS定位模塊等,全面實(shí)時(shí)地監(jiān)控車輛內(nèi)部的環(huán)境狀況與乘員狀態(tài)。
系統(tǒng)通過合宙Air780E 4G模塊接入華為云物聯(lián)網(wǎng)平臺(tái),采用MQTT協(xié)議實(shí)現(xiàn)了穩(wěn)定高效的數(shù)據(jù)上傳與遠(yuǎn)程監(jiān)控。Android端APP與Windows上位機(jī)通過Qt平臺(tái)開發(fā),不僅可實(shí)時(shí)顯示車輛內(nèi)傳感器數(shù)據(jù),還具備定位導(dǎo)航、報(bào)警彈窗與短信通知等功能,為使用者提供多終端、高可靠性的操作體驗(yàn)。此外,系統(tǒng)還支持本地OLED顯示與蜂鳴器報(bào)警,并預(yù)設(shè)SOS求助按鍵,為緊急情況下爭取了寶貴的響應(yīng)時(shí)間。
整體設(shè)計(jì)充分考慮了低功耗、穩(wěn)定性、實(shí)時(shí)性與安全性,具有良好的擴(kuò)展性和實(shí)用性,既能滿足實(shí)際使用場(chǎng)景的需求,也為后續(xù)的產(chǎn)品化提供了堅(jiān)實(shí)的技術(shù)基礎(chǔ)。通過本項(xiàng)目的設(shè)計(jì)與實(shí)現(xiàn),體現(xiàn)了嵌入式系統(tǒng)在智慧車載安全防護(hù)中的巨大潛力,也為緩解兒童誤鎖車內(nèi)帶來的社會(huì)問題貢獻(xiàn)了一份可行的技術(shù)方案。