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