寵物防丟位置查詢系統(tǒng)設(shè)計_第1頁
寵物防丟位置查詢系統(tǒng)設(shè)計_第2頁
寵物防丟位置查詢系統(tǒng)設(shè)計_第3頁
寵物防丟位置查詢系統(tǒng)設(shè)計_第4頁
寵物防丟位置查詢系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第2章國內(nèi)外現(xiàn)狀2.1國內(nèi)研究現(xiàn)狀在中國,越來越多的家庭選擇飼養(yǎng)小貓小狗等寵物。不過,丟失的情況越來越多,相對應(yīng)的丟器卻不多。因此,基于單片機設(shè)計了一款寵物防走失系統(tǒng),當(dāng)寵物距離主人超過一定范圍時,藍(lán)牙模塊會發(fā)出信號,并且根據(jù)信號強度來判斷寵物距離主人的遠(yuǎn)近。此時,如果寵物偏離預(yù)設(shè)區(qū)域,則GPS模塊會啟動實時定位功能,并將寵物位置信息發(fā)送到主人的手機上。同時,報警模塊也會發(fā)出聲音和光線提示,以便主人能夠及時察覺寵物走失的情況。在測試中,模擬了多種寵物走失的情況,包括寵物意外跑出門口、逃離繩索等,結(jié)果顯示該系統(tǒng)能夠準(zhǔn)確地監(jiān)測寵物位置,并及時向主人發(fā)出警報。因此,該系統(tǒng)可以幫助寵物主人及時發(fā)現(xiàn)寵物走失,從而盡快找回寵物,保障寵物的安全。目前,寵物防丟器的研究主要集中于以下幾方面:優(yōu)化傳感器設(shè)計,研究人員正在嘗試開發(fā)新型壓力傳感器、聲音傳感器等,以獲得更準(zhǔn)確的信息,提高定位精度和穩(wěn)定性;結(jié)合機器學(xué)習(xí)和數(shù)據(jù)挖掘等技術(shù),對采集到的數(shù)據(jù)進行分析和處理,以提高設(shè)備的準(zhǔn)確性和穩(wěn)定性;更新網(wǎng)絡(luò)通信技術(shù),隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,研究人員開始嘗試使用物聯(lián)網(wǎng)技術(shù),如NB-IoT、LoRa等,以提高系統(tǒng)的可靠性和覆蓋范圍。同時,在設(shè)計寵物防丟器時必須重視數(shù)據(jù)的安全和隱私保護。因此,研究人員正在探索各種不同的技術(shù),如加密傳輸、身份驗證等,來保護用戶數(shù)據(jù)的安全和隱私。此外,還有部分研究人員致力于設(shè)計更高效的電源管理系統(tǒng),以延長設(shè)備的使用壽命。2.2國外研究現(xiàn)狀FargrowingLiao等人提出了一種寵物防丟可穿戴設(shè)備,該設(shè)計的可穿戴設(shè)備為寵物防丟提供了全新的解決方案。傳統(tǒng)的寵物定位器通常需要用戶手動查找,而且其精確度較低,很難保證準(zhǔn)確性。相比之下,該可穿戴設(shè)備不僅具有更高的精確度,而且還能夠快速響應(yīng)并提供即時的位置信息。這對于那些經(jīng)常帶寵物出門的人來說是非常重要的,特別是在公共場合或者陌生環(huán)境中,這種設(shè)備可以幫助主人及時尋找和控制寵物,避免寵物丟失造成的安全隱患和財產(chǎn)損失。其語音識別功能使得用戶可以更加便捷地控制設(shè)備,不需要進行手動操作,進一步提高了用戶體驗。寵物防丟可穿戴設(shè)備解決了寵物丟失、找回困難的問題,提供了一個高效、準(zhǔn)確的解決方案,然而,寵物防丟定位系統(tǒng)還存在一些問題,比如設(shè)備成本較高、電池壽命短、信號覆蓋范圍有限等。此外,一些用戶對個人隱私和數(shù)據(jù)安全存在擔(dān)憂,因為這些設(shè)備需要收集寵物和主人的位置信息??傮w而言,寵物防丟定位系統(tǒng)在未來有很大的發(fā)展空間,可以通過技術(shù)創(chuàng)新和更好的模塊搭配來解決現(xiàn)有的問題。第3章整體設(shè)計3.1硬件設(shè)計3.1.1單片機最小系統(tǒng)本設(shè)計選擇了STM32F103RCT6單片機作為主控芯片進行設(shè)計。本研究通過對比使用51單片機和該單片機實現(xiàn)GPS數(shù)據(jù)接收的效果,得出了使用該單片機更為適合的結(jié)論。下面將詳細(xì)介紹兩種單片機在GPS數(shù)據(jù)接收方面的差異。由于GPS數(shù)據(jù)需要進行緩存和編碼轉(zhuǎn)換,因此需要較大的內(nèi)存和快速的運算速度。然而,51單片機內(nèi)存較小,只有幾十KB,且運算速度較慢,在處理復(fù)雜任務(wù)時容易出現(xiàn)卡頓、延遲等問題,難以勝任GPS數(shù)據(jù)接收的要求。例如,在處理高精度GPS定位時,由于其需要頻繁地進行位移計算和衛(wèi)星信號解算,51單片機計算速度會變得較慢,從而影響定位精度。相比之下,該單片機擁有更大的程序存儲容量、隨機存儲容量和更快的運行速度,能夠滿足GPS對于緩存和編碼轉(zhuǎn)換的內(nèi)存和速度要求,從而更好地完成GPS數(shù)據(jù)接收的任務(wù)。例如,在處理高精度GPS定位時,該單片機的計算速度更快,能夠更加穩(wěn)定地進行位移計算和衛(wèi)星信號解算,從而提高定位精度。因此,使用該單片機比起51單片機來實現(xiàn)GPS數(shù)據(jù)接收更為適合。尤其是對于需要緩存和編碼轉(zhuǎn)換等操作的本設(shè)計,STM32單片機更加適合。STM32主控芯片的實物圖如圖3-1所示。圖3-1STM32主控芯片圖在市場上,有多種型號的單片機可供選擇,從低端的8位51系列控制器到基于ARM內(nèi)核的32位控制器不等。考慮到單片機需要接入多個模塊,需要存儲多模塊的指令,因此需要單片機擁有足夠多的引腳和更大的儲存容量。同時,在對多個模塊進行信號管理和傳輸時,單片機需要擁有更快的執(zhí)行速度和良好的信號處理性能。基于這些因素,控制系統(tǒng)的主控芯片決定選擇ST公司的STM32F103單片機,因為該芯片性能優(yōu)異,儲存容量大,開發(fā)環(huán)境相對簡單,而且價格便宜。通過在單片機上編寫程序,控制系統(tǒng)可以不僅顯示經(jīng)緯度和連接狀態(tài),還可以實現(xiàn)信息的收發(fā),并支持語音播報和手機綁定等功能,滿足大多數(shù)客戶的需求。為了滿足高性能、易于開發(fā)、低功耗、高可靠性等要求,STM32系列采用了ARMCortex-M內(nèi)核,專門設(shè)計用于嵌入式系統(tǒng)。其中,STM32F1系列是其主要的產(chǎn)品系列之一,它還具備三個十二位十六通道的us級A/D轉(zhuǎn)換器,不同型號的單片機,擁有不同數(shù)量的最多高達(dá)112個端口,且所有端口均可映射到16個外部中斷向量??蛇M行雙采樣和保持信號,以及一個十二位雙通道D/A轉(zhuǎn)換器。研究通過實驗驗證了數(shù)字電路和模擬電路需要接地隔離的結(jié)論,并采用了電阻隔離來解決干擾問題。在測試中,我們使用了一個電子系統(tǒng),其中包含數(shù)字和模擬電路。當(dāng)數(shù)字電路和模擬電路共地時,數(shù)字電路會出現(xiàn)錯誤。為了解決這個問題,我們在數(shù)字電路和模擬電路之間加入了0歐姆電阻。測試結(jié)果表明,在加入電阻后,數(shù)字電路出現(xiàn)的錯誤明顯減少。我們還測試了其他隔離方法,例如磁珠隔離和電感隔離,但發(fā)現(xiàn)電阻隔離是最有效的方法。因此,本研究建議在數(shù)字電路和模擬電路接地時采用電阻隔離來確保電路運行穩(wěn)定。該系列產(chǎn)品還采用ECOPACK封裝。單片機系統(tǒng)及引腳分配電路圖如圖3-2所示。圖3-2單片機最小系統(tǒng)電路圖3.1.2電源系統(tǒng)設(shè)計我們的設(shè)計方案采用了USB供電方式。由于我們的系統(tǒng)包含了感性負(fù)載和數(shù)字設(shè)備兩部分,我們需要分別給它們供電,以避免相互影響。具體地,我們采用了分離電源的設(shè)計,將電源分別給感性負(fù)載和數(shù)字設(shè)備供電,并通過USB接口實現(xiàn)供電。對于感性負(fù)載部分,我們采用了線性穩(wěn)壓器,它能夠提供非常穩(wěn)定的輸出電壓,并且在靜態(tài)工作時無需任何外部元件。這種設(shè)計方式簡單可靠、成本較低,適合傳感器等設(shè)備的供電。對于數(shù)字設(shè)備部分,由于其對功率波動比較敏感,因此我們采用了開關(guān)穩(wěn)壓器進行供電。這種穩(wěn)壓器能夠提供高效、高精度的供電,可以滿足我們的要求。此外,為了保證系統(tǒng)的穩(wěn)定性,我們還采用了輸入輸出濾波電容和TVS二極管等器件,以抑制干擾和過壓等問題。我們的設(shè)計方案采用了USB供電方式,并采用了分離電源的設(shè)計,將電源分別給感性負(fù)載和數(shù)字設(shè)備供電,以保證系統(tǒng)的穩(wěn)定性和可靠性。題。源接口和開關(guān)電路如圖3-3所示。圖3-3電源電路3.1.3顯示電路設(shè)計OLED屏幕因其價格低廉、廣泛應(yīng)用和高性價比而成為常用顯示屏。因此,在本次設(shè)計中我們首選OLED屏幕,選用了OLED12864型號,其分辨率為128*64,屏幕尺寸為0.96寸。這使得它具有良好的便攜性和顯示性能,在本次電路原理圖設(shè)計中,我們將SCL和SDA引腳分別與主控芯片的PB8和PB9引腳相連,以實現(xiàn)各參數(shù)的顯示功能。圖3-4OLED顯示屏實物圖圖3-5顯示模塊電路原理圖通過OLED顯示屏,可以顯示經(jīng)緯度信息和藍(lán)牙連接狀態(tài),幫助我們進行信息的獲取。3.1.4短信模塊電路設(shè)計GSM模塊可實現(xiàn)發(fā)送語音通話、GPRS數(shù)據(jù)傳輸以及短信等功能。SIM800L模塊還集成了藍(lán)牙、GPS定位和LBS基站定位等多種功能。這些功能都符合本設(shè)計的需要。本設(shè)計中,GSM模塊將寵物位置信息傳輸?shù)街魅耸謾C上,以便主人及時發(fā)現(xiàn)寵物走失和進行定位。圖3-6SIM800LSIM模塊由1N4007二極管、插卡SIM板和電容組成,SIM800L是一款功能強大、價格低、體積不大、可以滿足不同需求的四頻GSM/GPRS模塊。電容和二極管用于穩(wěn)壓降壓,以防總體電路電壓過高造成SIM模塊損壞。其原理圖如圖3-7所示,SIM800L的特性包括:1.壓范圍為3.4V至4.4V2.頻段分為GSM850、EGSM900、DCS1800和PCS19003.可以通過AT命令設(shè)置頻段,4.內(nèi)置TCP/IP協(xié)議。圖3-7GSM短信模塊電路設(shè)計通過SIM800L可以實現(xiàn)短信的收發(fā),從而遠(yuǎn)距離的獲取寵物的信息。3.1.5GPS模塊電路設(shè)計本設(shè)計采用以GPS定位為主、基站定位為輔的定位方式,在無法接收到GPS信號時利用基站進行定位。在現(xiàn)實場景中,GPS信號常常因城市建筑物遮擋或室內(nèi)環(huán)境等原因而受干擾或無法接收到。因此,本設(shè)計選擇采用基站定位作為輔助定位方式。例如,當(dāng)車輛行駛在隧道、高樓林立的城市街道和密閉空間中,GPS信號可能會受到影響而無法接收到,這時就需要利用基站定位來確定位置信息。同時,在一些偏遠(yuǎn)地區(qū)或者室內(nèi)場所,由于GPS信號接收不到,只能通過基站定位來實現(xiàn)定位功能。此外,基站定位也可以輔助提高導(dǎo)航系統(tǒng)的定位精度,比如在百度地圖中,除了使用GPS信號進行定位,還可以通過Wi-Fi定位和基站定位來獲得更加準(zhǔn)確的定位結(jié)果。因此,本設(shè)計采用以GPS定位為主、基站定位為輔的定位方式,能夠提高定位的準(zhǔn)確性和適用性,在無法接收到GPS信號時,依然可以保證定位功能的正常使用。圖3-8GPS模塊工作原理圖1978年2月22日,第一顆GPS試驗衛(wèi)星成功進入軌道并開始運行,這標(biāo)志著以導(dǎo)航衛(wèi)星為動態(tài)已知點的無線電導(dǎo)航定位新時代的開創(chuàng)。這些衛(wèi)星在距離地表20200公里的軌道上發(fā)送GPS信號,并由地面控制中心監(jiān)控和控制其運行。在1973年至1979年之間,共發(fā)射了4顆設(shè)計壽命為5年的BlockI試驗衛(wèi)星。GPS定位是通過基于時間算法實現(xiàn)的。衛(wèi)星會不斷地廣播當(dāng)前的時間和位置信息,而利用電磁波的傳輸速度是一定的,接收器可以通過不同衛(wèi)星信號傳遞到的時間差計算出距離不同衛(wèi)星的距離,并根據(jù)這些數(shù)據(jù)綜合推斷出接收器所在的位置信息。這是一種空間的距離交匯原理,需要至少四顆衛(wèi)星才能進行定位,而衛(wèi)星數(shù)量越多,獲得的位置信息就越精確。GPS定位設(shè)備的主要結(jié)構(gòu)包括天線單元和接收單元兩大部分。這里介紹的是使用u-blox公司的VK2828U7GPS定位模塊進行定位。這款模塊具有高靈敏度、低功耗、輕便小巧的特點,并且內(nèi)置電池,可以在掉電情況下保存衛(wèi)星數(shù)據(jù)。GPS衛(wèi)星每顆都會發(fā)射兩個頻率的載波信號,分別是L1(1575.42MHz)和L2(1227.60MHz),而本模塊使用的信號是L1。該模塊提供多種接口:包括1個UART接口、1個USBV2.0全速12Mbit/s接口,定位數(shù)據(jù)更新速率為每秒5次。1個DDC接口和1個SPI接口,同時,該模塊支持NMEA和UBX二進制協(xié)議。串口和I/O電壓均為3V電平,數(shù)字輸入輸出接口可以設(shè)置不同的時鐘頻率。設(shè)有一個外部中斷輸入接口。VK2828U7是一種高精度GPS模塊,大多數(shù)情況下被用于定位和導(dǎo)航應(yīng)用。它采用了全球通用的串行通訊協(xié)議,因此可以很容易地集成到各種電子設(shè)備中。該模塊使用現(xiàn)代化的GPS技術(shù),可以在任何天氣條件下進行準(zhǔn)確的位置測量。VK2828U7的設(shè)計非常簡單,它由一個小型PCB板組成,尺寸大約為25mmx25mm,并且?guī)в幸粋€內(nèi)置的天線。這個小巧的設(shè)計使得它非常適合嵌入式系統(tǒng)、移動設(shè)備或者車輛中。此外,VK2828U7還具有低功耗特性,因此其使用壽命相當(dāng)長,適用于長時間運行的應(yīng)用場景。VK2828U7模塊支持多種定位模式,包括熱啟動、暖啟動和冷啟動。熱啟動模式下,它只需要幾秒鐘就可以重新定位,而在冷啟動模式下,可能需要幾分鐘的時間才能重新定位。此外,它還支持WAAS(廣域增強系統(tǒng))、EGNOS(歐洲地區(qū)導(dǎo)航增強系統(tǒng))和MSAS(日本多功能衛(wèi)星輔助系統(tǒng)),這些系統(tǒng)能夠提供更高的定位精度和可靠性。VK2828U7模塊還支持異步串行通訊協(xié)議,因此可以很容易地與各種微控制器、單片機或其他設(shè)備進行通信。它還具有強大的數(shù)據(jù)處理能力,可以在模塊內(nèi)部計算并輸出經(jīng)緯度、速度、方向等信息。此外,它還支持多個數(shù)據(jù)輸出格式,包括NMEA-0183協(xié)議和二進制協(xié)議。這些輸出格式可以根據(jù)不同的應(yīng)用程序和用戶需求進行選擇和配置。圖3-9VK2828U7定位模塊這款GPS模塊具有小巧的體積和優(yōu)異的性能,其增加的放大電路有利于快速搜星,可配備多種有源天線,同時集成了RF射頻芯片、基帶芯片和核心CPU。模塊自帶SMA接口,并且PPS引腳連接到了狀態(tài)指示燈,常亮表示模塊已開始工作但未實現(xiàn)定位,閃爍則表示已定位成功。該模塊采用RT9193芯片組成電源模塊,提供DDR供電總線調(diào)壓,控制內(nèi)存供電并采用標(biāo)準(zhǔn)的NMEA-0183數(shù)據(jù)輸出格式。利用VK2828U7定位模塊,可實現(xiàn)寵物位置的獲取。GPS模塊電路示意圖見圖3-10。圖3-10GPS模塊接口圖3.1.6藍(lán)牙模塊藍(lán)牙技術(shù)是一種適用于近距離通信的無線通信技術(shù),它的成本較低且具有廣泛的應(yīng)用場景,一般而言,其可靠連接范圍在10米左右。在個人電子設(shè)備和物聯(lián)網(wǎng)方面,藍(lán)牙得到了廣泛的應(yīng)用。本次設(shè)計選用的是HC-06,該產(chǎn)品具有指令簡單、體積小和供電靈活等特點。此外,HC-06采用V2.0藍(lán)牙協(xié)議,在與單片機共用5V電源時,省去了匹配藍(lán)牙模塊電壓而降壓限流的操作。圖3-11HC-06藍(lán)牙模塊在現(xiàn)代智能設(shè)備的普及和物聯(lián)網(wǎng)的發(fā)展下,藍(lán)牙技術(shù)在數(shù)據(jù)傳輸中的應(yīng)用越來越廣泛。其中,HC-06藍(lán)牙模塊作為一種低成本、易于使用的藍(lán)牙模塊,受到了廣泛的關(guān)注和應(yīng)用。HC-06藍(lán)牙模塊具有6個引腳,包括RXD、TXD、VCC、GND和EN。其中,RXD和TXD分別用于串行通信的接收和發(fā)送;VCC和GND則是電源引腳,EN是使能腳,用于控制模塊的工作狀態(tài)。通過這些引腳的連接,HC-06藍(lán)牙模塊可以實現(xiàn)與手機端的數(shù)據(jù)傳輸,并且支持自動連接模式和AT指令設(shè)置模式。在自動連接模式下,當(dāng)手機端與模塊連接時,模塊會自動進行配對和連接,方便用戶的使用;而在AT指令設(shè)置模式下,用戶可以通過串口發(fā)送AT指令,對模塊進行各種參數(shù)的設(shè)置和配置,從而滿足不同場景下的需求。比如將GPS模塊獲取的經(jīng)緯度信息發(fā)送到手機端。下面是藍(lán)牙模塊的電路圖(見圖3-12)。圖3-12藍(lán)牙模塊電路3.1.7語音報警電路語音合成技術(shù)是語音播報系統(tǒng)的核心技術(shù),就是可以理解為我們可以把任意的文字信息用語音的方式表達(dá)出來。它的原理是將我們給的文字和符號的信息進行一些處理和轉(zhuǎn)化后,用模仿人說話的方式表達(dá)出來。如圖3-13所示。圖3-13語音播報模塊電路圖通過WT588D芯片,可以實現(xiàn)語音播報的功能,例如“主人,我在這里”,幫助寵物主人更快準(zhǔn)確的知道寵物的位置。WT588D的實物圖如圖3-14所示。圖3-14WT588D3.2軟件設(shè)計3.2.1軟件介紹Keil5可以幫助用戶更好地進行軟件開發(fā),提高開發(fā)效率,減少出錯概率。以下將舉例說明Keil5在軟件開發(fā)中的實用性。首先,Keil5相比于Keil4有著更快的SWD下載速度。根據(jù)測試,Keil5的SWD下載速度比Keil4快五倍以上,這對于大型項目來說是非常重要的,可以顯著縮短下載時間。其次,在安裝Keil5時需要注意路徑必須使用英文路徑,并且不能與Keil4軟件互相沖突,這也是一個需要特別注意的細(xì)節(jié)。最后,在使用Keil5時需要添加芯片包,這個操作可以通過包管理器來完成,方便且高效??傊?,Keil5是一個非常實用、全面、完整的C語言軟件開發(fā)系統(tǒng),它的出現(xiàn)為程序設(shè)計師們帶來了很多便利。通過Keil5,用戶可以輕松完成代碼編寫、調(diào)試、燒錄等工作,從而更好地實現(xiàn)軟件開發(fā)目標(biāo)。Keil5的軟件界面如圖3-15所示:

圖3-15Keil5軟件界面3.2.2系統(tǒng)主程序主程序的設(shè)計流程第一步進行各模塊初始化,然后開始調(diào)用各個子程序,主程序如下開始各模塊初始化調(diào)用子程序結(jié)束開始各模塊初始化調(diào)用子程序結(jié)束

3.2.3語音識別子程序設(shè)計我們采用LD3320語音識別模塊進行語音指令的識別。包括麥克風(fēng)輸入、音頻輸入和串口輸入等,可以滿足不同場景下的需求。在識別模式下,LD3320語音模塊能夠準(zhǔn)確地識別語音指令,該模塊采用了高性能數(shù)字信號處理器和專業(yè)的語音算法,具有較高的識別準(zhǔn)確率和響應(yīng)速度,并對其進行信息處理后執(zhí)行相應(yīng)的動作控制。具體的語音識別子程序設(shè)計如下圖所示:語音識別指令執(zhí)行指令信息處理Y語音識別指令執(zhí)行指令信息處理Y開始各模塊初始化語音模塊進入識別模式結(jié)束N3.2.4定位模式的程序設(shè)計該系統(tǒng)采用了兩種定位技術(shù):LBS基站定位和GPS衛(wèi)星定位。由于GPS定位在室內(nèi)使用效果不佳,因此在室內(nèi)時需要通過基站定位等其它定位來獲取位置信息。在設(shè)計程序時,系統(tǒng)會首先嘗試使用GPS定位,如果接收到有效的GPS數(shù)據(jù),則使用GPS定位。如果連續(xù)20秒以上未能接收到有效的GPS數(shù)據(jù),則系統(tǒng)會切換到基站定位,并進行定位處理。當(dāng)系統(tǒng)再次接收到有效的GPS數(shù)據(jù)時,重新切換回GPS定位,并重新計時,如此循環(huán)。定位模式處理函數(shù)的程序流程圖如下圖所示:否是解析GPS信息是否接收到GPS信息是否有20秒沒接收到GPS數(shù)據(jù)否是解析GPS信息是否接收到GPS信息是否有20秒沒接收到GPS數(shù)據(jù)解析GPS信息獲取基站定位信息經(jīng)緯度數(shù)據(jù)更新數(shù)據(jù)發(fā)送標(biāo)志置位20秒定時重置是否是有效的GPS信息是是否否3.2.5SIM800L模塊子程序本設(shè)計使用SIM800L模塊和手機進行通信,通過串口與單片機進行通信,并最終實現(xiàn)了傳感器數(shù)據(jù)的發(fā)送和接收。在具體實現(xiàn)過程中,我們將SIM800L模塊連接到無線網(wǎng)絡(luò),此后我們設(shè)定了標(biāo)志位以確定有效數(shù)據(jù)的一致性,并在確認(rèn)校驗正確后進行數(shù)據(jù)解析。隨后我們讀取短信模塊的數(shù)據(jù)并發(fā)送傳感器數(shù)據(jù),在確保數(shù)據(jù)幀正確性后,我們將傳感器數(shù)據(jù)解析并發(fā)送,最終將數(shù)據(jù)顯示在手機端接收。例如,我們在一個智能家居系統(tǒng)中應(yīng)用本設(shè)計。該智能家居系統(tǒng)包括多個傳感器,如溫度、濕度、光線等。我們將SIM800L模塊與單片機相連,并設(shè)置標(biāo)志位以確保有效數(shù)據(jù)的一致性。一旦傳感器數(shù)據(jù)已被讀取并經(jīng)過了適當(dāng)?shù)奶幚?,它將被發(fā)送到SIM800L模塊,經(jīng)過解析并發(fā)送至接收方,即用戶的手機。當(dāng)接收方收到數(shù)據(jù)時,會立即將其解析并顯示出來。通過這種方式,用戶可以及時地監(jiān)測智能家居系統(tǒng)中各種環(huán)境參數(shù)的變化,并做出相應(yīng)的控制和調(diào)整。串口程序初始化流程如圖3-19所示。開始初始化串口工作方式開始初始化串口工作方式設(shè)置波特率使能中斷使能串口結(jié)束3.2.6藍(lán)牙模塊子程序首先,接通設(shè)備的電源,打開手機藍(lán)牙助手。接著,進行藍(lán)牙初始化,與此同時對設(shè)備也進行初始化。在手機端的藍(lán)牙助手中掃描設(shè)備的藍(lán)牙模塊并檢測連接狀態(tài)。搜索到設(shè)備藍(lán)牙模塊,選擇連接。如果未成功連接,可持續(xù)檢測并嘗試連接,直到成功為止。

建立連接數(shù)據(jù)收發(fā)斷開連接開始藍(lán)牙設(shè)備初始化系統(tǒng)初始化監(jiān)測連接建立連接數(shù)據(jù)收發(fā)斷開連接開始藍(lán)牙設(shè)備初始化系統(tǒng)初始化監(jiān)測連接連接上?掃描是否按鍵NNYY當(dāng)前許多電子產(chǎn)品的控制系統(tǒng)往往被禁錮在封閉空間中,數(shù)據(jù)傳輸和交換大多采用自帶的串口。這種模式一旦系統(tǒng)存在問題,很難快速定位問題所在并將信息發(fā)送給用戶。出現(xiàn)錯誤時,僅能依賴系統(tǒng)報警信號來解決問題。因此,如何解決這個問題成為近年來的一大難題。直到藍(lán)牙技術(shù)的出現(xiàn),為解決這一問題提供了一種解決方案。在本設(shè)計中,我們使用藍(lán)牙技術(shù)來實現(xiàn)系統(tǒng)數(shù)據(jù)的傳輸、采集和分析。。由于開發(fā)藍(lán)牙應(yīng)用程序的難度較大,因此我們使用了開源藍(lán)牙助手應(yīng)用程序。一旦兩個終端設(shè)備連接成功,我們就可以使用手機移動端進行數(shù)據(jù)發(fā)送和控制。

圖3-21藍(lán)牙助手app搜索界面圖3-22藍(lán)牙助手調(diào)試界面3.3系統(tǒng)設(shè)計總結(jié)總的來說,整個系統(tǒng)由嵌入式STM32、藍(lán)牙、全球定位系統(tǒng)GPS和全球移動通信系GSM統(tǒng)組成,其設(shè)計主要包括兩部分,底層程序設(shè)計和應(yīng)用界面設(shè)計,系統(tǒng)的整體框架如圖3-23所示。圖3-23系統(tǒng)整體框架目前市場上有基于不同技術(shù)實現(xiàn)的多種防丟方案。其中,基于RFID(RadioFrequencyIdentification)技術(shù)的防丟方案需要搭配RFID標(biāo)簽和讀卡器使用,通過2.4G無線射頻技術(shù)進行傳輸,可以實現(xiàn)較遠(yuǎn)的傳輸距離,最遠(yuǎn)可達(dá)100米左右。該方式的耗電量低,操作相對簡單,但預(yù)警距離無法隨意設(shè)置,需要特定硬件電路才能調(diào)控。另外一種主流的防丟技術(shù)是基于藍(lán)牙(Bluetooth)技術(shù)實現(xiàn)的,適用范圍更廣泛,并且預(yù)警距離可以靈活調(diào)整。藍(lán)牙防丟方案只需與智能手機連接即可使用,無需額外硬件支持,具有操作簡便、成本較低等優(yōu)點。相比于RFID防丟技術(shù),藍(lán)牙防丟技術(shù)的實現(xiàn)難度更低,功能也更為簡單靈活。針對我們的項目,我們決定采用藍(lán)牙技術(shù)來實現(xiàn)防丟功能。我們設(shè)計的防丟模式包括可控預(yù)警距離的防丟報警,在設(shè)備遠(yuǎn)離我們一定距離時會發(fā)出警報提醒;同時,我們還設(shè)計了定位模式,可以隨時通過地圖實時定位、追蹤目標(biāo)的位置。防丟報警不僅會在防丟設(shè)備端發(fā)出,同時也會通過雙向提醒方式通知手機端,更加高效地提高防丟效果。此外,我們還為防丟設(shè)備設(shè)計了一個按鍵,可以主動向指定手機發(fā)送短信請求幫助信息,提高了設(shè)備的求救能力。設(shè)計的基本功能主要體現(xiàn)在以下幾個方面:防丟模式下防丟目標(biāo)在遠(yuǎn)離我們一定距離時能發(fā)會警報提醒,其預(yù)警距離可控的防丟報警;定位模式下我們可以隨時隨地通過地圖實時定位、追蹤到目標(biāo)當(dāng)前位置;防丟報警不僅僅是防丟端的報警,手機端同樣會有提示的雙向提醒,能有效提高防丟效果;防丟端可以通過按鍵主動向指定手機發(fā)送短信請求幫助短信。第4章測試4.1硬件測試根據(jù)我們所學(xué)的知識,我們知道系統(tǒng)中最容易出現(xiàn)問題也是最重要的部分就是硬件電路。因此,在我的焊接過程中,我十分嚴(yán)謹(jǐn)和仔細(xì),每一個動作都小心翼翼地完成,特別是在組裝電源時更是如此。主要有以下四個步驟:第一步:檢查。首先,選擇合適的元器件后,利用萬用表等儀器測量自己所選擇的元器件能否使用。第二步:焊接。在焊接時,要根據(jù)焊接元器件的類型和數(shù)量選擇不同的焊接方式和工具,并掌握正確的焊接技巧和方法。第三步:調(diào)試。在焊接剩下的元器件時,一定要注意芯片的引腳順序、LED的正負(fù)極等問題,完成后再將寫好的hex文件刻錄到單片機中。第四步:整合組裝。當(dāng)所有模塊都焊接完成后,才可以組裝整個系統(tǒng)。在這一步中,我們也不能嫌麻煩,必須再次使用萬用表監(jiān)測所有的功能模塊,檢測它們是否能正常運行。焊接完成的效果圖如圖4-1所示。圖4-1焊接完成效果圖

圖4-2實物正面圖4.2軟件測試這段文字中已經(jīng)確定了本次設(shè)計所需的主控制器是STM32F103C8T6,開發(fā)環(huán)境是KEIL5。根據(jù)4.1內(nèi)容,軟件調(diào)試是在KEIL5MDK平臺上進行的,目的是為了解決在編譯過程中出現(xiàn)的問題。在按照事先制定好的步驟進行操作時,需要先寫好一個小的模塊,然后點擊按鈕進行編譯,逐步完善直至達(dá)到自己所理想的效果。圖4-3KEIL5MDK軟件最終調(diào)試圖通過軟硬件的系統(tǒng)設(shè)計,將最終編寫的程序通過燒錄器下載到單片機,內(nèi)容如圖4-4所示。

圖4-4KEIL5MDK選項調(diào)試圖然后,我們再點擊Debug選項卡,設(shè)置為如圖4-5所示。圖4-5Debug選項調(diào)試圖先將ST-link連接到STM32的調(diào)試接口,設(shè)置完成后,點擊Download按鈕就可以進行下載,下載完成界面效果如圖4-6所示。圖4-6下載調(diào)試結(jié)果圖4.3系統(tǒng)調(diào)試硬硬件整體測試是確保電子系統(tǒng)能夠按照設(shè)計要求進行工作的重要步驟。它通常包括靜態(tài)調(diào)試和動態(tài)調(diào)試兩種主要方法,以確認(rèn)電路板、模塊或整個系統(tǒng)沒有任何設(shè)計或制造缺陷。靜態(tài)調(diào)試主要是通過觀察、測量和檢查來驗證系統(tǒng)的正確性和一致性,其中有四種方式可供選擇。第一種方法是肉眼觀察,它是最簡單但也最基本的方法之一。通過檢查電路板上是否存在明顯的焊接錯誤、短路或開路等問題,可以初步判斷出問題所在。例如,當(dāng)電路板上的元器件安裝不正確時,在肉眼觀察下可以看到引腳不正確插入插槽的情況。第二種方法是使用萬用表,這是一種非常常見的電子測試工具。通過測量電路板各個點的電壓、電流和電阻等參數(shù),可以確定元器件的工作狀態(tài)和電路的連通性。例如,在測量電路板上一個IC芯片的電源電壓時,如果讀數(shù)偏離了預(yù)期值,就可以懷疑是電源線有問題。第三種方法是上電檢查,它適用于那些需要通過電源供電才能正常工作的電路板。在此方法中,電路板被連接到一個穩(wěn)定的電源,并使用萬用表來驗證各個部分的電壓、電流和功率等參數(shù)是否正常。例如,在上電檢查過程中,如果發(fā)現(xiàn)某些元件沒有工作,就可以通過測試確定其是否需要更換。第四種方法是綜合檢查測試,它是一種全面的靜態(tài)調(diào)試方法。它結(jié)合了前三種方法,通過肉眼觀察、使用萬用表和上電檢查等方式,系統(tǒng)地檢查電路板上每個元件的工作狀態(tài),以保證整個系統(tǒng)的完整性和正確性。例如,在綜合檢查測試中,可以通過肉眼觀察并使用萬用表測量電路板上所有元器件的引腳連接,然后再對整個系統(tǒng)進行上電檢查,以驗證所有元器件的工作狀態(tài)。除了靜態(tài)調(diào)試外,動態(tài)調(diào)試也是確保電子系統(tǒng)能夠按照設(shè)計要求進行工作的重要步驟之一。動態(tài)調(diào)試旨在保證元器件正常工作,提高系統(tǒng)性能。例如,通過使用信號發(fā)生器和示波器等儀器來模擬電路板上的實際工作條件,可以驗證電子系統(tǒng)的性能是否符合預(yù)期。4.4實物測試我通過仔細(xì)閱讀說明書并深入研究硬件電路,最終設(shè)計了一張令我滿意的電路板。在整個過程中,我按照先焊接小部件再焊接大部件的流程進行了制作。接著,我進行了上電測試,對各個模塊進行測試,各模塊正常運行,顯示屏顯示了藍(lán)牙狀態(tài)和經(jīng)緯度信息,藍(lán)牙正常連接且語音播報功能正常,斷開藍(lán)牙后手機可以正常通過短信獲取經(jīng)緯度信息,接下來為實物測試的具體步驟。第一步:接通電源按下開關(guān)按鍵,各模塊進入初始狀態(tài)。系統(tǒng)會顯示經(jīng)緯度信息到顯示屏上,如下所示。圖4-7初始狀態(tài)圖4-8搜索設(shè)備第二步:打開手機軟件并開啟藍(lán)牙,點擊軟件右上角連接,系統(tǒng)通過藍(lán)牙并利用藍(lán)牙模塊子程序與手機app進行連接,輸入密碼1234進行連接。圖4-9連接藍(lán)牙第三步:打開“聊天界面”系統(tǒng)會通過VK2828U7定位模塊與GPS子程序獲取經(jīng)緯度,并通過藍(lán)牙連接實時發(fā)送寵物GPS位置信息到手機屏幕。圖4-10獲取經(jīng)緯度信息第四步:通過藍(lán)牙連接利用單片機控制wt588d語音模塊可實現(xiàn)語音播報。當(dāng)按下按鍵后喇叭會播放提前設(shè)置好的語音圖4-11語音播報第五步:當(dāng)寵物跑遠(yuǎn)藍(lán)牙連接斷開,系統(tǒng)通過SIM800L模塊與GSM模塊子程序發(fā)送短信至用戶。圖4-12位置短信總結(jié)本次設(shè)計是關(guān)于一款GPS寵物防丟器,它集成了多個模塊,包括液晶顯示器和SIM800L模塊,它能夠記錄位置,并將位置信息發(fā)送出去,功能非常多樣化。這款防丟器的器件十分復(fù)雜,需要多個模塊和傳感器共同協(xié)作才能正常工作。這也給整個設(shè)計過程帶來了不少的問題。在本次設(shè)計中,首先開展了市場調(diào)查和國內(nèi)外研究,了解了整體情況,針對需求設(shè)計了幾個主要模塊。在選擇器件時,綜合考慮了器件性能、實用性和性價比等因素,進行了多方面的評估。隨后,進行了硬件電路設(shè)計,充分考慮各個模塊之間的影響,并且更加注重基礎(chǔ)設(shè)計,從多個角度防止電路出錯,確保電平穩(wěn)定。在準(zhǔn)備階段,需要深入理解設(shè)計課題,并認(rèn)真研究涉及到的內(nèi)容,以掌握有關(guān)知識。通過查閱文獻來獲取研究資料,同時初步構(gòu)想系統(tǒng)所要實現(xiàn)的功能,如定位、GPS傳感器技術(shù)、短信通訊技術(shù)等,并收集相關(guān)資料作為系統(tǒng)設(shè)計的素材。對軟件的各項功能進行具體分析,以明確開發(fā)目標(biāo)。通過對文獻的深入研究,并運用歸納、演繹、分析、綜合、抽象、概括等方法,了解軟件和硬件開發(fā)的相關(guān)技術(shù),并熟悉系統(tǒng)中各個功能模塊之間的關(guān)系,掌握系統(tǒng)工作的原理和本質(zhì),并確定開發(fā)流程。設(shè)計出一套優(yōu)良的系統(tǒng)并規(guī)范地編寫程序,同時進行選型和查找相關(guān)硬件說明來設(shè)計硬件模塊,逐個確定各個模塊,例如單片機STM32F103C8T6、定位模塊、短信通訊模塊、按鍵輸入模塊、聲光報警模塊。在硬件設(shè)計完成后開始系統(tǒng)軟件部分的設(shè)計,通過模塊化編程進行調(diào)試和修改。設(shè)計出對應(yīng)電路圖進行仿真,并用Keil5軟件編寫設(shè)計程序,并繪制軟件流程圖,進行模擬仿真。在調(diào)試的過程中,要全面檢查系統(tǒng),以防止系統(tǒng)存在隱性的BUG,并及時調(diào)整參數(shù),確保系統(tǒng)的嚴(yán)謹(jǐn)性。最后檢查系統(tǒng)是否能夠按照要求實現(xiàn)控制功能,并整理論文。這樣就能完成一個整體的寵物防丟位置查詢系統(tǒng)設(shè)計,并實現(xiàn)各個功能。通過本次畢業(yè)設(shè)計,我得以充分回顧和應(yīng)用我在大學(xué)四年所學(xué)的知識。在老師和同學(xué)的悉心幫助下,雖然整個過程曲折坎坷,但是最終我們成功地完成了畢業(yè)設(shè)計,令我感到十分興奮和自豪。

參考文獻[1]黃偉成,金亮,盧俊碩,霍文豪,劉德強.基于STM32單片機的智能寵物屋的設(shè)計與實現(xiàn)[J].信息與電腦(理論版),2022,34(10):162-164.[2]曹妍.基于單片機的智能寵物喂食器設(shè)計[J].電子技術(shù),2021,50(09):32-33.[3]劉偉峰,陳廷炫.基于單片機的智能寵物牽引繩設(shè)計[J].電子制作,2021(18):16-18+69.[4]張楠楠,盛賽男.基于單片機的寵物防走失系統(tǒng)設(shè)計[J].周口師范學(xué)院學(xué)報,2021,38(05):36-39.[5]黃建軍,邵中魁,陶仁和,姜耀林.基于單片機的位置實時精調(diào)伺服控制系統(tǒng)開發(fā)[J].精密制造與自動化,2021(03):17-21.[6]洪熠,徐婷,何睿,羅彬,朱蒼璐.基于STM32單片機的智能寵物系統(tǒng)的未來發(fā)展[J].電腦知識與技術(shù),2021,17(14):199-200.[7]龍小麗,楊澤鋒,黃闖,李楷,宮占霞.基于單片機的智能寵物投食系統(tǒng)設(shè)計[J].信息技術(shù)與信息化,2021(04):235-237.[8]饒云,程莉,胡文雅,劉忠成.基于STM32單片機的GPS定位技術(shù)的應(yīng)用[J].計算機與數(shù)字工程,2020,48(04):970-973.[9]張紅月.基于單片機的太陽能智能寵物喂養(yǎng)系統(tǒng)[J].電腦編程技巧與維護,2019(12):142-143+162.[10]亓浩名,王利,武毅等.基于單片機的GSM短信收發(fā)模塊設(shè)計[J].電子測試,2012,No.245(03):63-68.[11]王騏,何嘉斌.單片機控制GSM模塊實現(xiàn)短信收發(fā)的軟件設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2005(01):63-66.[12]孔德力.基于STC52單片機GSM短信上報GPS經(jīng)緯度信息的設(shè)計[J].南方農(nóng)機,2019,50(24):130-131.[13]沈廣沖,禹平.基于GPS和短信技術(shù)的迷路報警器[J].通信電源技術(shù),2010,27(05):66-67.DOI:10.19399/ki.tpt.2010.05.019.[14]AlM.SmartPetFeederSystemandBigDataProcessingtoPredictPetFoodShortage[J].TurkishJournalofComputerandMathematicsEducation(TURCOMAT),2021,12(3):1858-1865.[15]HeoSP,JeongS.InternetofThingsintheBathroom:SmartHealth-MonitoringBidetSystem[J].MathematicalProblemsinEngineering,2021,2021.[16]MMartínez-Zarzuela.CustomIMU-BasedWearableSystemforRobust2.4GHzWirelessHumanBodyPartsOrientationTrackingand3DMovementVisualizationonanAvatar[J].Sensors,2021,21.[17]ZahabyM,GaonjurP,FarajianS.LocationtrackinginGPSusingKalmanFilterthroughSMS[C]//IEEEEUROCON2009.IEEE,2009:1707-1711.[18]KristianY,ArmantoH,FransM.Utilizinggpsandsmsfortrackingandsecuritylockapplicationonandroidbasedphone[J].Procedia-SocialandBehavioralSciences,2012,57:299-305.[19]Al-MazloumA,OmerE,AbdullahMFA.GPSandSMS-basedchildtrackingsystemusingsmartphone[J].InternationalJournalofElectronicsandCommunicationEngineering,2014,7(2):238-241.[20]ReinauKH,HarderH,WeberM.TheSMS–GPS-Tripmethod:Anewmethodforcollectingtripinformationintravelbehaviorresearch[J].TelecommunicationsPolicy,2015,39(3-4):363-373.附錄A原理圖附錄B源程序main主程序#include"sys.h"#include"delay.h"#include"gpio.h"#include"OLED_I2C.h"#include"usart1.h"#include"usart2.h"#include"usart3.h"#include"stmflash.h"#include"wt588d.h"#include"timer.h"#include"GPS.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#defineFLASH_SAVE_ADDR ((u32)0x0800F000) //設(shè)置FLASH保存地址(必須為偶數(shù))#defineSTM32_RX1_BUF Usart1RecBuf#defineSTM32_Rx1Counter RxCounter#defineSTM32_RX1BUFF_SIZE USART1_RXBUFF_SIZE#defineSTM32_RX2_BUF Usart2RecBuf#defineSTM32_Rx2Counter Rx2Counter#defineSTM32_RX2BUFF_SIZE USART2_RXBUFF_SIZE#defineSTM32_RX3_BUF Usart3RecBuf#defineSTM32_Rx3Counter Rx3Counter#defineSTM32_RX3BUFF_SIZE USART3_RXBUFF_SIZE#defineGPS_STR_LEN48GPS_INFO GPS; //GPS信息結(jié)構(gòu)體externunsignedcharrev_start;externunsignedcharrev_stop;externunsignedchargps_flag;u8GPS_rx_flag=0;u8gpsInitFlag=0;u8 sendFlag=0x00; //發(fā)短信標(biāo)志u8 hc05sendFlag=0; //hc05發(fā)送數(shù)據(jù)標(biāo)志u8 shuaxin=0; //刷新標(biāo)志char PhoneNumber[11]; //手機號碼charConversionNum[44]; //手機號碼轉(zhuǎn)碼后存放數(shù)組unsignedchardisplay[32];//顯示緩存數(shù)組voidUsartRxBufClear(u8USARTx)//清除指定串口接收緩存{ switch(USARTx) { case(1):memset(STM32_RX1_BUF,0,STM32_RX1BUFF_SIZE);//清除緩存 STM32_Rx1Counter=0;break; case(2):memset(STM32_RX2_BUF,0,STM32_RX2BUFF_SIZE);//清除緩存 STM32_Rx2Counter=0;break; case(3):memset(STM32_RX3_BUF,0,STM32_RX3BUFF_SIZE);//清除緩存 STM32_Rx3Counter=0;break; default:break; }}voidpc13LED(void)//核心板上的PC13小燈閃爍{ PC13_LED=0; delay_ms(60); PC13_LED=1; delay_ms(60); PC13_LED=0; delay_ms(60); PC13_LED=1; delay_ms(60); PC13_LED=0; delay_ms(60); PC13_LED=1;}voidPhoneNumTranscoding(void)//手機號轉(zhuǎn)碼{ u8i=0; for(i=0;i<11;i++)//發(fā)送中文短信手機號必須轉(zhuǎn)碼,前面需要加上003 { ConversionNum[i*4+0]='0'; ConversionNum[i*4+1]='0'; ConversionNum[i*4+2]='3'; ConversionNum[i*4+3]=PhoneNumber[i];}}voidgsm_atcmd_send(char*at)//GSMAT指令發(fā)送函數(shù){unsignedshortwaittry;//延時變量do{gsm_rev_start=0;//接收開始標(biāo)志清零gsm_rev_okflag=0;//接收完成標(biāo)志清零waittry=0;//延時變量清零uart1_send((unsignedchar*)at,0xFF);//串口發(fā)送內(nèi)容while(waittry++<3000)//進入while延時{if(gsm_rev_okflag==1)//等待GSM返回OK{return;//返回出去}delay_ms(1);}}while(gsm_rev_okflag==0);}voidgsm_init(void)//gsm初始化{gsm_atcmd_send("AT\r\n");//測試用的delay_ms(1000);gsm_atcmd_send("AT+CSCS=\"UCS2\"\r\n");//設(shè)置為unicode編碼delay_ms(1000);gsm_atcmd_send("AT+CMGF=1\r\n");//設(shè)置為文本模式delay_ms(1000);gsm_atcmd_send("AT+CNMI=2,1\r\n");//來短信時提示,并存儲到模塊內(nèi)存 delay_ms(1000); gsm_atcmd_send("AT+CMGD=1,4\r\n");//清除短信 delay_ms(1000); gsm_atcmd_send("AT+CSMP=17,0,2,25\r\n");//設(shè)置短信保留為5分鐘,發(fā)送中文 delay_ms(1000); gsm_atcmd_send("AT+COLP=1\r\n"); delay_ms(1000); gsm_atcmd_send("AT+CLIP=1\r\n");//來電顯示 delay_ms(1000);}/**number為對方手機號*/voidgsm_send_msg(constchar*number,char*content){u8len;unsignedchar gsm_at_txbuf[60];//GSMAT命令緩存區(qū)memset(gsm_at_txbuf,0,60);//緩存清零strncpy((char*)gsm_at_txbuf,"AT+CMGS=\"",9);//將AT+CMGS=\",復(fù)制到gsm_at_txbufmemcpy(gsm_at_txbuf+9,number,44);//將手機號碼復(fù)制到AT+CMGS=\"之后len=strlen((char*)gsm_at_txbuf);//獲取gsm_at_txbuf字符串長度gsm_at_txbuf[len]='"';//AT+CMGS=\"12345678901\"gsm_at_txbuf[len+1]='\r';gsm_at_txbuf[len+2]='\n';//gsm_at_txbuf最終的格式"AT+CMGS=\"手機號碼\"\r\n"uart1_send(gsm_at_txbuf,0xFF);//發(fā)送需要接受短信的手機號碼delay_ms(1000);uart1_send((unsignedchar*)content,0xFF); //發(fā)短信內(nèi)容delay_ms(100);printf("%c",0x1a); //發(fā)送結(jié)束符號delay_ms(10);}voidsim800_send_sms(unsignedchar*content)//sim800發(fā)送短信{ u8send_error=0; u16send_count=0; gsm_rev_okflag=0; OLED_ShowStr(0,6,"SendSms...",2); gsm_send_msg(ConversionNum,(char*)content);//發(fā)送短信 delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 while(gsm_rev_okflag==0)//等待返回OK指令 { if(send_count++>8000) { send_count=0; send_error=1; break; } delay_ms(1); }; gsm_rev_okflag=0; if(send_error==1) OLED_ShowStr(0,6,"SendFail!",2);//顯示發(fā)送超時 else OLED_ShowStr(0,6,"SendOK!",2); UsartRxBufClear(1); delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 delay_ms(2000);//延時2秒 OLED_ShowStr(0,6,"",2);}voidreceive_sim800_com(void) //接收sim800的命令{ char *presult1=0,*presult2=0; char gsm_at_txbuf1[20]; char SmsNum[3],len=0; if(strstr(STM32_RX1_BUF,"83B753D66570636E")!=NULL)//接收到獲取數(shù)據(jù)命令 { UsartRxBufClear(1); //串口1清除緩存 pc13LED();sendFlag=0x02; //發(fā)送短信標(biāo)志 } if(strstr(STM32_RX1_BUF,"+CMTI:")!=NULL)//接收到短信 { presult1=strstr(STM32_RX1_BUF,"+CMTI:"); if(strstr(presult1,"\"SM\",")!=NULL) { presult2=strstr(presult1,"\"SM\","); //+CMTI:"SM",1 delay_ms(50); memset(gsm_at_txbuf1,0,20); //清空發(fā)送緩存區(qū) memset(SmsNum,0,3); //清空緩存區(qū) strncpy(gsm_at_txbuf1,"AT+CMGR=",8);//將AT+CMGR=",復(fù)制到gsm_at_txbuf memcpy(SmsNum,presult2+5,2); memcpy(gsm_at_txbuf1+8,SmsNum,2); len=strlen(gsm_at_txbuf1); //獲取gsm_at_txbuf字符串長度 gsm_at_txbuf1[len]='\r'; gsm_at_txbuf1[len+1]='\n'; //gsm_at_txbuf最終的格式"AT+CMGR=XXX\r\n" uart1_send((unsignedchar*)gsm_at_txbuf1,0xFF); UsartRxBufClear(1); //串口1清除緩存 } }}voidCheckNewMcu(void) //檢查是否是新的單片機,是的話清空存儲區(qū),否則保留{ u8comper_str[6]; STMFLASH_Read(FLASH_SAVE_ADDR+0x10,(u16*)comper_str,5); comper_str[5]='\0'; if(strstr((char*)comper_str,"FDYDZ")==NULL) //新的單片機 { STMFLASH_Write(FLASH_SAVE_ADDR+0x10,(u16*)"FDYDZ",5);//寫入“FDYDZ”,方便下次校驗 delay_ms(50); STMFLASH_Write(FLASH_SAVE_ADDR+0x40,(u16*)"12345078910",11);//存入初始手機號 } STMFLASH_Read(FLASH_SAVE_ADDR+0x40,(u16*)PhoneNumber,11);//讀出手機號 PhoneNumTranscoding(); delay_ms(100);}voidGet_GPS(void)//獲取GPS數(shù)據(jù){ staticu8errorNum=0; staticu8timeCount=0; if(rev_stop==1&&timeCount++>=5) //如果接收完一行 { if(GPS_RMC_Parse(STM32_RX3_BUF,&GPS))//解析GPRMC { errorNum=0; gps_flag=0; rev_stop=0; gpsInitFlag=1; } else { if(errorNum++>=30)//如果數(shù)據(jù)無效超過30次 { errorNum=30; gpsInitFlag=0; } gps_flag=0; rev_stop=0; } timeCount=0; } sprintf((char*)display,"%10.6f",GPS.longitude_Degree); OLED_ShowStr(40,2,(u8*)display,2);//顯示經(jīng)度 sprintf((char*)display,"%10.6f",GPS.latitude_Degree); OLED_ShowStr(40,4,(u8*)display,2);//顯示緯度}voidLongiAndLatiChangeUnicode(char*str1,char*str2)//經(jīng)緯度坐標(biāo)轉(zhuǎn)Unicode碼{ u8i=0,len; char*buf=str1; len=strlen(buf);//獲取字符串長度 for(i=0;i<3;i++)//小數(shù)點前3位 { if(buf[i]!='') {*str2++='0'; *str2++='0'; *str2++='3'; *str2++=buf[i]; } } *str2++='0';*str2++='0';//小數(shù)點 *str2++='2';*str2++='E'; i++; for(;i<len-1;i++)//小數(shù)點后6位 { *str2++='0'; *str2++='0'; *str2++='3'; *str2++=buf[i]; } *str2='\0';}voidtrx_hc05_data(void) //發(fā)送接收藍(lán)牙數(shù)據(jù){ u8i=0; staticu8bobaoFlag=0xFF; staticu16bobao_delay=0; staticu8init_flag=0; char *str1=0,*str2=0; char tempbuf[20]; if(strstr(STM32_RX2_BUF,"設(shè)置手機號碼")!=NULL)//接收到設(shè)置手機號碼指令 { str1=strstr(STM32_RX2_BUF,"設(shè)置手機號碼"); delay_ms(20); str2=str1+12; //把“設(shè)置手機號碼”這幾個字符截去掉 while(*str2>='0'&&*str2<='9') //判斷是不是0到9有效數(shù)字 { tempbuf[i]=*str2; i++; str2++; if(i>11)break; //超出手機號長度范圍,直接退出while循環(huán) delay_ms(10); }tempbuf[i]='\0'; //加上結(jié)尾符 if(strlen(tempbuf)!=11) //手機號碼長度必須是11,不然都是設(shè)置失敗 { Uart2_SendStr("設(shè)置失敗,請核對號碼格式!\r\n");//設(shè)置失敗標(biāo)志 } else { for(i=0;i<11;i++)PhoneNumber[i]=tempbuf[i]; //設(shè)置新的手機號 STMFLASH_Write(FLASH_SAVE_ADDR+0x40,(u16*)PhoneNumber,11); //把手機號存儲一遍 PhoneNumTranscoding(); Uart2_SendStr("手機號碼設(shè)置成功!\r\n"); //設(shè)置成功 } UsartRxBufClear(2); //串口2清除緩存 pc13LED(); hc05sendFlag=0; } if(strstr(STM32_RX2_BUF,"查看手機號碼")!=NULL)//接收到設(shè)置手機號碼指令 { memcpy(tempbuf,PhoneNumber,11); tempbuf[11]='\0'; sprintf((char*)display,"接收短信號碼為:%s\r\n",tempbuf); Uart2_SendStr((char*)display); UsartRxBufClear(2); //串口2清除緩存 pc13LED(); hc05sendFlag=0; } if(strstr(STM32_RX2_BUF,"cf")!=NULL) //接收到吃飯指令 { bobaoFlag=0; bobao_delay=0; UsartRxBufClear(2); //串口2清除緩存 pc13LED(); } if(strstr(STM32_RX2_BUF,"hj")!=NULL) //接收到回家指令 { bobaoFlag=1; bobao_delay=0; UsartRxBufClear(2); //串口2清除緩存 pc13LED(); } if(strstr(STM32_RX2_BUF,"gl")!=NULL) //接收到過來指令 { bobaoFlag=2; bobao_delay=0; UsartRxBufClear(2); //串口2清除緩存 pc13LED(); } if(strstr(STM32_RX2_BUF,"qx")!=NULL) //取消播報指令 { bobaoFlag=0xFF; UsartRxBufClear(2) //串口2清除緩存 pc13LED(); } if(STATE==0)//藍(lán)牙斷開 { if(init_flag==1) { init_flag=0; for(i=0;i<2;i++)OLED_ShowCN(i*16+80,0,i+10,1); //顯示中文:斷開 sendFlag=0x01; bobaoFlag=2; bobao_delay=0; } } else { if(init_flag==0) { init_flag=1; for(i=0;i<2;i++)OLED_ShowCN(i*16+80,0,i+8,1); //顯示中文:連接 bobaoFlag=0xFF; } } if(bobaoFlag!=0xFF) { if(bobao_delay==0)Line_1A(bobaoFlag);//播報內(nèi)容 if(bobao_delay++>=450)bobao_delay=0; } if(hc05sendFlag==1) { hc05sendFlag=0; sprintf((char*)display,"經(jīng)度:%10.6f\r\n",GPS.longitude_Degree); Uart2_SendStr((char*)display); sprintf((char*)display,"緯度:%10.6f\r\n",GPS.latitude_Degree); Uart2_SendStr((char*)display); Uart2_SendStr("\r\n"); }}intmain(void){ unsignedchari; charSEND_BUF[400];//發(fā)送短信緩存 charBUF1[50],BUF2[50];//BUF1為經(jīng)緯度轉(zhuǎn)換前緩存區(qū),BUF2為轉(zhuǎn)換后緩存區(qū) delay_init(); //延時函數(shù)初始化 NVIC_Configuration(); //中斷優(yōu)先級 I2C_Configuration(); //OLEDIIC引腳初始化 GPS_rx_flag=0; CheckNewMcu(); //校驗單片機 WT588D_GPIO_Init(); //wt588d語音播報模塊引腳初始化 STATE_GPIO_Init(); //hc-05STATE引腳初始化 OLED_Init(); //OLED初始化 OLED_CLS(); //清屏 OLED_ShowStr(0,2," GSMInit...",2); uart1_Init(9600); gsm_init();//gsm初始化 usart2_init(9600); USART3_Init(9600); OLED_CLS();//清屏 UsartRxBufClear(1); //串口1清除緩存 UsartRxBufClear(2); //串口2清除緩存 GPS_rx_flag=1; for(i=0;i<4;i++)OLED_ShowCN(i*16,0,i+4,0);//顯示中文:藍(lán)牙狀態(tài) for(i=0;i<2;i++)OLED_ShowCN(i*16,2,i+0,0);//顯示中文:經(jīng)度 for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+2,0);//顯示中文:緯度 OLED_ShowChar(64,0,':',2,0); OLED_ShowChar(32,2,':',2,0); OLED_ShowChar(32,4,':',2,0); for(i=0;i<2;i++)OLED_ShowCN(i*16+80,0,i+10,1); //顯示中文:斷開 TIM2_Init(500-1,7199);//計數(shù)到500為50ms 500*100=50000us=50ms //Tout=((arr+1)*(psc+1))/Tclk; //Tclk:定時器輸入頻率(單位MHZ)//Tout:定時器溢出時間(單位us) while(1) { trx_hc05_data(); //發(fā)送接收藍(lán)牙數(shù)據(jù) receive_sim800_com(); //接收GSM的命令 if(shuaxin==1) //大概500ms執(zhí)行一次以下內(nèi)容 { shuaxin=0; Get_GPS();//獲取經(jīng)緯度 if(sendFlag!=0x00) { /***以下為短信內(nèi)容處理部分,發(fā)送中文短信必須轉(zhuǎn)換為Unicode碼***/ memset(SEND_BUF,0,400); //清空緩沖區(qū) if(sendFlag==0x01) { strncpy(SEND_BUF,"8BF76CE8610FFF0C72D772D75DF27ECF8DD18FDCFF01",44); //請注意,狗狗已經(jīng)跑遠(yuǎn)! } sendFlag=0x00; strcat(SEND_BUF,"7ECF5EA6"); //經(jīng)度 memset(BUF1,0,50); //清空緩沖區(qū) memset(BUF2,0,50); //清空緩沖區(qū) sprintf((char*)BUF1,"%10.6f",GPS.longitude_Degree); LongiAndLatiChangeUnicode(BUF1,BUF2);//將經(jīng)度轉(zhuǎn)碼 strcat(SEND_BUF,BUF2); strcat(SEND_BUF,"FF0C7EAC5EA6");//,緯度 memset(BUF1,0,50); //清空緩沖區(qū) memset(BUF2,0,50); //清空緩沖區(qū) sprintf((char*)BUF1,"%10.6f",GPS.latitude_Degree); LongiAndLatiChangeUnicode(BUF1,BUF2);//將緯度轉(zhuǎn)碼 strcat(SEND_BUF,BUF2); strcat(SEND_BUF,"3002"); sim800_send_sms((unsignedchar*)SEND_BUF);//發(fā)送短信} } delay_ms(10); }}voidTIM2_IRQHandler(void)//定時器2中斷服務(wù)程序{ staticunsignedinttimeCount1=0; staticunsignedinttimeCount2=0; if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET) //檢查指定的TIM中斷發(fā)生與否:TIM中斷源 { TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中斷標(biāo)志位 if(timeCount1++>=10)//500ms { timeCount1=0; shuaxin=1; } if(timeCount2++>=20)//1s { timeCount2=0; hc05sendFlag=1; } }}引腳初始化程序#include"gpio.h"http://///////////////////////////////////////////GPIO設(shè)置/////////////////////////////////////////////voidSTATE_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE); //使能PAC端口時鐘GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //輸入GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13; //端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //IO口速度為50MHzGPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOC,GPIO_Pin_13); //輸出GAO電平}#ifndef__GPIO_H#define__GPIO_H #include"sys.h"#definePC13_LED PCout(13) #defineSTATE PAin(4) voidSTATE_GPIO_Init(void);//初始化#endifOLED液晶初始化程序/**************************************************************************************Description:128*64點陣的OLED顯示屏驅(qū)動文件SD1306驅(qū)動IIC通信方式顯示屏**Others:none;**FunctionList:* 1.voidI2C_Configuration(void)--配置CPU的硬件I2C*2.voidI2C_WriteByte(uint8_taddr,uint8_tdata)--向寄存器地址寫一個byte的數(shù)據(jù)*3.voidWriteCmd(unsignedcharI2C_Command)--寫命令*4.voidWriteDat(unsignedcharI2C_Data)--寫數(shù)據(jù)*5.voidOLED_Init(void)--OLED屏初始化*6.voidOLED_SetPos(unsignedcharx,unsignedchary)--設(shè)置起始點坐標(biāo)*7.voidOLED_Fill(unsignedcharfill_Data)--全屏填充*8.voidOLED_CLS(void)--清屏*9.voidOLED_ON(void)--喚醒*10.voidOLED_OFF(void)--睡眠*11.voidOLED_ShowStr(unsignedcharx,unsignedchary,unsignedcharch[],unsignedcharTextSize)--顯示字符串(字體大小有6*8和8*16兩種)*12.voidOLED_ShowCN(unsignedcharx,unsignedchary,unsignedcharN)--顯示中文(中文需要先取模,然后

溫馨提示

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

評論

0/150

提交評論