WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)設計_第1頁
WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)設計_第2頁
WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)設計_第3頁
WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)設計_第4頁
WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)設計_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

-7-WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)設摘要對于傳統(tǒng)的醫(yī)療健康監(jiān)護系統(tǒng)功能單一,僅僅只能顯示病人的基本信息,并不能及時注意到病人的身體情況,以及準確定位病人位置以便及時治療,因此設計一款能夠幫助患者,提高醫(yī)護人員救助效率的遠程醫(yī)療健康監(jiān)護系統(tǒng)是很有必要的。本系統(tǒng)主要設計一個WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)。基于STM32單片機通過紅外體溫傳感器、血氧心率傳感器、WIFI模塊、GPS模塊、報警模塊對醫(yī)療健康監(jiān)護系統(tǒng)進行設計。并完成具有能檢測病人體溫、心率、脈搏生理體征參數(shù)等信息以及數(shù)據(jù)上傳報警向醫(yī)生發(fā)送位置信息等功能的設計。以STM32F1芯片為CPU控制血氧心率采集模塊、人體體溫采集模塊,數(shù)據(jù)傳輸模塊,其具有功能豐富,使用簡單,測量數(shù)據(jù)準確,性能穩(wěn)定等多個優(yōu)點。并可以把經(jīng)過檢測將實時檢測人體血氧濃度,心率快慢以及人體溫度反饋給數(shù)據(jù)庫,同時醫(yī)療人員也可以遠程獲取到數(shù)據(jù),如果數(shù)據(jù)異常也可以及時搶救病人,大大降低了病人因治療不及時而造成損失的風險。并通過各種算法,實現(xiàn)數(shù)據(jù)的準確性以及穩(wěn)定性,最終得到一款人性化,性能高的監(jiān)護系統(tǒng)。關鍵詞:STM32單片機;血氧心率采集模塊;體溫采集模塊;數(shù)據(jù)傳輸模塊目錄第1章緒論 11.1課題意義與背景 11.2國內外研究現(xiàn)狀 11.3本文主要研究的內容 2第2章系統(tǒng)整體設計方案 32.1WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)的需求分析 32.2系統(tǒng)總體方案設計 32.3控制方式的選擇 42.3.1單片機芯片的選擇 42.3.2血氧心率采集模塊的選擇 52.3.3體溫采集模塊的選擇 52.3.4定位模塊的選擇 62.3.5WIFI模塊的選擇 62.3.6報警模塊的選擇 62.4本章小結 6第3章硬件系統(tǒng)設計 73.1系統(tǒng)硬件電路設計 73.2晶振、復位與SWD下載電路 73.3MAX30100血氧心率模塊電路 83.4體溫傳感器模塊電路 93.5GPS模塊電路 93.6WIFI模塊電路 93.7報警模塊電路 10第4章軟件系統(tǒng)設計 114.1軟件整體框架 114.2軟件設計 114.2.1血氧心率采集程序 124.2.2體溫采集程序 154.2.3GPS定位程序 164.2.4WIFI程序 164.2.5報警程序 184.2.5上位機程序 19第5章WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)仿真 205.1WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)仿真 205.2WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)的調試 215.3系統(tǒng)功能驗證 225.3.1顯示模塊 225.3.2檢測模塊 22第6章總結 23參考文獻 24致謝 26附錄 27附錄A原理圖 27附錄B主程序 27保定理工學院本科畢業(yè)設計第1章緒論1.1課題意義與背景隨著社會經(jīng)濟的發(fā)展,國民素質逐漸提高,另外科技發(fā)展也引起醫(yī)療事業(yè)的大幅度進步,因此我國的老齡化問題日趨嚴重,尤其是80后這代人則一個孩子贈養(yǎng)兩個老人,養(yǎng)老負擔空前沉重[14]。與此同時,目前國內的衛(wèi)生資源還面臨著分布不均衡等問題,這些問題都集中表現(xiàn)為:治療和治療的能量總量相對不高,政府相應的投資力度偏小;醫(yī)療服務水平不高,很難滿足病人的需要。當前,我國醫(yī)療機構普遍存在著效率低下和醫(yī)療物資資源浪費兩大現(xiàn)象,造成這些問題的主要原因還在不同的區(qū)域、城市;他們的醫(yī)療資源,并不均衡。在病人住院時,醫(yī)療器械顯示的數(shù)據(jù)作為醫(yī)生判斷病人生命體征是否正常的條件,但是需要醫(yī)生及時根據(jù)數(shù)據(jù)進行判斷,這對于醫(yī)療條件緊張、醫(yī)護人員緊張的地區(qū),24小時監(jiān)護是明顯做不到的,這樣會使得醫(yī)生不能迅速地了解患者的生命體征變化,從而導致患者出現(xiàn)情況不能快速的被醫(yī)生發(fā)現(xiàn)。因此健康監(jiān)護系統(tǒng)的建立成為大勢所趨,提升了醫(yī)院醫(yī)療設備的便捷性和智能化以及效率,引起了國內外研究者的關注,形成了較多的研究成果。1.2國內外研究現(xiàn)狀本文在《家庭遠程健康監(jiān)護云服務系統(tǒng)設計》一書中介紹了該技術,并給出了具體實現(xiàn)方案。該系統(tǒng)主要包括了物聯(lián)網(wǎng)健康監(jiān)護終端、家庭監(jiān)護網(wǎng)關、中心云服務器以及信息服務終端【14】。物聯(lián)網(wǎng)健康監(jiān)測終端利用

WIFI作為無線傳送手段,對病人的血壓進行收集,同時,家庭監(jiān)測網(wǎng)關從物聯(lián)網(wǎng)血壓計中獲取并將其傳送到中央云服務器:使用

CART決策樹、隨機森林和梯度提升;采用K-最近鄰居等方法,對不同性別、不同年齡和不同身高的高血壓進行了分類和診斷;以體重,收縮壓,舒張壓為主要指標對高血壓進行了定性和定量的分析。利用小波變換、神經(jīng)網(wǎng)絡等技術,對具有非線性、非平穩(wěn)性的血壓數(shù)據(jù)進行了建模。最終,開發(fā)出一套能夠進行血壓數(shù)據(jù)輸入、數(shù)據(jù)查詢、高血壓診斷及血壓預報的家用遠程監(jiān)控系統(tǒng)和血壓預報系統(tǒng)。在葉琦的《基于

WIFI的遠程健康監(jiān)護系統(tǒng)設計》中,她使用了

ST公司的STM32系列

MCU作為她的實驗平臺,利用兩臺計算機之間的WiFi通訊,將從機上獲得的相關信息,以及從機上再利用WiFi將這些信息傳送給主機上,再利用主機上的LCD12864液晶屏幕,對這些信息進行實時的顯示,從而達到調整大氣環(huán)境質量的目的。整個房間一共有四張病床,只需按下相應的按鈕即可調用。與中國相比,醫(yī)學監(jiān)測在海外發(fā)展迅速,技術也處于中國的前列,隨著遠程醫(yī)學應用范圍的擴大,其應用范圍也在逐步擴大;在海外,無線醫(yī)學監(jiān)控系統(tǒng)的發(fā)展非常快。2021年AbedNJ;HusseinEhabAbdulrazzaq在《DesignandmplementationofRealTimeHealthCareMonitoringSystemBasedonlot》中提出基于網(wǎng)絡的傳感器或基于移動的應用程序,這些設備通過網(wǎng)絡進行通信,使構建的監(jiān)測和記錄患者醫(yī)療數(shù)據(jù)和健康信息的系統(tǒng)更加有效。設計了一個由傳感器和監(jiān)測設備組成的衛(wèi)生系統(tǒng),該系統(tǒng)能夠收集患者的醫(yī)療數(shù)據(jù),然后通過互聯(lián)網(wǎng)將這些數(shù)據(jù)傳輸給專科醫(yī)生,以便準確地評估患者的健康狀況。目前,物聯(lián)網(wǎng)(loT)在醫(yī)療保健領域是最重要的部分,它可以提供更好的思者健康監(jiān)測,讓醫(yī)生和醫(yī)院更好地工作,減少工作難度。該計劃旨在開發(fā)一種適當?shù)谋O(jiān)測系統(tǒng)。通過互聯(lián)網(wǎng)將患者和居住在偏遠地區(qū)、附近沒有醫(yī)院的患者連接起來,為他們提供更好的醫(yī)療服務,通過能夠記錄患者心率、血氧百分比和體溫的設備收集與患者健康有關的數(shù)據(jù)[11]。在全球醫(yī)療監(jiān)護網(wǎng)絡設備市場中,國外產(chǎn)品擁有多樣化配置,但是價格昂貴沒有得到大范圍普及。因此設計硬件和軟件管理系統(tǒng)高度結合的安全的、高性價比的遠程醫(yī)療健康監(jiān)護系統(tǒng)具有很廣的市場前景。1.3本文主要研究的內容本系統(tǒng)主要設計一個WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)[14]。基于STM32單片機通過紅外體溫傳感器、血氧心率傳感器、WIFI模塊、GPS模塊、報警模塊對醫(yī)療健康監(jiān)護系統(tǒng)進行設計。設計完成具有能檢測病人體溫、心率、脈搏生理體征參數(shù)等信息以及數(shù)據(jù)上傳報警向醫(yī)生發(fā)送位置信息等功能的設計。通過各種算法,實現(xiàn)數(shù)據(jù)的準確性以及穩(wěn)定性,最終得到一款人性化,性能高的監(jiān)護系統(tǒng)[17]。第2章系統(tǒng)整體設計方案2.1WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)的需求分析WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)是一種基于現(xiàn)代科技,能夠通過對人體進行檢測人體血氧濃度,心率以及人體溫度并傳輸給醫(yī)院數(shù)據(jù)庫進行分析的新型智能電子設備。依照目前醫(yī)院管理現(xiàn)狀來看,病人數(shù)量遠遠大于護士護工人員數(shù)量,所以減少非必要的勞動力,節(jié)約時間顯得尤為重要,特別是重癥患者的治療情況緊急,甚至需要無時無刻的關注,另外,老年人逐漸增長,許多突發(fā)疾病不能及時通知監(jiān)護人,從而耽誤治療,而WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng),不僅可以幫助護士與家人快速了解病人,并且實時檢測病人當前的心率情況與血氧情況,并且及時反饋給醫(yī)院系統(tǒng)數(shù)據(jù)庫,當護士人員短缺或病人無人陪伴時,也不用去現(xiàn)場測量病人情況,直接在數(shù)據(jù)庫中遠程查看情況,發(fā)現(xiàn)異常即可及時進行處理,為病人的安全增添了保障。傳統(tǒng)監(jiān)護系統(tǒng)可以實現(xiàn)病人身份信息的顯示,令醫(yī)護人員方便確認病人。通過對比傳統(tǒng)監(jiān)護系統(tǒng)的功能以及弊端,可以得到醫(yī)療腕帶具有以下優(yōu)勢特點:(1)在不依靠其他醫(yī)療設備的情況下,檢測并顯示人體血氧濃度,心率快慢以及人體溫度,免去了繁瑣的儀器測量過程;(2)遠程數(shù)據(jù)傳輸,將信息數(shù)據(jù)傳輸給數(shù)據(jù)庫,醫(yī)護人員對應編號直接查看病人狀態(tài);(3)成本低廉,功能多樣,性價比高,而傳統(tǒng)監(jiān)護系統(tǒng)功能單一,完全可被替代。(4)包含GPS定位系統(tǒng),可以隨時精準找到病人,以免因時間問題耽誤患者治療。2.2系統(tǒng)總體方案設計 結合WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)所具備的功能,本文將以單片機為核心控制不同模塊實現(xiàn)最終目的。單片機具有良好的集成度,可以大大簡化電路設計。同時,由于智能電子設備可能會頻繁的使用,所以這些設備的能耗要求非常高,因此需要設計出一些比較節(jié)能的控制模塊來提高智能電子設備的待機時常,特別是本文所設計的監(jiān)護系統(tǒng),需要長時間的開啟,而單片機的低耗能正好符合這一需求。除此之外,還將涉及到如何獲取人體血氧濃度,心率以及體溫,并將數(shù)據(jù)傳輸給數(shù)據(jù)庫,多種模塊的使用等,利用單片機更容易實現(xiàn),整個系統(tǒng)的設計主要包含了對系統(tǒng)研究方案的確定設計所需要的硬件電路的設計與軟件程序驅動的設計,以及軟件后期功能的調試。根據(jù)項目功能需求確定項目研究路線,如圖2.2.1所示。確定研究對象以及所需材料確定研究對象以及所需材料程序設計學習相關模塊驅動方法整合實物進行測試得到準確數(shù)據(jù)確定方案可行性繪制仿真和原理圖編寫程序驅動模塊根據(jù)數(shù)據(jù)進行調試硬件設計學習相關軟件使用圖2.2.1系統(tǒng)研究路線圖單片機S單片機STM32F103血氧心率傳感器晶振與復位電路顯示電路數(shù)據(jù)傳輸電路體溫傳感器報警模塊GPS模塊手機平臺圖2.2.2硬件系統(tǒng)結構框圖2.3控制方式的選擇2.3.1單片機芯片的選擇方案一:51

MCU從內到外,總體上比較完善。它是以比特操作系統(tǒng)為基礎的,所以叫比特處理器。它不僅可以在單片機中對某些具有特定功能的比特進行運算,如傳送,設定,調零等;檢驗等等,也能對比特進行邏輯操作。功能齊全,操作簡單。但51MCU雖為經(jīng)典,但其缺點也十分明顯。AD、EEPROM等功能還需要依靠擴展來使用,這為硬件與軟件增添了負擔。還有就是運行速度過慢,尤其是雙數(shù)據(jù)指針,如果這一部分可以改進,能給編程帶來很大的方便。該設備的缺點很明顯,51保護能力非常差,不小心差錯方位,便很容易損毀芯片。方案二:方案2:STM32MCU的核心是ARM

32位的Cortex-M3CPU,其最大工作頻率是72毫赫,1.25

dmips/毫赫。其記憶體晶片內有32至512

Kb閃存與6至64KbSRAM。時鐘,重置,功率管理等都是依靠23.6V供電和輸入輸出接口的驅動電壓來實現(xiàn)的。采用4~16兆赫的晶振,PDR及程控電壓檢測器。內嵌廠注:8兆赫電阻式振蕩電路、40千赫電阻式振蕩電路.CPU、鎖相環(huán)。標定了32KHz的RTC水晶振蕩器。除錯方式:SWD,

SWD,

JTAG接口.最多可提供112個高速輸入輸出端口,最多可提供11個計時器。除此之外,STM32單片機的學習方式非常的靈活。入門之后,通過各種模塊的學習,能夠高效的提高使用的效率,并且可以在日常生活中,制作出多種多樣的機器人,對于科研學習人員來說,提供能更多的可能性與研究性。針對項目所需進行合理分析后,本文采用STM32F103C8T6為控制核心。在不浪費資源的前提下,充分利用其性能進行調試與實驗。2.3.2血氧心率采集模塊的選擇對于如何獲取人體血氧濃度與心率快慢,本文將使用MAX30100的血氧濃度腕式心率檢測傳感器模塊。本設計需要獲取到人體內相對準確的心率數(shù)據(jù)與血氧數(shù)據(jù),并且在佩戴較長時間的情況下,能夠保持穩(wěn)定狀態(tài),還應具有較低耗能的特點。而MAX30100則是集脈沖式血氧飽和度檢測與心跳檢測于一體的生化檢測系統(tǒng)。其性能和性能都很好地滿足了我們的要求,其中包括一臺660nm的紅光發(fā)光二極管,一臺880nm的紅外發(fā)光二極管,一臺光電探測器;光學設備,以及降低周圍光線干擾的電子線路。具有軟件關斷模塊,待機電流為零,能隨時維持其供電狀態(tài),適用于低功耗的產(chǎn)品。MAX30100采用1.8伏的電力供應,另外還配有3.3伏的電力供應,并配有符合

IIC標準的通訊接口。現(xiàn)在,市場上大多數(shù)都是將MAX30100芯片集成在一個

PCB模塊上,在其里面增加一個1.8

V和3.3

VLDO穩(wěn)壓電路,可給模塊分別提供5.0

V電源,以便于開發(fā)者開發(fā)。選擇該模塊的優(yōu)點主要是其擁有比較簡化的采集血氧與心率的設計,集成LED、光電傳感器以及高性能模擬前端;另外它超低功耗的功能可以延長設備的使用壽命,可編程采樣率和LED電流節(jié)省功率,同時具有超低的關閉電流;另外它具有優(yōu)良的性能,擁有強大的運動神器彈性,同時可以消除環(huán)境光的影響,減少其數(shù)據(jù)的誤差。MAX30100芯片相較與MAX30102芯片廉價,但是性能卻十分穩(wěn)定,測量精確。2.3.3體溫采集模塊的選擇是一種無接觸的紅外測溫,又稱輻射測溫,通常采用熱電型或光電探測器,通過紅外輻射進行測溫;將紅外能量轉化成電信號,高精度放大器再對這些電信號展開放大處理,最后利用模數(shù)轉換成為數(shù)字信號。最后,利用單片機,利用算法程序補償修正、參數(shù)校準等工作,就可以輸出較高精度的溫度值。模塊的默認情況是以串口傳輸方式進行的,該模塊有四個接口:電源正極(VCC為3~5V)、電源負極(GND),RC(串口UART-RX)與TD(串口UART-TX)。2.3.4定位模塊的選擇模組采用ATGM336H定位芯片,支持3.3V~5V供電,采用串口傳輸,帶有SMA和IPEX兩種天線接口,以及PPS時鐘脈沖輸出腳,方便時鐘同步,將GPS模塊與單片機進行連接,經(jīng)過單片機程序解析,在串口可輸出數(shù)據(jù)包括UTC時間,經(jīng)度以及維度,進行快速精準定位。2.3.5WIFI模塊的選擇在該控制系統(tǒng)中,用戶獲取系統(tǒng)數(shù)據(jù)信息需要利用無線通信技術,而對于手機與MCU的無線通信,主要有兩種方案,一是利用esp8266wifi模塊,通過建立客戶端與服務器進行網(wǎng)絡通信,實現(xiàn)無線遙控。二是利用藍牙模塊,通過手機藍牙連接對應藍牙設備,實現(xiàn)主從通信。兩種方案的可行性都十分成熟,但藍牙模塊的傳輸距離十分有限,且信號容易丟失,而wifi模塊只需連接網(wǎng)絡后,即可實現(xiàn)任意距離下的信息輸送,因此選用esp8266wifi模塊。2.3.6報警模塊的選擇本文采用蜂鳴器模塊作為報警模塊,蜂鳴器分為有源和無緣兩種。在沒有振動電源的情況下,通過對振動電源的調節(jié),可以使其產(chǎn)生各種振動信號。但是,有源蜂鳴器里面是有自己的振蕩源的,只要在它的正負極連接上直流電壓,就可以一直發(fā)出聲音。本文選用有源蜂鳴器,通過單片機與信號線連接,給與高低電平發(fā)出聲音,以此實現(xiàn)報警功能。2.4本章小結本章主要介紹了WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)所需要的模塊,主要包括主控芯片,測心率血氧模塊,藍牙傳輸模塊,體溫模塊以及顯示模塊,在模塊選擇的過程中,需要查找足夠多的資料,進行多方面的對比,充分了解模塊的優(yōu)缺點,關鍵要對使用場合,數(shù)據(jù)準確性,功能穩(wěn)定性進行分析,通過對各個模塊進行性能上的分析,從而選擇出最合適的模塊進行研究,制作出性能穩(wěn)定,功能齊全的醫(yī)療健康監(jiān)護系統(tǒng)[11]。第3章硬件系統(tǒng)設計3.1系統(tǒng)硬件電路設計本節(jié)主要是對各個模塊電路的設計,利用了AltiumDesigner軟件繪制原理圖,并對電路進行簡單分析,主要對單片機的晶振、復位與SWD下載電路,MAX30100血氧心率模塊電路,體溫模塊電路,GPS電路,數(shù)據(jù)傳輸模塊電路,WIFI模塊進行了詳細設計。軟件模塊的正常驅動離不開硬件電路的支持,只有合理的硬件電路才能證明系統(tǒng)的可行性,因此對于模塊的原理圖設計,也是不可或缺的一部分。在完成本設計的過程中,繪制硬件原理圖是所要完成的第一步,不僅是確保方案的可行性與合理性,同時也方便了后期搭建實物。本設計采用了AltiumDesigner軟件進行了原理圖的繪制,該款軟件被開發(fā)者普遍地應用于各種系統(tǒng)的研發(fā)當中,軟件內部具有豐富的功能,開發(fā)者們可以進行原理圖的繪制,PCB板設計,電路仿真等等,有效的提高了系統(tǒng)開發(fā)效率。3.2晶振、復位與SWD下載電路在設計最小系統(tǒng)電路時,晶振電路是非常重要的一部分,晶振電路主要功能是為單片機提供一定的時鐘參考信息,晶振電路的設計非常簡單,只用在單片機的X1與X2對應的引腳上進行石英晶體的連接就可以了,此次設計單片機的晶振頻率選擇8MHz的,電容大小選擇22pF,晶振電路如圖3.1所示。圖3.1晶振電路原理圖因為單片機在工作運行程序時,經(jīng)常需要重新運行程序,但不能僅憑借重新上電來解決問題,所以需要手動復位,來進行重啟,這對于一個單片機系統(tǒng)來說也是十分重要的,NRST系統(tǒng)復位,通過按鍵按下,電容放電使NRST引腳上為低電平,將所有寄存器復位,當按鍵沒有按下時,則電容會一直充電,兩端的電壓回到3.3V。其電路如圖3.2所示。圖3.2復位電路原理圖STM32單片機系列擁有多種下載方式,本設計采用SWD下載電路為單片機進行程序燒錄,其電路連接非常簡單,只需接好對應接口即可,下文會詳細介紹,其原理圖如圖3.3所示。圖3.3SWD原理圖3.3MAX30100血氧心率模塊電路MAX30100模塊的工作原理主要利用光信號發(fā)射和接收,通過AD轉換以及消除環(huán)境光的干擾,并對異常數(shù)據(jù)進行濾波,得到較為準確的光強值,使用者再通過單片機的IIC與其進行通信,讀取寄存器中的光強值。這里STM32單片機與其通信采用了模擬IIC的方式,SDA—PB8,SCL—PB9其原理圖如圖3.4所示。圖3.4MAX30100模塊原理圖3.4體溫傳感器模塊電路GY-614V3是一款紅外非接觸溫度計。電源接口VCC為電源輸入,建議輸入電壓在3.3V-5V之間。分別將VCC和GND引腳連接好,串口分別連接兩根信號線,本設計配置了IIC通信,需要焊接PS焊點,通過發(fā)射率計算目標溫度,外加額溫補償進行溫度計算,其原理圖如圖3.5所示。圖3.5GY-614V3模塊原理圖3.5GPS模塊電路GPS模塊采用3.3~5V供電,帶有SMA和IPEX兩種天線接口,用戶連接單片機的串口TTL電平或者USB-TTL模式,帶有PPS授時輸出引腳,采用NMEA-0183的輸出協(xié)議,設置9600波特率,采用串口讀取數(shù)據(jù)進行采集,原理圖如圖3.6所示。圖3.6GPS模塊原理圖3.6WIFI模塊電路Esp8266芯片內部為32位處理器,用作wife協(xié)議處理器,支持UART/GPIO/IIC/PWM/ADC/HSPI等接口,本系統(tǒng)利用單片機的串口與wifi模塊進行通信交互,實現(xiàn)數(shù)據(jù)的傳輸,下圖為esp8266WiFi模塊原理圖。圖3.7WIFI模塊原理圖3.7報警模塊電路本模塊將VCC端接入3.3v~5v電壓,GND端接地,I/O接信號的輸入,當觸發(fā)時就能發(fā)出“嗶嗶嗶~~~”的響聲。繼電器的驅動電壓不能超過限制電壓,不然會燒掉繼電器,模塊采用三極管驅動,下圖為蜂鳴器模塊原理圖。圖3.8蜂鳴器模塊原理圖第4章軟件系統(tǒng)設計4.1軟件整體框架 軟件系統(tǒng)的設計主要針對STM32的程序設計,并結合體溫采集模塊,心率血氧采集模塊,通信模塊以及OLED顯示模塊,軟件整體流程如下圖4.1所示。圖4.1軟件流程圖4.2軟件設計本節(jié)主要介紹了智能醫(yī)療腕帶的軟件技術開發(fā)[11],單片機技術開發(fā)中,設計軟件系統(tǒng)也是極其重要的一部分[13],軟件程序可以說是機器人的靈魂了,合適的軟件方案不僅能夠提高工作效率,也能保證數(shù)據(jù)的準確行,這里主要對編程軟件,程序燒錄的軟件配置,采集各個模塊數(shù)據(jù)的軟件操作流程進行了詳細的介紹。4.2.1血氧心率采集程序對于MAX30102的使用,首先要了解其采集血氧氣與心跳之理論,將于下文中個別說明。血氧測量原理:血氧飽和度,也叫血氧濃度,是指血液中氧飽和血紅蛋白與總血紅蛋白(不飽和+飽和)的比率。身體要求并調整一種十分精密而具體的血氧平衡。正常情況下,人體內的血管血氧飽和度應該在95-100%之間。若其值在90%以下,就會被認定為貧血。血液含氧量的測定有透過法和反射法兩種方法。現(xiàn)在最受歡迎的是傳輸型。這兩種儀器的原理很相似,都都是利用發(fā)光二極管(紅光RED,紅外IR,綠光GREEN和藍光BLUE等)再用一個二極管來接受被檢測物體的發(fā)射或者發(fā)射出來的光,并將其轉化成電信號。再利用高準確度的模數(shù)轉換器,測定其所產(chǎn)生的電流強度,從而判斷出血液中的氧氣含量。圖4.2PPG波形圖上面4.2所示為一種由半導體探測器所收到的最初的光學訊號所形成的一般情況下的PPG波形。波形(由圖中間的白色橫虛線)可分為

DCsignal和ACsignal,即直流信號和交流信號。其中,直流信號從下到上可以被分成三個部分的反射,分別是:組織(issue),靜脈血(Venousblood)和不跳動的動脈血(Nonpulsatilearterialblood)。除此之外,不同性別、不同膚色、不同年齡的人,相應的

DCsignal值也會有所不同。所以,接下來的血液含氧量的測量,都是以相對數(shù)值來進行的。在了解完其原理之后,將開始進行分析設計其軟件實現(xiàn)流程,圖4.7為血氧采集的軟件流程圖。其中最為重要的是IIC通信的程序與驅動模塊讀取數(shù)據(jù)的程序,后面本文將會對程序方面進行刨析講解,獲取心率與血氧數(shù)據(jù)。圖4.3MAX30100軟件流程圖首先是對IIC通信程序的分析,對于MAX30100測心率血氧模塊的數(shù)據(jù)讀取,本設計這里選用軟件模擬IIC的方式,需要使用程序去控制SCL與SDA線輸出高低電平,并模擬IIC協(xié)議的時序,雖然軟件模擬IIC的速度較硬件慢,但是可以靈活轉換GPIO口,對于一些小應用場景傳輸速度完全足以運行,配置的程序雖然比較繁瑣,但是認真研磨,不難掌握。以下是對模擬IIC程序的講解:第一步就是GPIO口的初始化,因為本設計使用的是庫函數(shù)版本,所以以下程序運行環(huán)境都在官方庫函數(shù)版本下進行,模擬采用的GPIO口為PB8,PB9。在完成了初始化以后,開始寫啟動信號功能,其基本原則是:在SCL線路處于高電平的情況下,

SDA線路從高電平到低電平;此時間序列上的跳躍即為啟動信號。當開始信號被設置完畢后,接著進入結束信號,即所謂的停止信號,當SCL線路處于高電平時,該結束信號和開始信號相同,但其SDA從低到高電平跳躍;這也是開始訊號的反方向。下來就是配置接收ACK應答的函數(shù),過程就是先將數(shù)據(jù)線拉高,等待穩(wěn)定之后,再將時鐘線拉高,繼續(xù)等待穩(wěn)定,完成之后就是采集數(shù)據(jù)線的電平狀態(tài)了,如果是高電平就表示未應答,如果是低電平即代表應答。配置產(chǎn)生ACK應答的函數(shù),其過程主要是先將數(shù)據(jù)線與時鐘線拉低,等待穩(wěn)定之后,再將時鐘線拉高,4微秒過后,把時鐘線重新拉低。配置產(chǎn)生ACK非應答的函數(shù),單聽名字與上一個函數(shù)關系密切,其過程也是相近,首先將時鐘線拉低,數(shù)據(jù)線拉高。等待穩(wěn)定之后,然后把時鐘線拉高,采樣結束后,時鐘線又拉回低。對IIC發(fā)送一個字節(jié)的函數(shù)進行編寫,并讓函數(shù)返回從機有無應答狀況,若有應答則為1,無應答就為0。對IIC接收讀取一個字節(jié)的函數(shù)進行編寫,主要是當發(fā)送NACK時,則代表通知從機發(fā)送結束,再對SDA進行釋放。完成以上基礎配置之后,軟件模擬IIC通信協(xié)議基本可以實現(xiàn)。可以根據(jù)情況靈活使用其他的GPIO進行模擬。配置好IIC之后,就是讀取數(shù)據(jù),將數(shù)據(jù)存放在FIFO里面,F(xiàn)IFO是一種可以存放數(shù)據(jù)的緩沖區(qū),因為要讀取的數(shù)據(jù)十分龐大,所以作者是將IIC獲取到的數(shù)據(jù)存放在FIFO緩沖區(qū)內,同時可以對緩沖區(qū)的數(shù)據(jù)進行讀取,存放,清除,下面將演示如何更新讀取FIFO內的數(shù)據(jù)函數(shù)。其中定義一個數(shù)組,數(shù)組前兩個元素存放紅外數(shù)據(jù),后兩個元素存放紅光數(shù)據(jù)。獲取數(shù)據(jù)后就是對數(shù)據(jù)進行處理濾波,使數(shù)據(jù)更加平滑穩(wěn)定。最后就是分別獲取血氧濃度與心率大小了,通過函數(shù)公式計算出血氧濃度與心率大小。4.2.2體溫采集程序在單片機控制系統(tǒng)中,根據(jù)紅外傳感器得到的信號反饋進行計算所測溫度。下圖為紅外測溫軟件流程圖。圖4.4體溫采集軟件流程圖下面簡單講解紅外體溫計配置。使用GPIO時鐘,復用時鐘設置IO口為通用端口并設置輸入,進行初始化將紅外體溫計串口分別與串口1進行對應并且定義設置起始寄存器,寄存器數(shù)量讀取函數(shù)指針,分析所讀時序得到溫度值之后,將異常大或小不符合人體溫度范圍內的值進行過濾以及額溫補償,最后就是根據(jù)阻值大小與電壓大小計算出人體溫度值。4.2.3GPS定位程序GPS定位功能主要依靠其本身程序對自身位置的定位以及相應聯(lián)系,圖4.5為GPS軟件流程圖。圖4.5GPS軟件流程圖下面是GPS模塊初始化的步驟:第一步是啟動命令,開啟低功耗模式。第二步是配置輸出消息的時間間隔,設置輸出波特率。第三步是定位信息上傳數(shù)據(jù)幀,GPS數(shù)據(jù)解析4.2.4WIFI程序對于數(shù)據(jù)的傳輸,本文將使用STM32單片機上的USART2進行通信,圖4.6為數(shù)據(jù)傳輸流程圖圖4.6數(shù)據(jù)傳輸軟件流程圖對于STM32F103上面的USART2串口的配置流程如下:第一步是GPIO端口的配置,這里選用串口1,故對照引腳后需驅動PA2(TXD)與PA3(RXD),設置模式為復用推挽輸出。第二步是使串口時鐘與串口復位。第三步是設置波特率(通信兩端的波特率需要一致)、數(shù)據(jù)格式、一個停止位、無奇偶校驗、無硬件數(shù)據(jù)流控制、收發(fā)模式,并進行初始化。第四步是配置中斷并開啟中斷。第五步就是編寫中斷處理函數(shù),本文對于串口中斷處理函數(shù)沒有無進行運用,根據(jù)情況而定。第六步是串口數(shù)據(jù)的接收與發(fā)送,直接調用庫函數(shù)中的收發(fā)函數(shù)即可。最后就是獲取串口的傳輸狀態(tài),用來判斷數(shù)據(jù)是否接收或發(fā)送成功。4.2.5報警程序針對報警器的信號控制,主要通過單片機IO口輸出的高低電平進行控制,圖4.7為蜂鳴器報警流程圖圖4.7蜂鳴器報警流程圖對于蜂鳴器的配置流程如下:使能GPIO時鐘,復用時鐘設置IO口為通用端口并設置下拉輸入,推挽輸出,進行初始化將蜂鳴器與IO口進行對應并且定義在主函數(shù)中進行引腳初始化與邏輯程序的定義蜂鳴器配置完成之后,在主函數(shù)中進行邏輯控制,當體溫,心率等數(shù)據(jù)條件到達某一數(shù)值時,控制蜂鳴器發(fā)出聲音,達到報警的效果。4.2.5上位機程序通過前期采集的血氧心率信號以及體溫信號并將其上傳到手機app之中,圖4.8為APP操作界面圖。圖4.8APP操作界面圖第5章WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)仿真5.1WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)仿真 對于系統(tǒng)的硬件設計與軟件設計進行仿真,來進一步證明系統(tǒng)的可行性,對于仿真軟件的選擇,采用Proteus仿真軟件,其軟件內部提供了非常多的仿真元器件資源,以及豐富的測試信號(數(shù)字信號和模擬信號等),可以用于對電路的測試,都對仿真提供了極大的便利,能夠快速的驗證自己的電路,對于單片機系統(tǒng)的仿真來說再適合不過,另外Proteus的操作也是簡單,十分容易入門,對于一些初級開發(fā)者來說是非常不錯的選擇。下圖5.1為Proteus界面圖。圖5.1Proteus界面圖在STM32

MCU的編程方面,我們使用了Keil5編譯環(huán)境,

KeilMDK-ARM是一種由美國

Keil

SoftwareCorporation(現(xiàn)在已經(jīng)被ARMCorporation)所生產(chǎn)的一種支持

ARMMCU的IDE(IntegratedDevices)。MDK-ARM中包括了行業(yè)標準的

KeilC編譯器,宏編譯器,調試器,即時核心,以及其他一些其他的功能。關于keil5的安裝,可以在keil5官方網(wǎng)站上下載安裝包來進行安裝,并且需要事先下載好stm32固件庫,本文中所使用的固件庫是STM32F10x_StdPeriph_Li_V3.5.0,可以從ST官方下載。而對于STM32芯片,有庫函數(shù)與寄存器兩個編譯方式,本文將采用庫函數(shù)版本對單片機以及各個模塊進行編程調試,開發(fā)語言選用C語言,做好準備工作之后,就是建立一個新的工程,具體流程本文不再贅述,具體可參考官方網(wǎng)站教程實例或直接使用正點原子官方STM32F103C8T6工程模板。在IDE中編譯好程序后,需將程序燒錄至單片機中,SMT32燒錄程序方法有多種種,本文簡單介紹兩種,并選取一種進行具體使用:第一種ST-LINK的燒錄方式,采用SWD方式,僅需4條導線。其中有VCC、GND、SWCLK、

SWDIO這四根線分別于單片機上的這個口對應接好后,再將keli5的STLINK配置好(下文會講述如何配置),即可一鍵燒錄程序。第二種方法是

USB轉

TTL連接線燒寫(也稱為

ISP燒寫,請注意,所用的串端口一定是串端口1)這里將會用到一個燒錄軟件FlyMcu。第一個步驟就是把單片機的BOOT0設置成1,然后把BOOT1設置成0,然后再按單片機重設按鈕,完成上述的操作之后;只有這樣,你才能從你的系統(tǒng)內存中開始讀寫。然后在

BootLoader的協(xié)助下,使用1號串接口將該程序燒錄到flash中。在程序下載完畢之后,首先要做的就是將BOOT0接地,并進行手工復位。如若不然,單片機將不會在Flash中啟動。通過對比這兩種燒寫方法與簡便性,本文將采用第一種ST-LINK燒寫方法。在使用ST-LINK燒錄程序的時候,需要提前對keil5配置,配置方法如下:打開工程文件,進入到keil5IDE,然后在菜單欄找到魔法棒。進去之后選擇Debug框,在Debug框下面找到Use,選擇ST-LinkDebugger。接下來點擊Use旁邊的Settings,,將Port參數(shù)選為SW,Max改為1.8MHz。這樣基本配置就結束了,當我們插入ST-Link之后,ST-Link配置成功。最后就是燒錄程序了,將程序編譯好之后,無報錯,即可進行燒錄,將ST-Link與單片機連接之后,插入電腦,按下按鈕,即可成功燒錄。5.2WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)的調試在搭建電路的過程中,要注意先對各個模塊的電路進行單獨調試,確定模塊正常運行,在許多的工程項目中,往往會因為一個小模塊的問題而影響整個項目進度,因此單獨對模塊的調試非常重要。測試完成之后,就是對模塊的焊接,根據(jù)設計要求,需要實物體積小,可穿戴在手腕上,方便攜帶,因此需要將模塊集成焊接在一起,實物焊接完成之后就是進行軟件調試,在調試的過程中,遇到的問題主要有以下幾點問題需要注意:接線問題,很多時候復雜的線路很容易讓人混亂,導致接線錯誤,燒毀系統(tǒng),因此在調試的過程中,需要做到不緊不慢,條理清晰的進行接線;焊接問題,由于焊接技術的不熟練,會造成電路引腳部分接觸不良或者斷掉,從而導致模塊無法正常使用,需要多加進行檢查,減少焊接操作失誤;軟件程序的問題,很多時候編寫代碼不嚴謹,不規(guī)范,導致單片機運行發(fā)生意想不到的事情,另外使用算法進行數(shù)據(jù)處理時,也要針對實際狀況,對算法進行合理優(yōu)化,確保數(shù)據(jù)的真實性。搭建完成系統(tǒng)之后,就要對獲取到的數(shù)據(jù),進行不斷地調試,確保心率血氧以及溫度的數(shù)值接近人體機能的實際值,這一過程,最重要的就是對程序的不斷優(yōu)化,直至達到要求為止。5.3系統(tǒng)功能驗證5.3.1顯示模塊打開開關,通過WiFi模塊進行連接,發(fā)現(xiàn)顯示正常,證明顯示模塊可以正常使用如圖5.3.1所示,可以證明本設計實現(xiàn)了連接WiFi和顯示功能圖5.3.1顯示功能5.3.2檢測模塊把手放在檢測模塊相應位置,發(fā)現(xiàn)可以正常檢測心率以及血氧證明心率以及血氧等模塊可以正常使用如圖5.3.2所示圖5.3.2檢測功能第6章總結隨著科技創(chuàng)新的發(fā)展,圍繞單片機為控制系統(tǒng)的各種各樣科技產(chǎn)品被研發(fā)出來,單片機改變了傳統(tǒng)的控制方法和設計方法,通過軟件控制各個模塊不僅節(jié)省了資源,而且非常高效。STM32單片機也從眾多單片機中脫穎而出,其強大的功能與體系的優(yōu)勢也會越來越顯現(xiàn)出來。本設計主要是STM32F103單片機在智能醫(yī)療腕帶系統(tǒng)中的應用。重點講解了WIFI遠程醫(yī)療健康監(jiān)護系統(tǒng)的實現(xiàn),從各個模塊的選型,到硬件電路的設計,再到軟件程序驅動模塊,最終實現(xiàn)其功能。由血氧心率模塊與體溫模塊分別采集到脈沖數(shù)據(jù),再經(jīng)過信號的放大、整形等一系列處理,由單片機通過中斷處理與IIC通信協(xié)議獲取到數(shù)據(jù),并利用公式轉換數(shù)據(jù)得到真實的血氧濃度值、心率快慢以及人體溫度,再驅動顯示屏顯示數(shù)據(jù)并通過單片機的串口通信驅動通信模塊發(fā)送給數(shù)據(jù)庫。為了更好的完成這次畢業(yè)設計,在這段時間里每天認真學習各種軟件的使用方法,學習編寫程序驅動各個模塊獲取數(shù)據(jù),為畢業(yè)設計的成功實現(xiàn),打好了基礎。本次的設計其系統(tǒng)實現(xiàn)簡單,功能強大豐富,具有很強的實用價值,為醫(yī)療事業(yè)貢獻了力量。另外也有很多拓展功能可以在今后的學習中不斷探索,添加到設計中,使其日漸完善。這一次的畢業(yè)設計過程,也是十分艱苦,讓我收獲到了很多,并做了簡單的總結:(1)首先在做任何事之前要做好充分準備,學會搜集資料,不盲目的學習,不然只會浪費時間。(2)經(jīng)過這次設計之后,讓我充分認識到單片機的強大,并認識到自身的不足。(3)只有經(jīng)過無數(shù)次失敗,才能走向成功,不斷嘗試,就會有出路。參考文獻[1]周開利,張偉,王旭,基于藍牙和智能手機的人體多生理參數(shù)無線監(jiān)測系統(tǒng)[J].物聯(lián)網(wǎng)技術2015(06)[2]張鵬,嚴孝祥,基于Android平臺的心電遠程監(jiān)護系統(tǒng)的實現(xiàn)[J].物聯(lián)網(wǎng)技術2015(04)[3]呂峰,楊莉,崔茂應等.智能移動醫(yī)療動態(tài)監(jiān)護系統(tǒng)與物聯(lián)網(wǎng)的運用分析[J]自動化與儀器儀表2016(08)[4]翟翔.淺談老年人監(jiān)護系統(tǒng)的研究和發(fā)展[J]內蒙古科技與經(jīng)濟2016(22)[5]郝文延.病床監(jiān)測監(jiān)護系統(tǒng)設計[J]自動化應用2017(04)[6]饒宜迅,郭洛含,易永余.一款基于多傳感器的室內病床監(jiān)護系統(tǒng)設計IJ].電子測試,2021(17).[7]郝天然.智慧醫(yī)院監(jiān)護系統(tǒng)集成方案[J]中國新通信2021(17)[8]周杰,王申,田敏.基于無線傳感器網(wǎng)絡的遠程醫(yī)療監(jiān)護系統(tǒng)設計[J].科技與創(chuàng)新2019(13).[9]何非,何克清.大數(shù)據(jù)及其科學問題與方法的探討[JL武漢大學學報(理學版)2014(01)[10]梁帥.病理文本數(shù)據(jù)的結構化處理系統(tǒng)研究與實現(xiàn)[D].東華大學2015[11]趙澤,崔莉.一種基于無線傳感器網(wǎng)絡的遠程醫(yī)療監(jiān)護系統(tǒng)[J].信息與控制,2006(02):265-269.[12]王鑫.便攜式心肺監(jiān)護系統(tǒng)的設計與實現(xiàn)[D].南京郵電大學,2022.[13]黃俊翔,肖振邦,陳真誠,朱健銘.便攜式心電血氧動態(tài)監(jiān)護系統(tǒng)設計[J].信息技術與信息化,2022(09):15-19.[14]許樂,趙文龍.基于STM32的老年人健康監(jiān)護系統(tǒng)設計[J].南昌航空大學學報(自然科學版),2022,36(02):95-101.[15]BarettaA,BursiR,PalazzinAetal.AnautomatedcomputationaltooltostudyMRIsafetyofimplantedpassivecardiovascularmedicaldevices[Jj.EuropeanHeartJournal,2020.41.[16]OlsonDevraJ.,KulukianAnita,TaylorJanelleD.etal.PreclinicalcharacterizationoftucatinibinHER2-amplifiedxenograftandCNSimplantedtumors[J].CANCERRESEARCH,2020,80(16)[17]BruiningNico.deJaegerePeterTelemedicalmonitoringbyanimplantedlooprecordergatewaytopersonalizedmedicine?ResultsoftheSMARTMIstudy.[J]Cardiovascularresearch,2022[18]StanislavS.Dukhin,MohamedE.LabibHydrodynamically-drivendrugreleaseduringinterstitialfowthroughhollowfibersimplantednearlymphatics[JJColloidsandSurfacesA:PhysicochemicalandEngineeringAspects,2016,521.[19]AlshammariHamoudH..TheinternetofthingshealthcaremonitoringsystembasedonMQTTprotocol[J].AlexandriaEngineeringJournal,2023,69.[20]ColomboGL,TorreE,DiMatteoS,MontiE,MartinottiC,BrunoG,LevratGuillenF.EE281FreestyleLibre2FlashGlucoseMonitoringSystem:BudgetImpactandCost-UtilityAnalysesinType1DiabetesFromtheItalianNHSPerspective[J].ValueinHealth,2022,25(12S).[21]WeiShuoshuo,LuRong,ZhangZhengping,WangFaxuan,TanHai,WangXiaohong,MaJinlan,ZhangYating,DengNing,ChenJuan.MRI-assesseddiaphragmaticfunctioncanpredictfrequentacuteexacerbationofCOPD:aprospectiveobservationalstudybasedontelehealth-basedmonitoringsystem[J].BMCPulmonaryMedicine,2022,22(1).附錄附錄A原理圖附錄B主程序#ifndef__gps_h#define__gps_h#include"stm32f10x.h"#defineGPS_USART_REC_LEN 200 //定義最大接收字節(jié)數(shù)200externcharGPS_USART_RX_BUF[GPS_USART_REC_LEN];//接收緩沖,最大USART_REC_LEN個字節(jié).末字節(jié)為換行符//定義數(shù)組長度#defineGPS_Buffer_Length80#defineUTCTime_Length11#definelatitude_Length11#defineN_S_Length2#definelongitude_Length12#defineE_W_Length2#definefalse0#definetrue1 typedefstructSaveData{ charGPS_Buffer[GPS_Buffer_Length]; charisGetData; //是否獲取到GPS數(shù)據(jù) charisParseData; //是否解析完成 charUTCTime[UTCTime_Length]; //UTC時間 charlatitude[latitude_Length]; //緯度 charN_S[N_S_Length]; //N/S charlongitude[longitude_Length]; //經(jīng)度 charE_W[E_W_Length]; //E/W charisUsefull; //定位信息是否有效}_SaveData;extern_SaveDataSave_Data;voidCLR_Buf(void);voidclrStruct(void);voidGPS_RecHandle(u8res);voidparseGpsBuffer(void);//parse:分析GPS數(shù)據(jù)#endif#include"gps.h"#include<string.h>#include<stdio.h>#include"led.h"u16point1=0;//接收數(shù)組定位charGPS_USART_RX_BUF[GPS_USART_REC_LEN];//接收緩沖,最大USART_REC_LEN個字節(jié)._SaveDataSave_Data;voidCLR_Buf(void)//串口緩存清理{ memset(GPS_USART_RX_BUF,0,GPS_USART_REC_LEN);//清空 point1=0;}voidclrStruct(void){ Save_Data.isGetData=false; Save_Data.isParseData=false; Save_Data.isUsefull=false; memset(Save_Data.GPS_Buffer,0,GPS_Buffer_Length);//清空 memset(Save_Data.UTCTime,0,UTCTime_Length); memset(Save_Data.latitude,0,latitude_Length); memset(Save_Data.N_S,0,N_S_Length); memset(Save_Data.longitude,0,longitude_Length); memset(Save_Data.E_W,0,E_W_Length);}voidGPS_RecHandle(u8Res){ if(Res=='$') { point1=0; } GPS_USART_RX_BUF[point1++]=Res; if(GPS_USART_RX_BUF[0]=='$'&&GPS_USART_RX_BUF[4]=='M'&&GPS_USART_RX_BUF[5]=='C') //確定是否收到"GPRMC/GNRMC"這一幀數(shù)據(jù) { if(Res=='\n') { memset(Save_Data.GPS_Buffer,0,GPS_Buffer_Length);//清空 memcpy(Save_Data.GPS_Buffer,GPS_USART_RX_BUF,point1); //保存數(shù)據(jù) Save_Data.isGetData=true; point1=0; memset(GPS_USART_RX_BUF,0,GPS_USART_REC_LEN);//清空 } } if(point1>=GPS_USART_REC_LEN) { point1=GPS_USART_REC_LEN; } }voiderrorLog(intnum){ // while(1)// {// printf("ERROR%d\r\n",num);// } LED_Control(ON);}voidparseGpsBuffer(void)//parse:分析GPS數(shù)據(jù){ char*subString; char*subStringNext; chari=0; if(Save_Data.isGetData) { Save_Data.isGetData=false;// printf("**************\r\n");// printf(Save_Data.GPS_Buffer); for(i=0;i<=6;i++) { if(i==0) { if((subString=strstr(Save_Data.GPS_Buffer,","))==NULL) errorLog(1); //解析錯誤 } else { subString++; if((subStringNext=strstr(subString,","))!=NULL) { charusefullBuffer[2]; switch(i) { case1:memcpy(Save_Data.UTCTime,subString,subStringNext-subString);break; //獲取UTC時間 case2:memcpy(usefullBuffer,subString,subStringNext-subString);break; //獲取UTC時間 case3:memcpy(Save_Data.latitude,subString,subStringNext-subString);break; //獲取緯度信息 case4:memcpy(Save_Data.N_S,subString,subStringNext-subString);break; //獲取N/S case5:memcpy(Save_Data.longitude,subString,subStringNext-subString);break; //獲取經(jīng)度信息 case6:memcpy(Save_Data.E_W,subString,subStringNext-subString);break; //獲取E/W default:break; } subString=subStringNext; Save_Data.isParseData=true; if(usefullBuffer[0]=='A') Save_Data.isUsefull=true; elseif(usefullBuffer[0]=='V') Save_Data.isUsefull=false; } else { errorLog(2); //解析錯誤 } } } }}#ifndef__WUXIAN_H#define__WUXIAN_H#include"Def_config.h"#include"stm32f10x.h"#defineXinLv_Length5#defineXueYang_Length5#definelatitude_Length11#defineN_S_Length2#definelongitude_Length12#defineE_W_Length2#defineWuXian_RX_BUF_Length100#defineJUDGE_Length2typedefstruct{ charWuXian_Buffer[WuXian_RX_BUF_Length]; charisGetData; //是否獲取到數(shù)據(jù) charisParseData; //是否解析完成 charXinLv[XinLv_Length]; //心率值,字符串形式存儲 charXueYang[XueYang_Length]; //血氧數(shù)據(jù) charlatitude[latitude_Length]; //緯度 charN_S[N_S_Length]; //N/S charlongitude[longitude_Length]; //經(jīng)度 charE_W[E_W_Length]; //E/W charis_XinLvWarn[JUDGE_Length]; charis_XueYangWarn[JUDGE_Length]; charis_HandWarn[JUDGE_Length];}_SendData;extern_SendDataSend_Data;#definefalse0#definetrue1 voidparseWuXianBuffer(void);voidWuXian_Rec(u8Res);voidWuXian_Clear(void);#endif#include"wuxian.h"#include<string.h>#include<stdio.h>#include"lcdUart.h"#include"usart1.h"u8point1=0; u8WuXian_RX_BUF[WuXian_RX_BUF_Length];_SendDataSend_Data;voidWuXian_Clear(void){ memset(Send_Data.WuXian_Buffer,'\0',WuXian_RX_BUF_Length); memset(Send_Data.XinLv,'\0',WuXian_RX_BUF_Length); memset(Send_Data.XueYang,'\0',WuXian_RX_BUF_Length); memset(Send_Data.latitude,'\0',WuXian_RX_BUF_Length); memset(Send_Data.N_S,'\0',WuXian_RX_BUF_Length); memset(Send_Data.longitude,'\0',WuXian_RX_BUF_Length); memset(Send_Data.E_W,'\0',WuXian_RX_BUF_Length); memset(Send_Data.is_XinLvWarn,'\0',WuXian_RX_BUF_Length); memset(Send_Data.is_XueYangWarn,'\0',WuXian_RX_BUF_Length); memset(Send_Data.is_HandWarn,'\0',WuXian_RX_BUF_Length); Send_Data.isGetData=FALSE; Send_Data.isParseData=FALSE;}voidWuXian_Rec(u8Res){ if(Res=='$') { point1=0; } WuXian_RX_BUF[point1++]=Res; if(Res=='\n') { memset(Send_Data.WuXian_Buffer,'\0',WuXian_RX_BUF_Length);//清空 memcpy(Send_Data.WuXian_Buffer,WuXian_RX_BUF,point1); //保存數(shù)據(jù) Send_Data.isGetData=true; point1=0; USART1_SendString((u8*)Send_Data.WuXian_Buffer);// printf("DCV16(0,7,'%s',%d);\r\n",WuXian_RX_BUF,1);// LCD_CheckBusy(); memset(WuXian_RX_BUF,'\0',WuXian_RX_BUF_Length);//清空 } if(point1>=WuXian_RX_BUF_Length) { point1=WuXian_RX_BUF_Length; } }voidparseWuXianBuffer(void)//parse:分析數(shù)據(jù){ char*subString; char*subStringNext; chari=0; if(Send_Data.isGetData) { Send_Data.isGetData=false; for(i=0;i<9;i++) { if(i==0) { if((subString=strstr(Send_Data.WuXian_Buffer,"$"))!=NULL) { subString++; if((subStringNext=strstr(subString,","))!=NULL) { memcpy(Send_Data.XinLv,subString,subStringNext-subString); subString=subStringNext; } } } elseif(i<8) { subString++; if((subStringNext=strstr(subString,","))!=NULL) { switch(i) { case1: memcpy(Send_Data.XueYang,subString,subStringNext-subString); break; case2: memcpy(Send_Data.latitude,subString,subStringNext-subString); break; case3: memcpy(Send_Data.N_S,subString,subStringNext-subString); break; case4: memcpy(Send_Data.longitude,subString,subStringNext-subString); break; case5: memcpy(Send_Data.E_W,subString,subStringNext-subString); break; case6: memcpy(Send_Data.is_XinLvWarn,subString,subStringNext-subString); break; case7: memcpy(Send_Data.is_XueYangWarn,subString,subStringNext-subString); break; default:break; } subString=subStringNext; } } else { subString++; if((subStringNext=strstr(subString,"\r"))!=NULL) { memcpy(Send_Data.is_HandWarn,subString,subStringNext-subString); } } } Send_Data.isParseData=true; } }#ifndef__XINLV_H#define__XINLV_H#includ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論