基于Stm32 微信小程序設(shè)計(jì)的智能寵物喂養(yǎng)系統(tǒng)_第1頁(yè)
基于Stm32 微信小程序設(shè)計(jì)的智能寵物喂養(yǎng)系統(tǒng)_第2頁(yè)
基于Stm32 微信小程序設(shè)計(jì)的智能寵物喂養(yǎng)系統(tǒng)_第3頁(yè)
基于Stm32 微信小程序設(shè)計(jì)的智能寵物喂養(yǎng)系統(tǒng)_第4頁(yè)
基于Stm32 微信小程序設(shè)計(jì)的智能寵物喂養(yǎng)系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

22摘要隨著生活水平的提高,越來(lái)越多的人選擇養(yǎng)寵物作為生活的一部分。然而,由于工作等各種不可抗因素,有時(shí)人們無(wú)法全天候照顧自己的寵物,這可能導(dǎo)致寵物飼養(yǎng)過(guò)程中的一些問(wèn)題。為了解決現(xiàn)代社會(huì)中寵物照料難題,特別是針對(duì)無(wú)法親自照顧寵物的人群,本畢業(yè)設(shè)計(jì)致力于開(kāi)發(fā)一款智能寵物投喂系統(tǒng),能夠通過(guò)Stm32和微信小程序?qū)崿F(xiàn)遠(yuǎn)程實(shí)時(shí)監(jiān)控寵物健康情況。該系統(tǒng)采用了STM32F103RCT6主控芯片,集成了多項(xiàng)功能,包括食物余量檢測(cè)、寵物水溫檢測(cè)、定時(shí)投喂、手動(dòng)投喂、遠(yuǎn)程投喂和遠(yuǎn)程重量監(jiān)測(cè)等。設(shè)備顯示用的是1.44寸彩屏LCD顯示屏。其中,28BYJ-48步進(jìn)電機(jī)用于投喂功能,ESP8266-WIFI實(shí)現(xiàn)聯(lián)網(wǎng)功能,H711稱重傳感器用于食物余量檢測(cè)。同時(shí),用戶可以根據(jù)寵物的進(jìn)食習(xí)慣在微信小程序上設(shè)定定時(shí)投喂功能,也可以通過(guò)手動(dòng)操作進(jìn)行投喂。通過(guò)ESP8266模塊可以連接騰訊云物聯(lián)網(wǎng)服務(wù)器,用戶可以利用設(shè)計(jì)的微信小程序?qū)崿F(xiàn)遠(yuǎn)程操控和監(jiān)測(cè),同時(shí)可以隨時(shí)調(diào)整投喂時(shí)間和食物量,確保寵物得到及時(shí)照料。這款智能寵物投喂器基于STM32和微信小程序,具有實(shí)時(shí)性高、成本低、能夠遠(yuǎn)程控制等特點(diǎn),具有廣泛的應(yīng)用前景。不僅可以方便忙碌的寵物主人遠(yuǎn)程照顧寵物,還可以應(yīng)用在寵物店等場(chǎng)景,讓店家能夠隨時(shí)關(guān)注到店內(nèi)寵物的情況,提升寵物照料的便利性和效率。這一智能系統(tǒng)的發(fā)展將為寵物主人和寵物店主帶來(lái)更多便利,也將推動(dòng)寵物照料領(lǐng)域的發(fā)展。關(guān)鍵詞:智能寵物系統(tǒng);STM32;微信小程序;遠(yuǎn)程控制;定時(shí)投喂AbstractWiththeimprovementoflivingstandards,moreandmorepeoplechoosetokeeppetsaspartoftheirlife.However,duetovariousirresistiblefactorssuchaswork,sometimespeopleareunabletotakecareoftheirpets24/7,whichcanleadtosomeproblemsinthepetrearingprocess.Inordertosolvetheproblemofpetcareinmodernsociety,especiallyforpeoplewhocan'ttakecareofpetsinperson,thisgraduationprojectiscommittedtodevelopingasmartpetfeedingsystem,whichcanrealizeremotereal-timemonitoringofpethealththroughwechatminiprogram.ThesystemusesSTM32F103RCT6maincontrolchipandintegratesmanyfunctions,includingfoodmargindetection,petwatertemperaturedetection,timingfeeding,manualfeeding,remotefeedingandremoteweightmonitoring.Thedeviceisequippedwitha1.44inchcolorLCDdisplay,28BYJ-48steppermotorforfeedingfunction,ESP8266-WIFIfornetworkingfunction,H711weighingsensorforfoodmargindetection.Userscansetthetimerfeedingfunctionaccordingtothepet'sfeedinghabits,orfeedbymanualoperation.ThroughtheESP8266connectedtoTencentCloudInternetofThingsserver,userscanusethedesignedwechatsmallprogramtoachieveremotecontrolandmonitoring,andcanadjustthefeedingtimeandfoodamountatanytimetoensurethatpetsaretakencareofintime.BasedonSTM32andwechatminiprogram,thissmartpetfeederhasthecharacteristicsofhighreal-time,lowcost,remotecontrol,etc.,andhasawiderangeofapplicationprospects.Notonlycanitbeconvenientforbusypetownerstotakecareoftheirpetsremotely,butitcanalsobeappliedinpetstoresandotherscenarios,sothatthestorecanpayattentiontothesituationofpetsinthestoreatanytime,andimprovetheconvenienceandefficiencyofpetcare.Thedevelopmentofthisintelligentsystemwillbringmoreconveniencetopetownersandpetshopowners,andwillalsopromoteinnovationanddevelopmentinthefieldofpetcare.Keywords:firedetectiondevice;STM32;alarm;sensor目錄TOC\o"1-3"\h\u摘要 IAbstract II第一章緒論 51.1 選題的背景和意義 51.2 國(guó)內(nèi)外研究現(xiàn)狀綜述 51.3 開(kāi)發(fā)語(yǔ)言和工具的選擇 61.4 主要研究工作 61.5 本文安排 6第二章系統(tǒng)總體設(shè)計(jì) 82.1系統(tǒng)需求描述 82.1.1 軟件需求 82.1.2 數(shù)據(jù)傳輸需求 92.2硬件選擇 92.3系統(tǒng)總體框架圖 102.4本章小結(jié) 10第三章系統(tǒng)硬件電路設(shè)計(jì) 113.1 最小系統(tǒng)模塊 113.1.1 STM32F103RCT6概述 113.1.2 STM32F103RCT6的優(yōu)點(diǎn) 123.2 各個(gè)功能模塊構(gòu)成 123.2.1 顯示功能模塊的電路設(shè)計(jì) 123.2.2 投喂功能模塊 133.2.3 重量檢測(cè)模塊 143.2.4 水溫檢測(cè)模塊 143.2.5 ESP8266-WIFI聯(lián)網(wǎng)模塊 153.3 本章小結(jié) 17第四章系統(tǒng)軟件設(shè)計(jì) 184.1 系統(tǒng)軟件設(shè)計(jì)思路及關(guān)鍵環(huán)節(jié)分析 184.2 主程序(關(guān)鍵代碼)設(shè)計(jì) 184.3 各個(gè)功能模塊分析 224.3.1 DS18B20模塊 224.3.2 HX711模塊 234.3.3 Motor(步進(jìn)電機(jī))模塊 244.4 騰訊云平臺(tái)和微信小程序的相關(guān)實(shí)現(xiàn) 254.4.1 MQTT協(xié)議模塊 254.4.2 esp8266聯(lián)網(wǎng)模塊 274.4.3 騰訊云平臺(tái)的主要設(shè)置 284.5 本章小結(jié) 30第五章系統(tǒng)測(cè)試及結(jié)果 315.1 測(cè)試說(shuō)明 315.2 功能測(cè)試結(jié)果 315.2.1 WIFI連接檢測(cè) 315.2.2 食物余量檢測(cè) 325.2.3 水溫檢測(cè) 345.2.4 手動(dòng)投喂測(cè)試 355.2.5 遠(yuǎn)程投喂測(cè)試 355.2.6 遠(yuǎn)程定時(shí)投喂測(cè)試 365.3 本章小結(jié) 37結(jié)論 38參考文獻(xiàn) 39致謝 40 11緒論選題的背景和意義隨著社會(huì)生活水平的不斷提高,人們的工作節(jié)奏和生活壓力逐漸加大,導(dǎo)致無(wú)法有效照料寵物的人群逐漸增多。而寵物作為人們生活中重要的伴侶和家庭成員,其健康和幸福受到了廣泛關(guān)注。為了解決這一現(xiàn)狀,智能投喂器作為一種便捷的解決方案開(kāi)始逐漸流行起來(lái)。然而,傳統(tǒng)的智能投喂器存在諸多問(wèn)題,例如無(wú)法準(zhǔn)確檢測(cè)食物余量、水溫異常、定時(shí)投喂不精準(zhǔn)等,這些問(wèn)題可能會(huì)對(duì)寵物的健康造成影響,甚至導(dǎo)致?tīng)I(yíng)養(yǎng)不良或身體不適。因此,開(kāi)發(fā)一款功能全面、操作精準(zhǔn)可靠的智能投喂器具有十分重要的意義。本項(xiàng)目旨在設(shè)計(jì)一款創(chuàng)新的寵物投喂器,旨在解決傳統(tǒng)智能投喂器存在的問(wèn)題,并提供更全面的功能特性。該投喂器將擁有諸多關(guān)鍵功能,包括食物余量檢測(cè)、水溫監(jiān)測(cè)、定時(shí)投喂、手動(dòng)投喂、遠(yuǎn)程投喂以及遠(yuǎn)程重量監(jiān)測(cè)等功能。采用STM32作為主控芯片,并結(jié)合其他外圍硬件模塊,實(shí)現(xiàn)寵物投喂器的設(shè)計(jì)與實(shí)現(xiàn),為解決寵物照料難題提供全新的解決方案。國(guó)內(nèi)外研究現(xiàn)狀綜述隨著養(yǎng)寵人群的不斷增加,人們對(duì)寵物的喂養(yǎng)問(wèn)題也日益受到關(guān)注。然而,目前市場(chǎng)上的寵物喂食器存在著結(jié)構(gòu)單一、功能不完善等諸多問(wèn)題,難以滿足寵物主人對(duì)寵物身心健康的需求。因此,設(shè)計(jì)一款實(shí)現(xiàn)自動(dòng)化、智能化的寵物喂食器已然成為市場(chǎng)發(fā)展的必然趨勢(shì)。在第二屆中國(guó)北京國(guó)際寵物用品展覽會(huì)上,自動(dòng)喂食器成為了眾多展品的焦點(diǎn)。德國(guó)特瑞士中國(guó)運(yùn)營(yíng)中心和青島特瑞士國(guó)際貿(mào)易有限公司展示了多款自動(dòng)喂食器等寵物用品。展商們一致認(rèn)為,自動(dòng)化和智能化已經(jīng)成為寵物用品市場(chǎng)發(fā)展的主流趨勢(shì),而單片微機(jī)的應(yīng)用更是為“智能化”帶來(lái)了新的高度,使得控制更加靈活、設(shè)備更加精準(zhǔn),并且符合“綠色”電子產(chǎn)品的要求。與國(guó)外相比,中國(guó)在寵物及相關(guān)產(chǎn)業(yè)研究方面仍有待提升。國(guó)外的研究主要集中在寵物飼養(yǎng)、培訓(xùn)、醫(yī)療保健、寵物經(jīng)濟(jì)趨勢(shì)探索以及寵物產(chǎn)品研究等領(lǐng)域,而新興的寵物保險(xiǎn)行業(yè)更是呈現(xiàn)出國(guó)外寵物經(jīng)濟(jì)發(fā)展擬人化的特點(diǎn)。相較之下,中國(guó)的寵物行業(yè)在問(wèn)題的提出、探索的深度和廣度等方面顯得相對(duì)滯后。當(dāng)前,中國(guó)已成為世界寵物用品的重要出口國(guó)之一。然而,市場(chǎng)上現(xiàn)存的寵物喂食器功能單一、價(jià)格高昂、普及率不高等問(wèn)題,難以被中國(guó)大眾消費(fèi)者所接受。因此,本設(shè)計(jì)以單片機(jī)為基礎(chǔ),秉持著對(duì)寵物的人性化關(guān)懷理念,開(kāi)發(fā)了這款寵物自動(dòng)喂食器。單片機(jī)具有體積小、速度快、抗干擾能力強(qiáng)、環(huán)境要求不高、性能可靠以及價(jià)格低廉等優(yōu)點(diǎn),通常只需配備外圍電路就能構(gòu)建出完善的控制系統(tǒng),為單片機(jī)的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ),成為了單片機(jī)發(fā)展歷程中的一個(gè)重要里程碑。對(duì)于寵物喂食器的研究和探索是一個(gè)不斷發(fā)展的過(guò)程。在研究的過(guò)程中,總會(huì)涌現(xiàn)出新的問(wèn)題,需要我們廣泛收集資料并及時(shí)跟進(jìn)最新的發(fā)展動(dòng)態(tài),以便進(jìn)一步與時(shí)俱進(jìn)。開(kāi)發(fā)語(yǔ)言和工具的選擇基于stm32的智能寵物喂養(yǎng)系統(tǒng),我選擇的集成開(kāi)發(fā)環(huán)境在KeilμVision。Keil是一款經(jīng)典的嵌入式開(kāi)發(fā)工具,提供了強(qiáng)大的調(diào)試和仿真功能,對(duì)于初學(xué)者來(lái)說(shuō)比較友好,也是我在大學(xué)期間經(jīng)常使用的嵌入式編程軟件。開(kāi)發(fā)語(yǔ)言我選擇的是C語(yǔ)言,C語(yǔ)言是STM32最常用的編程語(yǔ)言,也是官方推薦的語(yǔ)言之一。使用C語(yǔ)言編寫(xiě)的代碼效率高、資源利用率高,適合嵌入式系統(tǒng)的開(kāi)發(fā)。主要研究工作隨著科技的不斷發(fā)展,寵物喂養(yǎng)的問(wèn)題越來(lái)越受到大家的關(guān)注,然而傳統(tǒng)的智能投喂器的一些簡(jiǎn)單功能已經(jīng)無(wú)法滿足人們的需求。為了解決這個(gè)問(wèn)題,我通過(guò)了解傳統(tǒng)智能寵物喂食系統(tǒng)的不足以及生活中人們的需求,開(kāi)發(fā)一款能夠進(jìn)一步滿足人們需求,給人們喂養(yǎng)寵物提供便利的智能寵物投喂器供人們使用。通過(guò)查閱很多線上和圖書(shū)館的資料,再配合我學(xué)過(guò)的嵌入式相關(guān)課程,以及跟導(dǎo)師同學(xué)們的溝通。我決定采用STM32和小程序來(lái)設(shè)計(jì)一款寵物投喂器。根據(jù)人們的日常需求,該系統(tǒng)要能夠支持食物余量檢測(cè)、寵物水溫檢測(cè)、定時(shí)投喂、手動(dòng)投喂、遠(yuǎn)程投喂、遠(yuǎn)程重量監(jiān)測(cè)等功能。本項(xiàng)目將采用STM32作為主控芯片,結(jié)合其他外圍硬件模塊,來(lái)實(shí)現(xiàn)以上功能。而我認(rèn)為人們最需要的是遠(yuǎn)程寵物投喂功能,這個(gè)功能能夠方便大家出門(mén)旅游,節(jié)假日回家,也能在手機(jī)上給寵物投喂食物,同時(shí)也能通過(guò)聯(lián)網(wǎng)采用ESP8266-WIFI模塊連接騰訊云物聯(lián)網(wǎng)服務(wù)器,能夠遠(yuǎn)程監(jiān)測(cè)投喂器各部分的數(shù)據(jù),讓寵物主人在手機(jī)上能實(shí)時(shí)了解寵物的水溫,食物吃了多少,進(jìn)一步關(guān)注寵物健康。本文安排第一章緒論,首先介紹選題的背景和意義,闡述智能寵物喂食系統(tǒng)的重要性和應(yīng)用場(chǎng)景。隨后,對(duì)國(guó)內(nèi)外相關(guān)研究現(xiàn)狀進(jìn)行綜述,為本文的研究提供理論基礎(chǔ)和參考依據(jù)。其次,詳細(xì)說(shuō)明開(kāi)發(fā)語(yǔ)言和工具的選擇原因,并概括主要的研究工作內(nèi)容。第二章系統(tǒng)需求分析,重點(diǎn)描述智能寵物喂食系統(tǒng)的需求,包括顯示功能、食物余量檢測(cè)功能、水溫檢測(cè)功能、手動(dòng)投喂功能以及遠(yuǎn)程定時(shí)投喂功能。同時(shí),展示系統(tǒng)總體框架圖,全面概括系統(tǒng)的設(shè)計(jì)構(gòu)架。第三章系統(tǒng)硬件電路設(shè)計(jì),詳細(xì)介紹系統(tǒng)的硬件電路設(shè)計(jì),包括最小系統(tǒng)模塊、系統(tǒng)的主要結(jié)構(gòu)及選型,以及各個(gè)功能模塊的電路設(shè)計(jì),如顯示功能模塊、投喂功能模塊、重量檢測(cè)模塊、水溫檢測(cè)模塊和ESP8266-WIFI聯(lián)網(wǎng)模塊的電路設(shè)計(jì)。第四章系統(tǒng)軟件程序詳細(xì)設(shè)計(jì),著重闡述系統(tǒng)軟件程序的詳細(xì)設(shè)計(jì),包括主程序(關(guān)鍵代碼)設(shè)計(jì)和各個(gè)功能主要代碼分析,如DS18B20模塊、HX711模塊、Motor(步進(jìn)電機(jī))模塊等。同時(shí),我們還將探討騰訊云平臺(tái)和微信小程序的相關(guān)實(shí)現(xiàn),包括MQTT協(xié)議模塊、esp8266聯(lián)網(wǎng)模塊、騰訊云平臺(tái)的主要設(shè)置以及微信小程序的頁(yè)面及參數(shù)調(diào)節(jié)顯示。第五章系統(tǒng)測(cè)試與分析,將對(duì)系統(tǒng)進(jìn)行功能測(cè)試,并進(jìn)行詳細(xì)的結(jié)果分析。并對(duì)測(cè)試結(jié)果進(jìn)行全面分析。系統(tǒng)總體設(shè)計(jì)2.1系統(tǒng)需求描述軟件需求系統(tǒng)需要具備以下功能:第一是顯示功能,主控板能夠控制彩屏顯示當(dāng)前的食物余量、水溫和定時(shí)投喂時(shí)間。第二是定時(shí)功能,用戶可根據(jù)寵物的進(jìn)食習(xí)慣設(shè)置定時(shí),主控板通過(guò)定時(shí)器實(shí)現(xiàn)自動(dòng)投喂。第三是投喂功能方面,當(dāng)?shù)竭_(dá)預(yù)設(shè)的投喂時(shí)間,主控板通過(guò)控制電機(jī)旋轉(zhuǎn)實(shí)現(xiàn)定量投喂,同時(shí)用戶也可手動(dòng)按下投喂按鈕進(jìn)行投喂。、第四是監(jiān)測(cè)水溫情況的功能,能夠?qū)崟r(shí)監(jiān)測(cè)寵物飲水水溫的情況,能夠讓用戶實(shí)時(shí)實(shí)地地關(guān)注寵物的飲水溫度,有利于寵物的健康成長(zhǎng)。第五是遠(yuǎn)程投喂功能,通過(guò)ESP8266-WIFI模塊連接騰訊云物聯(lián)網(wǎng)服務(wù)器,用戶可通過(guò)小程序或手機(jī)APP實(shí)現(xiàn)遠(yuǎn)程控制、遠(yuǎn)程監(jiān)測(cè)和更改定時(shí)等功能,以方便在遠(yuǎn)程情況下控制寵物投喂。軟件需求示意圖如下圖2-1所示:圖2-1軟件需求示意圖數(shù)據(jù)傳輸需求該系統(tǒng)有著明確的軟硬件需求后,還需要建立好數(shù)據(jù)傳輸?shù)男枨蟆V骺匕逍枰獙⑺疁兀ㄍㄟ^(guò)DS18B20傳感器獲?。┖褪澄镏亓浚ㄍㄟ^(guò)H711傳感器獲取)的數(shù)據(jù)上傳至騰訊云物聯(lián)網(wǎng)服務(wù)器,以便用戶可以隨時(shí)遠(yuǎn)程監(jiān)測(cè)寵物的飲食環(huán)境。主控板需要能夠接收來(lái)自物聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù),包括投喂開(kāi)關(guān)的狀態(tài)以及定時(shí)投喂的時(shí)間數(shù)據(jù)。這樣可以確保系統(tǒng)能夠根據(jù)用戶的設(shè)定進(jìn)行自動(dòng)化的投喂操作,提供給寵物穩(wěn)定可靠的飲食服務(wù)。這一雙向的數(shù)據(jù)傳輸機(jī)制,為系統(tǒng)的智能化運(yùn)作提供了必要的技術(shù)支持,使用戶能夠更加方便地管理和照顧自己的寵物。2.2硬件選擇主控板采用STM32系列微控制器,負(fù)責(zé)整個(gè)系統(tǒng)的控制和數(shù)據(jù)處理,包括食物余量監(jiān)測(cè)、定時(shí)投喂控制等功能。顯示部分選用1.44寸彩屏作為顯示裝置,連接至主控板,用于顯示當(dāng)前的食物余量、水溫和定時(shí)投喂時(shí)間等信息。投喂部分采用28BYJ-48步進(jìn)電機(jī)作為執(zhí)行器,主控板通過(guò)控制電機(jī)的旋轉(zhuǎn)角度來(lái)實(shí)現(xiàn)定量投喂。食物余量監(jiān)測(cè)則依靠H711稱重傳感器,主控板讀取傳感器輸出的模擬信號(hào),轉(zhuǎn)換為數(shù)字信號(hào),實(shí)現(xiàn)對(duì)食物余量的監(jiān)測(cè)和顯示。溫度傳感器選用DS18B20數(shù)字溫度傳感器,主控板通過(guò)讀取傳感器輸出的數(shù)字信號(hào),獲取水溫?cái)?shù)據(jù),并在顯示屏上顯示或上傳至物聯(lián)網(wǎng)服務(wù)器。聯(lián)網(wǎng)部分采用ESP8266-WIFI模塊與騰訊云物聯(lián)網(wǎng)服務(wù)器連接,實(shí)現(xiàn)遠(yuǎn)程控制、數(shù)據(jù)傳輸和遠(yuǎn)程監(jiān)測(cè)功能。主控板通過(guò)ESP8266-WIFI模塊連接互聯(lián)網(wǎng),并與云服務(wù)器建立穩(wěn)定的通信連接,實(shí)現(xiàn)遠(yuǎn)程控制投喂器的功能,同時(shí)上傳溫度、重量等數(shù)據(jù)至云服務(wù)器,供用戶遠(yuǎn)程監(jiān)測(cè)。2.3系統(tǒng)總體框架圖該系統(tǒng)是一個(gè)基于STM32F103RCT6主控芯片的智能寵物喂養(yǎng)系統(tǒng)。系統(tǒng)通過(guò)各個(gè)傳感器之間的配合實(shí)現(xiàn)水溫監(jiān)測(cè),食物余量監(jiān)測(cè),各種方式投喂等功能,以及對(duì)RTC時(shí)鐘對(duì)系統(tǒng)實(shí)時(shí)控制,1.44寸LCD顯示屏為用戶顯示監(jiān)測(cè)情況,用ESP8266WIFI模塊鏈接實(shí)現(xiàn)用戶能夠遠(yuǎn)程監(jiān)測(cè)和管理寵物情況等等。通過(guò)這些模塊的協(xié)作,系統(tǒng)可以實(shí)現(xiàn)對(duì)寵物喂養(yǎng)的一些關(guān)鍵數(shù)據(jù)采集,為用戶能夠?qū)崟r(shí)觀察寵物健康情況,包括能夠讓用戶遠(yuǎn)程控制等等,為用戶提供全面的監(jiān)控和智能控制體驗(yàn)。系統(tǒng)總體框架圖示意圖如圖2-2所示:圖2-2系統(tǒng)總體框架圖2.4本章小結(jié)這個(gè)智能寵物投喂系統(tǒng),是采用STM32微控制器作為主控制器,實(shí)現(xiàn)食物余量檢測(cè)、寵物水溫檢測(cè)、定時(shí)投喂、手動(dòng)投喂、遠(yuǎn)程投喂、遠(yuǎn)程重量監(jiān)測(cè)等功能。系統(tǒng)包括硬件和軟件兩個(gè)部分,硬件部分包括主控板、顯示部分、投喂部分、重量傳感器、溫度傳感器和聯(lián)網(wǎng)部分,軟件部分包括顯示功能、定時(shí)功能、投喂功能和遠(yuǎn)程投喂功能。系統(tǒng)硬件電路設(shè)計(jì)最小系統(tǒng)模塊STM32F103RCT6概述STM32F103RCT6是STMicroelectronics(意法半導(dǎo)體)推出的一款32位ARMCortex-M3內(nèi)核的微控制器(MCU)。該芯片配備了48KB的SRAM和256KB的Flash存儲(chǔ)器,以及豐富的外設(shè)和接口,包括2個(gè)基本定時(shí)器、4個(gè)通用定時(shí)器、2個(gè)高級(jí)定時(shí)器、51個(gè)通用I/O口、5個(gè)串口、2個(gè)DMA控制器、3個(gè)SPI、2個(gè)I2C、1個(gè)USB、1個(gè)CAN、3個(gè)12位ADC和1個(gè)12位DAC,具有很多的外設(shè)和接口,這些外設(shè)接口的豐富性和靈活性,使得開(kāi)發(fā)者可以方便地與其他設(shè)備進(jìn)行連接和數(shù)據(jù)交換,實(shí)現(xiàn)各種功能。該微控制器以其高性能、低功耗和豐富的外設(shè)接口而聞名,適用于各種嵌入式系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)。還采用了低功耗設(shè)計(jì),包括多種節(jié)能模式和功耗優(yōu)化功能,可以在電池供電等低功耗環(huán)境下工作,并延長(zhǎng)設(shè)備的電池壽命。這使得STM32F103RCT6在無(wú)線傳感器網(wǎng)絡(luò)、智能家居等需要長(zhǎng)時(shí)間運(yùn)行的應(yīng)用中表現(xiàn)出色。原理圖如下圖3-1所示:圖3-1STM32F103RCT6原理圖STM32F103RCT6的優(yōu)點(diǎn)首先,它擁有豐富的外設(shè)和接口,包括定時(shí)器、串口、SPI和I2C接口等,滿足多樣化的應(yīng)用需求。其次,具備高性能處理能力,主頻達(dá)72MHz,快速的Flash讀取能力和DMA控制器的支持提升了系統(tǒng)運(yùn)行效率。另外,采用多種低功耗技術(shù),如動(dòng)態(tài)電壓調(diào)節(jié)和低功耗模式,有效降低功耗,延長(zhǎng)了電池壽命。最后,STM32F103RCT6易于開(kāi)發(fā),支持多種開(kāi)發(fā)工具和編程語(yǔ)言,提供了豐富的開(kāi)發(fā)文檔和示例代碼,為開(kāi)發(fā)人員提供了便利。綜合來(lái)看,使用STM32F103RCT6的STM32微控制器在智能寵物系統(tǒng)中具有高性能、低功耗、豐富的外設(shè)接口、快速開(kāi)發(fā)支持、靈活的擴(kuò)展性以及穩(wěn)定可靠等優(yōu)勢(shì),能夠幫助快速搭建并實(shí)現(xiàn)功能豐富、性能穩(wěn)定的智能寵物系統(tǒng)。各個(gè)功能模塊構(gòu)成顯示功能模塊的電路設(shè)計(jì)在顯示功能模塊,我選擇使用1.44寸TFT-LCD彩屏。1.44寸的TFT-LCD彩屏是一種小尺寸的液晶顯示屏,廣泛應(yīng)用于各種便攜式電子設(shè)備中。這種屏幕尺寸適合于小型設(shè)備,如智能手表、便攜式游戲機(jī)、小型醫(yī)療設(shè)備等。采用TFT-LCD技術(shù),通過(guò)在每個(gè)像素點(diǎn)后添加薄膜晶體管(TFT)來(lái)控制液晶的亮度和顏色,從而提供高分辨率、高對(duì)比度和快速響應(yīng)時(shí)間。1.44寸TFT-LCD彩屏支持彩色顯示,使用RGB(紅、綠、藍(lán))三原色的組合來(lái)生成豐富的顏色和圖像。盡管通常具有相對(duì)較低的分辨率,但足夠顯示簡(jiǎn)單的圖標(biāo)、文字和圖像。此外,它具有良好的視角,能夠在不同角度下保持較好的顯示效果。這種屏幕廣泛應(yīng)用于智能手表、便攜式游戲機(jī)、小型醫(yī)療設(shè)備、智能家居控制面板等各種小型電子設(shè)備中。相比于其他lcd屏,1.44寸的TFT-LCD彩屏具有高分辨率,可以顯示清晰細(xì)致的圖像和文字。它具有色彩鮮艷、顯示效果逼真的特點(diǎn),使顯示內(nèi)容更加生動(dòng)。同時(shí)具有較好的視角特性,觀看角度廣,不易出現(xiàn)色彩失真或亮度不均的情況,可以把投喂時(shí)間和剩余食物重量、水溫等等更能凸顯出來(lái)。這種小尺寸的彩屏適合于像我們智能寵物投喂系統(tǒng)這種小型設(shè)備,具有良好的便攜性和實(shí)用性。原理圖如下圖3-2所示: 圖3-21.44寸TFT-LCD彩屏接口原理圖投喂功能模塊投喂功能模塊的電機(jī)及傳動(dòng)采用4相5線5V的28BYJ-48步進(jìn)電機(jī)搭配ULN2003芯片驅(qū)動(dòng)進(jìn)行控制,主控板通過(guò)控制電機(jī)旋轉(zhuǎn)實(shí)現(xiàn)定量投喂。28BYJ-48步進(jìn)電機(jī)常用于小型家用電器、攝像頭控制、打印機(jī)、掃描儀、3D打印機(jī)、機(jī)器人等領(lǐng)域。由于其低成本和易于控制,也廣泛應(yīng)用于各種DIY電子項(xiàng)目中,如機(jī)械臂、智能車(chē)、舞臺(tái)燈光控制等。28BYJ-48步進(jìn)電機(jī)采用了直流電機(jī)和步進(jìn)電機(jī)的混合結(jié)構(gòu),其轉(zhuǎn)子為永磁式。步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)是通過(guò)不斷切換驅(qū)動(dòng)電流來(lái)實(shí)現(xiàn)的,每次切換一個(gè)步進(jìn),從而使得電機(jī)按照一定的角度旋轉(zhuǎn)。步進(jìn)電機(jī)的控制可以通過(guò)適當(dāng)?shù)尿?qū)動(dòng)器和控制電路實(shí)現(xiàn),可以精確地控制旋轉(zhuǎn)的角度和速度。28BYJ-48步進(jìn)電機(jī)在該智能寵物喂養(yǎng)系統(tǒng)中扮演著重要的角色,其優(yōu)勢(shì)顯而易見(jiàn)。首先,這款步進(jìn)電機(jī)具有精準(zhǔn)控制的特點(diǎn),能夠精確地控制轉(zhuǎn)動(dòng)角度和速度,確保智能喂食系統(tǒng)能夠準(zhǔn)確地分配食物到寵物的飯碗中。其次,作為一種成本較低的電機(jī),28BYJ-48步進(jìn)電機(jī)能夠降低智能寵物喂養(yǎng)系統(tǒng)的制造成本,為寵物主人提供更加經(jīng)濟(jì)實(shí)惠的解決方案。此外,盡管成本低廉,但28BYJ-48步進(jìn)電機(jī)的性能穩(wěn)定可靠,能夠長(zhǎng)時(shí)間穩(wěn)定運(yùn)行,保障智能寵物喂養(yǎng)系統(tǒng)的可靠性和穩(wěn)定性。由于體積小巧,這款電機(jī)非常適用于小型智能寵物喂養(yǎng)系統(tǒng)的設(shè)計(jì),滿足對(duì)尺寸要求較為苛刻的應(yīng)用場(chǎng)景。最后,配合合適的驅(qū)動(dòng)電路和控制算法,28BYJ-48步進(jìn)電機(jī)可以方便地接入智能寵物喂養(yǎng)系統(tǒng)的控制系統(tǒng)中,實(shí)現(xiàn)對(duì)喂食機(jī)構(gòu)的靈活控制,提升系統(tǒng)的智能化程度??傊?,28BYJ-48步進(jìn)電機(jī)作為智能寵物喂養(yǎng)系統(tǒng)的重要組件之一,具有精準(zhǔn)控制、低成本、可靠性、適用性和易于控制等優(yōu)勢(shì),為智能寵物喂養(yǎng)系統(tǒng)的設(shè)計(jì)和制造提供了可靠的動(dòng)力驅(qū)動(dòng)解決方案。外部結(jié)構(gòu)示意圖如下圖3-3所示:圖3-328BYJ-48步進(jìn)電機(jī)外部結(jié)構(gòu)示意圖重量檢測(cè)模塊本智能寵物喂養(yǎng)系統(tǒng)的采用H711稱重傳感器進(jìn)行檢測(cè),通過(guò)主控板讀取重量值,實(shí)現(xiàn)食物余量監(jiān)測(cè)。HX711是一款集成了模擬前端和數(shù)字信號(hào)處理功能的高精度電子稱重傳感器專用放大器,主要應(yīng)用于各類(lèi)工業(yè)、商業(yè)和消費(fèi)類(lèi)電子稱重設(shè)備中。HX711傳感器具備高精度的模擬信號(hào)放大和數(shù)字化轉(zhuǎn)換功能,確保對(duì)食物重量的準(zhǔn)確測(cè)量,從而保證寵物的飲食管理更加精準(zhǔn)。HX711傳感器與STM32微控制器的低功耗特性相輔相成,使得整個(gè)系統(tǒng)在長(zhǎng)時(shí)間運(yùn)行時(shí)能夠保持較低的能耗,延長(zhǎng)了系統(tǒng)的使用壽命。此外,HX711傳感器具有靈活的數(shù)字接口,便于與STM32微控制器集成,使系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)更加簡(jiǎn)便高效。最重要的是,HX711傳感器經(jīng)過(guò)嚴(yán)格的測(cè)試驗(yàn)證,具備穩(wěn)定可靠的性能,在各種環(huán)境條件下都能夠保持準(zhǔn)確的稱重結(jié)果,為智能寵物投喂系統(tǒng)的穩(wěn)定運(yùn)行提供了有力保障。綜上所述,HX711傳感器在精度、功耗、接口和穩(wěn)定性等方面與STM32微控制器完美契合,成為智能寵物投喂系統(tǒng)中不可或缺的關(guān)鍵組件。原理圖如下圖3-4所示:圖3-4HX711原理圖水溫檢測(cè)模塊在智能寵物喂養(yǎng)系統(tǒng)中,水溫監(jiān)測(cè)是至關(guān)重要的環(huán)節(jié)之一。為了確保寵物在飲水過(guò)程中能夠享受到舒適的環(huán)境,我們選擇了DS18B20數(shù)字溫度傳感器作為系統(tǒng)的水溫監(jiān)測(cè)裝置,在主控板讀取溫度值,實(shí)現(xiàn)水溫監(jiān)測(cè)。DS18B20采用了單總線接口(One-Wire)通信協(xié)議,這使得它在連接時(shí)只需要一根信號(hào)線,從而簡(jiǎn)化了系統(tǒng)設(shè)計(jì)和布線工作。它能夠直接輸出數(shù)字信號(hào),不需要外部模數(shù)轉(zhuǎn)換器(ADC),因此具有較高的抗干擾能力和穩(wěn)定性。DS18B20采用了內(nèi)部集成的溫度傳感器和模擬-數(shù)字轉(zhuǎn)換器(ADC),能夠?qū)崿F(xiàn)對(duì)環(huán)境溫度的高精度測(cè)量。此外,DS18B20還具有多種封裝形式,如TO-92、TO-220等,適用于不同的應(yīng)用場(chǎng)景。DS18B20以其出色的性能和穩(wěn)定的品質(zhì),成為了智能寵物喂養(yǎng)系統(tǒng)的理想選擇。首先,它具備高精度的溫度測(cè)量能力,能夠準(zhǔn)確地監(jiān)測(cè)水溫的變化,確保寵物飲水始終處于適宜的溫度范圍內(nèi),讓它們?cè)诤人畷r(shí)感受到舒適與安心。其次,DS18B20采用數(shù)字信號(hào)輸出溫度數(shù)據(jù),與系統(tǒng)的數(shù)字控制器完美契合,實(shí)現(xiàn)了數(shù)據(jù)的快速傳輸和處理,為智能寵物喂養(yǎng)系統(tǒng)的智能化提供了堅(jiān)實(shí)的基礎(chǔ)。而且,DS18B20采用單線通信協(xié)議,只需一個(gè)數(shù)字引腳就能完成數(shù)據(jù)傳輸,極大地簡(jiǎn)化了系統(tǒng)的布線和連接,為系統(tǒng)的設(shè)計(jì)和安裝提供了更大的靈活性和便利性。而且,部分型號(hào)的DS18B20還具有防水設(shè)計(jì),能夠穩(wěn)定可靠地工作在潮濕的環(huán)境中,不受水溫變化的影響,進(jìn)一步增強(qiáng)了系統(tǒng)的穩(wěn)定性和可靠性。在智能寵物喂養(yǎng)系統(tǒng)中,我們始終將寵物的健康和舒適放在首位,而DS18B20數(shù)字溫度傳感器的選用正是出于對(duì)寵物健康和舒適的關(guān)心與考慮。通過(guò)監(jiān)測(cè)和控制水溫,我們能夠?yàn)閷櫸锾峁┮粋€(gè)安全、舒適的飲水環(huán)境,讓它們?cè)诤人畷r(shí)感受到溫暖與關(guān)愛(ài)。原理圖如下圖3-5所示:圖3-5DS18B20原理圖ESP8266-WIFI聯(lián)網(wǎng)模塊該系統(tǒng)采用ESP8266-WIFI模塊連接騰訊云物聯(lián)網(wǎng)服務(wù)器,實(shí)現(xiàn)遠(yuǎn)程控制、數(shù)據(jù)傳輸和遠(yuǎn)程監(jiān)測(cè)。ESP8266是一款由樂(lè)鑫科技(EspressifSystems)推出的低成本、高性能的Wi-Fi芯片,被廣泛應(yīng)用于物聯(lián)網(wǎng)(IoT)設(shè)備和嵌入式系統(tǒng)中。它集成了處理器、Wi-Fi模塊和內(nèi)存,具有強(qiáng)大的處理能力和豐富的通信功能。ESP8266-WIFI模塊基于ESP8266芯片,將其集成在一個(gè)小型模塊中,方便嵌入式系統(tǒng)的設(shè)計(jì)和應(yīng)用。它支持802.11b/g/nWi-Fi標(biāo)準(zhǔn),能夠在2.4GHz頻段進(jìn)行通信,并提供了豐富的通信接口(如UART、SPI、I2C等),方便與其他設(shè)備進(jìn)行連接和數(shù)據(jù)交換。ESP8266-WIFI模塊在智能寵物喂養(yǎng)系統(tǒng)中的應(yīng)用為其帶來(lái)了多方面的優(yōu)勢(shì),極大地提升了系統(tǒng)的功能性和便利性。首先,ESP8266-WIFI模塊實(shí)現(xiàn)了遠(yuǎn)程控制和監(jiān)控功能。寵物主人無(wú)需身處喂養(yǎng)系統(tǒng)附近,只需通過(guò)微信小程序,便可隨時(shí)隨地監(jiān)控寵物的剩余食物情況和水溫情況。這種遠(yuǎn)程控制和監(jiān)控功能,使得寵物主人可以更加方便地管理寵物的喂養(yǎng),并且能夠及時(shí)發(fā)現(xiàn)并解決問(wèn)題,給寵物提供更加貼心的照顧。其次,ESP8266-WIFI模塊實(shí)現(xiàn)了實(shí)時(shí)數(shù)據(jù)傳輸。監(jiān)測(cè)到的數(shù)據(jù)可以即時(shí)傳輸?shù)竭h(yuǎn)程服務(wù)器上,寵物主人可以隨時(shí)獲取到最新的信息。這樣一來(lái),寵物主人可以更加及時(shí)地了解到寵物的狀態(tài)和需求,為寵物提供更加精準(zhǔn)的喂養(yǎng)和管理。另外,ESP8266-WIFI模塊的應(yīng)用還實(shí)現(xiàn)了智能化的控制功能。系統(tǒng)可以根據(jù)實(shí)時(shí)監(jiān)測(cè)到的數(shù)據(jù),根據(jù)寵物主人的需求,遠(yuǎn)程調(diào)節(jié)投喂時(shí)間間隔或者直接點(diǎn)擊即可實(shí)時(shí)投喂,保證寵物得到喂養(yǎng)。這種智能化的控制功能,不僅方便了寵物主人,還能夠?yàn)閷櫸锾峁└淤N心的喂養(yǎng)管理??傊?,它極大地提升了智能寵物喂養(yǎng)系統(tǒng)的功能性和便利性,為寵物主人提供了更加全面和貼心的喂養(yǎng)管理解決方案。原理圖如下圖3-6所示:圖3-6ESP8266原理圖本章小結(jié)在本章節(jié)中,介紹了基于STM32+微信小程序的智能寵物喂養(yǎng)系統(tǒng)的硬件構(gòu)成以及各個(gè)模塊的介紹,包括了STM32F103RCT6、1.44寸的TFT-LCD彩屏顯示模塊、28BYJ-48步進(jìn)電機(jī)投喂功能模塊、H711稱重傳感器食物余量監(jiān)測(cè)模塊、DS18B20數(shù)字溫度傳感器水溫監(jiān)測(cè)模塊以及ESP8266-WIFI聯(lián)網(wǎng)模塊。采用最小系統(tǒng)模塊STM32F103RCT6微控制器作為本系統(tǒng)的核心控制器,實(shí)現(xiàn)整個(gè)系統(tǒng)的數(shù)據(jù)處理和控制運(yùn)行。1.44寸的TFT-LCD彩屏通過(guò)主控板控制顯示當(dāng)前的食物余量、水溫和定時(shí)投喂時(shí)間。采用28BYJ-48步進(jìn)電機(jī)控制投喂功能模塊,主控板通過(guò)控制電機(jī)旋轉(zhuǎn)實(shí)現(xiàn)定量投喂。采用H711稱重傳感器檢測(cè)寵物剩余食物余量,通過(guò)主控板讀取重量值,實(shí)現(xiàn)食物余量監(jiān)測(cè)。采用DS18B20數(shù)字溫度傳感器進(jìn)行檢測(cè),主控板讀取溫度值,實(shí)現(xiàn)水溫監(jiān)測(cè)。采用ESP8266-WIFI模塊連接騰訊云物聯(lián)網(wǎng)服務(wù)器,實(shí)現(xiàn)遠(yuǎn)程控制、數(shù)據(jù)傳輸和遠(yuǎn)程監(jiān)測(cè)。本章介紹了整個(gè)智能寵物喂養(yǎng)系統(tǒng)的硬件選擇以及各個(gè)模塊的功能和優(yōu)勢(shì),為軟件設(shè)計(jì)和開(kāi)發(fā)提供了便利。系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì)思路及關(guān)鍵環(huán)節(jié)分析基于STM32的智能寵物喂養(yǎng)系統(tǒng)不僅需要硬件結(jié)構(gòu)支持,同樣少不了軟件系統(tǒng)的設(shè)計(jì)。整個(gè)軟件系統(tǒng)設(shè)計(jì)采用的是模塊化的方式進(jìn)行對(duì)應(yīng)各個(gè)部分模塊功能的設(shè)計(jì)。模塊化編程方法能夠使得代碼結(jié)構(gòu)清晰、易于理解,每個(gè)功能模塊都能夠獨(dú)立運(yùn)行和測(cè)試,有助于降低代碼的復(fù)雜度,提高可讀性和可維護(hù)性。同時(shí),也能夠降低軟件開(kāi)發(fā)過(guò)程中的錯(cuò)誤率,減少調(diào)試和修復(fù)的時(shí)間,確保項(xiàng)目的穩(wěn)定性和可靠性。該系統(tǒng)最重要的環(huán)節(jié)是實(shí)現(xiàn)遠(yuǎn)程的控制和監(jiān)測(cè),那么就其中的關(guān)鍵就是需要設(shè)計(jì)好遠(yuǎn)程的數(shù)據(jù)傳輸。使用的WIFI模塊為ESP8266,首先就需要對(duì)其進(jìn)行初始化,然后判斷和串口之間能否連接成功。連接成功就將8266設(shè)置為STA模式,然后發(fā)送所要連接的WIFI名和密碼。再建立TCP連接并進(jìn)入透?jìng)髂J?,通過(guò)發(fā)送設(shè)備的序列號(hào)進(jìn)行數(shù)據(jù)的傳輸。傳輸數(shù)據(jù)的流程圖如下圖4-1所示:圖4-1傳輸數(shù)據(jù)流程圖主程序(關(guān)鍵代碼)設(shè)計(jì)首先是需要先對(duì)物聯(lián)網(wǎng)設(shè)備連接到MQTT服務(wù)器進(jìn)行配置,具體包括:MQTT客戶端ID(MQTT_ClientID)、MQTT服務(wù)器的用戶名和密碼(MQTT_UserName和MQTT_PassWord)、訂閱與發(fā)布的主題(SET_TOPIC和POST_TOPIC)、路由器的Wi-Fi名稱和密碼(CONNECT_WIFI和CONNECT_PASS)、MQTT服務(wù)器的IP地址和端口號(hào)(CONNECT_SERVER_IP和CONNECT_SERVER_PORT)。通過(guò)這些信息,物聯(lián)網(wǎng)設(shè)備可以連接到MQTT服務(wù)器,并進(jìn)行數(shù)據(jù)的訂閱和發(fā)布。配置如下所示://物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息#defineMQTT_ClientID"O3SQYCIO6LFeeding1"#defineMQTT_UserName"O3SQYCIO6LFeeding1;12010126;NJLZZ;2654791169"#defineMQTT_PassWord"f96e9843acbadc07256d077fae501de225dbc2f3098ad72dad8430409588fa80;hmacsha256"http://訂閱與發(fā)布的主題#defineSET_TOPIC"$thing/down/property/O3SQYCIO6L/Feeding1"#definePOST_TOPIC"$thing/up/property/O3SQYCIO6L/Feeding1"http://設(shè)置連接的路由器信息#defineCONNECT_WIFI"yylx"http://路由器名稱#defineCONNECT_PASS"20020611"http://路由器密碼#defineCONNECT_SERVER_IP"175.178.30.200"http://服務(wù)器IP地址#defineCONNECT_SERVER_PORT1883//服務(wù)器端口號(hào)經(jīng)過(guò)初始化、中斷函數(shù)后,要進(jìn)一步把所有配置好的傳感器用起來(lái),完成我們基于stm32+微信小程序的智能寵物喂養(yǎng)系統(tǒng),根據(jù)需求,一步步實(shí)現(xiàn)智能寵物喂養(yǎng)系統(tǒng)的各個(gè)模塊功能。按鍵控制(手動(dòng)投喂)的關(guān)鍵代碼如下:if(key==2){printf("啟動(dòng)步進(jìn)電機(jī)投喂食物1...\r\n");Motorcw_ring(1,300);//電機(jī)正轉(zhuǎn)1圈—手動(dòng)投喂糧食}elseif(key==1){printf("稱重傳感器校準(zhǔn)...\r\n");//稱重傳感器校準(zhǔn)Get_Maopi(); //稱毛皮重量delay_ms(1000);delay_ms(1000);Get_Maopi(); //重新獲取毛皮重量}這段代碼實(shí)現(xiàn)了對(duì)按鍵的控制,并根據(jù)不同的按鍵值執(zhí)行相應(yīng)的操作,例如啟動(dòng)電機(jī)投喂食物或進(jìn)行稱重傳感器的校準(zhǔn)。要確保這段代碼正常工作,你需要保證按鍵掃描函數(shù)KEY_Scan()正確實(shí)現(xiàn),并且針對(duì)不同的按鍵值,執(zhí)行相應(yīng)的功能函數(shù)。實(shí)現(xiàn)定時(shí)投喂的關(guān)鍵代碼如下所示://下次投喂時(shí)間if(time_food_sec<=0){printf("時(shí)間到達(dá),開(kāi)始自動(dòng)投喂食物.\r\n");Motorcw_ring(1,300);//電機(jī)正轉(zhuǎn)1圈模擬投喂食物time_food_sec=time_food*60;}p=format_time(time_food_sec);//顯示Gui_DrawFont_GBK16(60,16*5+2,WHITE,0,(u8*)p);這段代碼中的if(time_food_sec<=0)這個(gè)條件判斷是否達(dá)到了設(shè)定的投喂時(shí)間。time_food_sec是一個(gè)倒計(jì)時(shí)變量,當(dāng)它減至0或以下時(shí),表示達(dá)到了再次投喂的時(shí)間。在這個(gè)條件滿足的情況下,程序會(huì)通過(guò)printf函數(shù)輸出一條消息,提示已到達(dá)預(yù)定時(shí)間,開(kāi)始自動(dòng)投喂食物。接著調(diào)用Motorcw_ring()函數(shù)來(lái)啟動(dòng)電機(jī),而time_food_sec=time_food*60的意思是在完成投喂后,重置time_food_sec計(jì)時(shí)器,time_food是下一次投喂前需要等待的分鐘數(shù),乘以60轉(zhuǎn)換為秒數(shù)。format_time()是通過(guò)使用sprintf函數(shù)將小時(shí)、分鐘和秒格式化為HH:MM:SS的字符串,并將其存儲(chǔ)在result數(shù)組中,最后將其作為返回值返回。最后在設(shè)備的顯示屏上顯示下一次投喂的剩余時(shí)間。LCD實(shí)時(shí)顯示數(shù)據(jù)的關(guān)鍵代碼如下所示://讀取飲水溫度DS18B20=DS18B20_Get_Temp();//得到溫度的整數(shù)部分temp_ds18b20=DS18B20>>4;//寵物飲水溫度sprintf(DS18B20_str,"%d.%d",DS18B20>>4,DS18B20&0xF);Gui_DrawFont_GBK16(72,16*4+2,WHITE,0,(u8*)DS18B20_str);//獲取稱重傳感器反饋的重量Get_Weight();printf("剩余食物重量=%dg\r\n",Weight_Shiwu);//打印//剩余食物重量sprintf(tmp_buff,"%4dg",Weight_Shiwu);Gui_DrawFont_GBK16(72,16*2+2,WHITE,0,(u8*)tmp_buff);//投喂間隔sprintf(tmp_buff,"%4d",time_food);Gui_DrawFont_GBK16(72,16*3+2,WHITE,0,(u8*)tmp_buff);上面代碼通過(guò)調(diào)用DS18B20_Get_Temp()函數(shù)獲取飲水器的溫度,調(diào)用Get_Weight()函數(shù)獲取稱重傳感器反饋的食物重量數(shù)據(jù),然后將溫度、食物余量值顯示在屏幕上,同時(shí)將設(shè)定的投喂間隔時(shí)間顯示在屏幕上,以便用戶了解下一次投喂的時(shí)間間隔。上傳云端數(shù)據(jù)的代碼如下所示:sprintf(mqtt_buff,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"DS18B20\":%d,\"weight\":%d,\"time\":%d,\"button\":%d}}",temp_ds18b20,Weight_Shiwu,time_food,button);MQTT_PublishData(POST_TOPIC,mqtt_buff,0);printf("向云端更新數(shù)據(jù).\r\n");這段代碼使用sprintf函數(shù)將要發(fā)布到MQTT主題的數(shù)據(jù)格式化為JSON字符串,并將其存儲(chǔ)到mqtt_buff緩沖區(qū)中。然后使用MQTT_PublishData函數(shù)將數(shù)據(jù)發(fā)布到POST_TOPIC主題,同時(shí)將其以0的QoS級(jí)別發(fā)布(即最多一次投遞)。最后,通過(guò)printf函數(shù)輸出一條消息,表示向云端更新數(shù)據(jù)。接收WIFI返回的數(shù)據(jù)的一段關(guān)鍵代碼如下所示:elseif(strstr((char*)&USART2_RX_BUFFER[5],"\"time\":")){char*p=strstr((char*)&USART2_RX_BUFFER[5],"\"time\":");//轉(zhuǎn)為整數(shù)time_food=atoi(p+7);time_food_sec=time_food*60;//轉(zhuǎn)為秒單位//最小時(shí)間間隔為1分鐘if(time_food==0)time_food=1;printf("設(shè)置投喂食物的定時(shí)間隔:%d\r\n",time_food);}這段代碼的作用是解析串口接收緩沖區(qū)中的數(shù)據(jù),查找是否包含字符串"\"time\":",如果找到了,則將其后面的數(shù)字部分解析為投喂食物的定時(shí)間隔,并進(jìn)行相應(yīng)的設(shè)置。time_food=atoi(p+7)是將指針p向后移動(dòng)7個(gè)字符(即跳過(guò)"\"time\":"部分),然后使用atoi函數(shù)將其后面的數(shù)字部分轉(zhuǎn)換為整數(shù),表示投喂食物的定時(shí)間隔。后面加了一段如果投喂食物的定時(shí)間隔為0,則將其設(shè)置為1分鐘,以避免出現(xiàn)不合理的情況。各個(gè)功能模塊分析DS18B20模塊DS18B20溫度傳感器通信模塊主要是為了從DS18B20溫度傳感器中獲取我們需要的溫度值,因此我們先寫(xiě)了幾個(gè)基本操作的函數(shù),分別為DS18B20_Rst(void):復(fù)位DS18B20傳感器、DS18B20_Check(void):檢查DS18B20是否存在、DS18B20_Read_Bit(void):從DS18B20讀取一個(gè)位、DS18B20_Read_Byte(void):從DS18B20讀取一個(gè)字節(jié)、DS18B20_Write_Byte(u8dat):向DS18B20寫(xiě)入一個(gè)字節(jié)、DS18B20_Start(void):啟動(dòng)溫度轉(zhuǎn)換。接著寫(xiě)初始化函數(shù)DS18B20_Init(void)對(duì)DS18B20傳感器進(jìn)行初始化,并檢測(cè)其是否存在。最后編寫(xiě)關(guān)鍵函數(shù)DS18B20_Get_Temp(void),該函數(shù)的功能是從DS18B20獲取溫度值。關(guān)鍵代碼如下所示:DS18B20_Write_Byte(0xbe); //convert TL=DS18B20_Read_Byte(); //LSBTH=DS18B20_Read_Byte(); //MSB if(TH>7){TH=~TH;TL=~TL;temp=0; //溫度為負(fù)}elsetemp=1; //溫度為正 tem=TH; //獲得高八位tem<<=8;tem+=TL; //獲得底八位tem=(float)tem*0.625; //轉(zhuǎn)換 if(temp)returntem; //返回溫度值 elsereturn-tem;該函數(shù)在一開(kāi)始調(diào)用了開(kāi)始溫度轉(zhuǎn)換的函數(shù),并執(zhí)行了相應(yīng)的復(fù)位和檢查操作,以確保DS18B20溫度傳感器處于可用狀態(tài)。接著,在函數(shù)DS18B20_Write_Byte(0xcc)中,發(fā)送了跳過(guò)ROM的命令,因?yàn)樵趩慰偩€模式下只有一個(gè)設(shè)備,可以直接跳過(guò)識(shí)別地址的步驟,提高了讀取效率。隨后,在函數(shù)DS18B20_Write_Byte(0xbe)中,發(fā)送了讀取溫度的命令。通過(guò)函數(shù)DS18B20_Read_Byte()分別讀取了溫度的低字節(jié)和高字節(jié),并根據(jù)高字節(jié)的最高位判斷了溫度的正負(fù)。最后,根據(jù)讀取到的溫度值,進(jìn)行了轉(zhuǎn)換和處理,計(jì)算出了實(shí)際的溫度值,并以浮點(diǎn)數(shù)的形式返回。HX711模塊HX711模塊主要是為了獲取食物的稱重功能,要通過(guò)合理地配置引腳、實(shí)現(xiàn)通信協(xié)議和數(shù)據(jù)處理,STM32單片機(jī)才能夠有效地與HX711傳感器進(jìn)行交互,并獲取到所需的重量信息。一開(kāi)始先對(duì)HX711模塊進(jìn)行初始化,函數(shù)Init_HX711pin()用于配置HX711傳感器的引腳,并將其設(shè)置為輸入和輸出模式。這是為了確保STM32單片機(jī)能夠正確地與HX711傳感器進(jìn)行通信。隨后,代碼實(shí)現(xiàn)了函數(shù)HX711_Read(),用于從HX711傳感器讀取AD轉(zhuǎn)換的數(shù)值。該函數(shù)的實(shí)現(xiàn)遵循了HX711傳感器的通信協(xié)議,包括發(fā)送時(shí)鐘脈沖和讀取數(shù)據(jù)線的數(shù)值。由于稱重器本身也有重量,所以需要定義一個(gè)函數(shù)來(lái)獲取毛皮重量,后面用總重量減去毛皮重量才能獲得實(shí)物的實(shí)際重量。所以定義函數(shù)Get_Maopi(),其功能是獲取毛皮重量。在這個(gè)函數(shù)中,調(diào)用了HX711_Read()函數(shù)來(lái)讀取傳感器的初始數(shù)值,并將其存儲(chǔ)在全局變量Weight_Maopi中。最后,函數(shù)Get_Weight()被定義,其目的是獲取實(shí)物重量。在這個(gè)函數(shù)中,首先調(diào)用了HX711_Read()函數(shù)來(lái)讀取傳感器的數(shù)值,然后根據(jù)毛皮重量,使用校準(zhǔn)參數(shù)GapValue計(jì)算出實(shí)際的重量,并將結(jié)果存儲(chǔ)在全局變量Weight_Shiwu中。關(guān)鍵代碼如下所示:HX711_Buffer=HX711_Read(); if(HX711_Buffer>Weight_Maopi) { Weight_Shiwu=HX711_Buffer; Weight_Shiwu=Weight_Shiwu-Weight_Maopi;//獲取實(shí)物的AD采樣數(shù)值。 Weight_Shiwu=(s32)((float)Weight_Shiwu/GapValue);//計(jì)算實(shí)物的實(shí)際重量}這段代碼首先從HX711傳感器讀取AD轉(zhuǎn)換的數(shù)值,并將其存儲(chǔ)在HX711_Buffer變量中。然后通過(guò)比較HX711_Buffer和Weight_Maopi的值來(lái)確保讀取的數(shù)值大于毛皮重量。這是為了避免在計(jì)算實(shí)物重量時(shí)考慮到了毛皮的重量。如果讀取的數(shù)值大于毛皮重量,將HX711_Buffer的值賦給Weight_Shiwu,表示實(shí)物的AD采樣數(shù)值。然后從實(shí)物的AD采樣數(shù)值中減去毛皮的AD采樣數(shù)值,以獲取實(shí)物的凈重。最后,通過(guò)校準(zhǔn)參數(shù)GapValue對(duì)實(shí)物的凈重進(jìn)行修正。這段代碼片段通過(guò)對(duì)從傳感器讀取的數(shù)值進(jìn)行處理和修正,最終得到了實(shí)物的實(shí)際重量值。Motor(步進(jìn)電機(jī))模塊本系統(tǒng)采用的是28BYJ-48步進(jìn)電機(jī),這個(gè)模塊主要是實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的控制和旋轉(zhuǎn),通過(guò)合理地設(shè)置控制引腳的狀態(tài)和調(diào)節(jié)延時(shí)時(shí)間,可以實(shí)現(xiàn)步進(jìn)電機(jī)的精確控制。在Moto_Init()函數(shù)中,對(duì)步進(jìn)電機(jī)的控制引腳進(jìn)行了初始化,通過(guò)設(shè)置GPIOB的四個(gè)引腳(PB12、PB13、PB14、PB15)為輸出模式,來(lái)控制步進(jìn)電機(jī)的四相驅(qū)動(dòng)。MotorStop()函數(shù)用于停止步進(jìn)電機(jī)的運(yùn)動(dòng),將四個(gè)控制引腳的電平均置為低電平,從而停止電機(jī)的轉(zhuǎn)動(dòng)。Motorcw()和Motorccw()函數(shù)分別用于控制步進(jìn)電機(jī)順時(shí)針和逆時(shí)針旋轉(zhuǎn)。它們通過(guò)循環(huán)遍歷步進(jìn)電機(jī)的每個(gè)相位,并根據(jù)預(yù)先定義的控制數(shù)組來(lái)設(shè)置每個(gè)相位的狀態(tài),從而實(shí)現(xiàn)步進(jìn)電機(jī)的旋轉(zhuǎn)。在旋轉(zhuǎn)的過(guò)程中,通過(guò)調(diào)用延時(shí)函數(shù)來(lái)控制步進(jìn)電機(jī)的速度。Motorcw_angle()和Motorccw_angle()函數(shù)用于控制步進(jìn)電機(jī)旋轉(zhuǎn)到指定角度,它們通過(guò)計(jì)算旋轉(zhuǎn)所需的周期數(shù),并調(diào)用Motorcw和Motorccw函數(shù)來(lái)實(shí)現(xiàn)旋轉(zhuǎn)。在函數(shù)內(nèi)部,通過(guò)將角度轉(zhuǎn)換為周期數(shù)來(lái)控制步進(jìn)電機(jī)的旋轉(zhuǎn)。Motorccw_ring()和Motorcw_ring()函數(shù)用于控制步進(jìn)電機(jī)旋轉(zhuǎn)指定圈數(shù)。它們通過(guò)循環(huán)調(diào)用Motorcw_angle和Motorccw_angle函數(shù)來(lái)實(shí)現(xiàn)旋轉(zhuǎn),從而達(dá)到旋轉(zhuǎn)指定圈數(shù)的目的。關(guān)鍵代碼如下所示:voidMotorcw_angle(intangle,intspeed){ inti,j; j=(int)(angle/0.70312); for(i=0;i<j;i++) { Motorcw(speed); } MotorStop();} 這個(gè)函數(shù)是計(jì)算步進(jìn)電機(jī)正轉(zhuǎn)角度的函數(shù),j=(int)(angle/0.70312)這一行代碼計(jì)算出需要旋轉(zhuǎn)的脈沖數(shù)。假設(shè)步進(jìn)電機(jī)每轉(zhuǎn)一圈需要的脈沖數(shù)為360,那么每個(gè)脈沖對(duì)應(yīng)的角度為360/512≈0.70312。因此,通過(guò)將目標(biāo)角度除以0.70312可以得到需要旋轉(zhuǎn)的脈沖數(shù)。后面的for循環(huán)是控制步進(jìn)電機(jī)旋轉(zhuǎn)到達(dá)目標(biāo)角度之前的動(dòng)作。在循環(huán)內(nèi)部調(diào)用了Motorcw函數(shù),使步進(jìn)電機(jī)順時(shí)針旋轉(zhuǎn)一個(gè)脈沖,循環(huán)次數(shù)為需要旋轉(zhuǎn)的脈沖數(shù)。MotorStop()是用于在旋轉(zhuǎn)完成后停止步進(jìn)電機(jī)的運(yùn)動(dòng)。voidMotorcw_ring(intring,intspeed)//步進(jìn)電機(jī)正轉(zhuǎn)角度函數(shù){ inti; for(i=0;i<ring;i++) {Motorcw_angle(360,speed); }}這個(gè)函數(shù)是可以實(shí)現(xiàn)控制步進(jìn)電機(jī)順時(shí)針旋轉(zhuǎn)多圈,并且可以通過(guò)調(diào)整參數(shù)speed控制旋轉(zhuǎn)的速度。函數(shù)參數(shù)中的ring表示需要旋轉(zhuǎn)的圈數(shù),speed表示旋轉(zhuǎn)的速度。for循環(huán)控制步進(jìn)電機(jī)旋轉(zhuǎn)到達(dá)指定的圈數(shù)之前的動(dòng)作。在循環(huán)內(nèi)部調(diào)用了Motorcw_angle()函數(shù),使步進(jìn)電機(jī)順時(shí)針旋轉(zhuǎn)一圈,循環(huán)次數(shù)為需要旋轉(zhuǎn)的圈數(shù)。騰訊云平臺(tái)和微信小程序的相關(guān)實(shí)現(xiàn)MQTT協(xié)議模塊MQTT是一個(gè)客戶端服務(wù)端架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。它的設(shè)計(jì)思想是輕巧、開(kāi)放、簡(jiǎn)單、規(guī)范,易于實(shí)現(xiàn)。這些特點(diǎn)使得它對(duì)很多場(chǎng)景來(lái)說(shuō)都是很好的選擇,特別是對(duì)于受限的環(huán)境如機(jī)器與機(jī)器的通信(M2M)以及物聯(lián)網(wǎng)環(huán)境(IoT)。了解完后,開(kāi)始進(jìn)行初始化MQTT相關(guān)的緩沖區(qū)和參數(shù),并確保當(dāng)前沒(méi)有MQTT連接。mqtt_rxbuf和mqtt_txbuf用于設(shè)置接收和發(fā)送MQTT消息的緩沖區(qū)。mqtt_rxlen和mqtt_txlen分別設(shè)置了接收和發(fā)送緩沖區(qū)的長(zhǎng)度。使用memset函數(shù)將接收和發(fā)送緩沖區(qū)初始化為0。調(diào)用MQTT_Disconnect()函數(shù)兩次,這個(gè)函數(shù)用于斷開(kāi)MQTT連接。調(diào)用兩次可能是為了確保連接被徹底斷開(kāi)。該部分關(guān)鍵的是兩個(gè)函數(shù)——訂閱主題和發(fā)布消息。MQTT_SubscribeTopic()函數(shù)功能為MQTT訂閱/取消訂閱數(shù)據(jù)。訂閱主題需要構(gòu)建MQTT訂閱報(bào)文,發(fā)送給MQTT服務(wù)器,并等待服務(wù)器的響應(yīng)來(lái)確認(rèn)是否成功訂閱。首先計(jì)算可變報(bào)頭的長(zhǎng)度DataLen,其中包括主題的長(zhǎng)度以及是否包含QoS等信息。接著構(gòu)建固定報(bào)頭:根據(jù)參數(shù)whether判斷是訂閱(0x82)還是取消訂閱(0xA2)。計(jì)算并編碼剩余長(zhǎng)度字段,采用了MQTT的長(zhǎng)度編碼方案。然后構(gòu)建可變報(bào)頭,設(shè)置消息標(biāo)識(shí)符為0x0A并添加主題長(zhǎng)度和主題到有效載荷中。如果是訂閱操作,則添加QoS等級(jí)到有效載荷中。最后發(fā)送MQTT訂閱請(qǐng)求,并等待接收訂閱應(yīng)答,若收到訂閱應(yīng)答,則返回訂閱成功(0)。此外,函數(shù)中還使用了一個(gè)循環(huán)來(lái)重試訂閱操作,最多重試10次,如果在重試過(guò)程中收到了訂閱應(yīng)答,則返回訂閱成功,否則返回訂閱失敗。關(guān)鍵代碼如下所示:if(USART2_RX_FLAG){memcpy((char*)mqtt_rxbuf,(char*)USART2_RX_BUFFER,USART2_RX_CNT); USART2_RX_FLAG=0; USART2_RX_CNT=0;}if(mqtt_rxbuf[0]==parket_subAck[0]&&mqtt_rxbuf[1]==parket_subAck[1])//訂閱成功 { return0;//訂閱成功}這段代碼片段首先檢查USART2是否接收到數(shù)據(jù)。如果USART2_RX_FLAG標(biāo)志位被設(shè)置,表示USART2接收到了數(shù)據(jù)。接著,代碼使用memcpy函數(shù)將USART2接收緩沖區(qū)(USART2_RX_BUFFER)中的數(shù)據(jù)拷貝到mqtt_rxbuf緩沖區(qū)中??截惖拈L(zhǎng)度由USART2_RX_CNT決定。然后,代碼檢查mqtt_rxbuf中的第一個(gè)字節(jié)和第二個(gè)字節(jié)是否與變量parket_subAck中的值相匹配。如果匹配,表示收到了訂閱確認(rèn)包(subAck),即訂閱成功。此時(shí)函數(shù)返回0,表示訂閱成功。MQTT_PublishData()為MQTT發(fā)布數(shù)據(jù)打包函數(shù),用于向MQTT服務(wù)器發(fā)布消息。首先計(jì)算主題和消息的長(zhǎng)度。接著構(gòu)建MQTT消息的固定報(bào)頭,設(shè)置消息類(lèi)型為PUBLISH(0x30),然后計(jì)算并編碼剩余長(zhǎng)度字段,采用了MQTT的長(zhǎng)度編碼方案。然后構(gòu)建MQTT消息的可變報(bào)頭,添加主題長(zhǎng)度和主題到有效載荷中,而且如果QoS不為0,則添加報(bào)文標(biāo)識(shí)符,接著將消息內(nèi)容復(fù)制到有效載荷中。最后調(diào)用MQTT_SendBuf函數(shù)發(fā)送構(gòu)建好的MQTT消息。函數(shù)MQTT_SentHeart和MQTT_Disconnect分別用于發(fā)送心跳包和斷開(kāi)連接的消息,它們也會(huì)調(diào)用MQTT_SendBuf函數(shù)來(lái)發(fā)送消息內(nèi)容。而函數(shù)MQTT_SendBuf則是用于實(shí)際發(fā)送MQTT消息的函數(shù),它將消息通過(guò)USART發(fā)送出去。關(guān)鍵代碼如下所示:if(qos){mqtt_txbuf[mqtt_txlen++]=BYTE1(id);mqtt_txbuf[mqtt_txlen++]=BYTE0(id);id++;} memcpy(&mqtt_txbuf[mqtt_txlen],message,messageLength);mqtt_txlen+=messageLength; MQTT_SendBuf(mqtt_txbuf,mqtt_txlen);returnmqtt_txlen;這段代碼是用于構(gòu)建并發(fā)送MQTT消息的功能。如果消息的服務(wù)質(zhì)量(QoS)不為零,則會(huì)為消息分配一個(gè)唯一的標(biāo)識(shí)符,并將其添加到消息中。然后,消息內(nèi)容被拷貝到發(fā)送緩沖區(qū)中,并調(diào)用MQTT_SendBuf函數(shù)發(fā)送消息。最后,函數(shù)返回已發(fā)送消息的總長(zhǎng)度。esp8266聯(lián)網(wǎng)模塊這個(gè)模塊一共有6個(gè)函數(shù)組成:ESP8266_SendCmd()為ESP8266命令發(fā)送函數(shù)、ESP8266_Init()為ESP8266硬件初始化檢測(cè)函數(shù)、ESP8266_AP_TCP_Server_Mode()為配置WIFI為AP+TCP服務(wù)器模式、ESP8266_ServerSendData()為T(mén)CP服務(wù)器模式下的發(fā)送函數(shù)、ESP8266_STA_TCP_Client_Mode()為配置WIFI為STA模式+TCP客戶端模式、ESP8266_ClientSendData()為T(mén)CP客戶端模式下的發(fā)送函數(shù)。面向微信小程序控制,最關(guān)鍵的是配置WIFI為STA模式+TCP客戶端模式,這段代碼是用于將ESP8266模塊配置為STA(Station)模式下的TCP客戶端,連接到指定的Wi-Fi熱點(diǎn),并連接到指定的TCP服務(wù)器。首先先定義了一個(gè)字符數(shù)組ESP8266_SendCMD[100],用于存儲(chǔ)組合發(fā)送過(guò)程中的命令。接著測(cè)試ESP8266模塊是否正常工作并關(guān)閉回顯功能。發(fā)送AT+CWMODE=1指令設(shè)置Wi-Fi模式為Station模式,然后發(fā)送AT+RST指令對(duì)ESP8266模塊進(jìn)行復(fù)位,再次發(fā)送ATE0指令關(guān)閉回顯功能。使用sprintf函數(shù)組合AT+CWJAP指令,配置連接到指定的Wi-Fi熱點(diǎn)。發(fā)送AT+CIPMUX=0指令設(shè)置為單連接模式。使用sprintf函數(shù)組合AT+CIPSTART指令,配置連接到指定的TCP服務(wù)器。如果flag參數(shù)為非零值,則表示需要開(kāi)啟透?jìng)髂J?。在透?jìng)髂J较拢l(fā)送AT+CIPMODE=1指令開(kāi)啟透?jìng)髂J?,然后發(fā)送AT+CIPSEND指令開(kāi)始透?jìng)鲾?shù)據(jù)。如果發(fā)送AT+CIPSEND指令后未收到">"符號(hào)的響應(yīng),則表示透?jìng)髂J介_(kāi)啟失敗。關(guān)鍵代碼如下所示:/*配置將要連接的WIFI熱點(diǎn)信息*/sprintf(ESP8266_SendCMD,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,pass);if(ESP8266_SendCmd(ESP8266_SendCMD))return6;if(ESP8266_SendCmd("AT+CIPMUX=0\r\n"))return7;/*設(shè)置單連接*//*配置要連接的TCP服務(wù)器信息*/sprintf(ESP8266_SendCMD,"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",ip,port);if(ESP8266_SendCmd(ESP8266_SendCMD))return8;騰訊云平臺(tái)的主要設(shè)置騰訊云物聯(lián)網(wǎng)平臺(tái)(TencentCloudIoT)是騰訊云基于領(lǐng)先技術(shù)打造的全面物聯(lián)網(wǎng)解決方案,旨在幫助企業(yè)實(shí)現(xiàn)設(shè)備連接、數(shù)據(jù)管理、應(yīng)用開(kāi)發(fā)等一系列物聯(lián)網(wǎng)需求,助力企業(yè)實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型和智能化升級(jí)。騰訊云物聯(lián)網(wǎng)平臺(tái)提供靈活多樣的設(shè)備接入與管理功能。無(wú)論是傳統(tǒng)的傳感器設(shè)備、智能家居設(shè)備,還是工業(yè)控制設(shè)備,都可以通過(guò)騰訊云物聯(lián)網(wǎng)平臺(tái)輕松接入,并提供完善的設(shè)備管理功能,包括設(shè)備注冊(cè)、認(rèn)證、狀態(tài)監(jiān)控等,方便用戶對(duì)設(shè)備進(jìn)行統(tǒng)一管理和控制。同時(shí)騰訊云物聯(lián)網(wǎng)平臺(tái)提供高效可靠的數(shù)據(jù)通信服務(wù)。平臺(tái)支持設(shè)備與云端之間的雙向通信,提供安全穩(wěn)定的數(shù)據(jù)傳輸通道,確保設(shè)備數(shù)據(jù)的實(shí)時(shí)傳輸和云端命令的及時(shí)下發(fā),同時(shí)支持固件升級(jí)等功能,為用戶提供更便捷的遠(yuǎn)程設(shè)備管理體驗(yàn)。首先,我在騰訊云平臺(tái)的物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái),使用了公共實(shí)例去新建項(xiàng)目,寫(xiě)好項(xiàng)目名稱和項(xiàng)目描述后就創(chuàng)建完成了。接著進(jìn)入產(chǎn)品頁(yè)面進(jìn)行產(chǎn)品開(kāi)發(fā),新建產(chǎn)品后依據(jù)需求,配置物理模型,我們?cè)O(shè)置了四個(gè)參數(shù),分別是飲水水溫DS18B20、食物余量weight、投喂開(kāi)關(guān)button、定時(shí)投喂間隔time,用于用戶能夠遠(yuǎn)程監(jiān)測(cè)水溫、食物余量,能夠控制寵物的定時(shí)投喂和隨時(shí)隨地進(jìn)行投喂。設(shè)置的參數(shù)如下圖4-2所示:圖4-2騰訊云配置的4個(gè)物理模型接著配置小程序的封面顯示界面,設(shè)置如下圖4-3所示:圖4-3配置微信小程序封面樣式然后配置小程序頁(yè)面,設(shè)置如下圖4-4所示:圖4-4配置微信小程序頁(yè)面設(shè)置好這些后,通過(guò)生成二維碼和小程序的配合,即可在騰訊連連上綁定該設(shè)備。然后查看設(shè)備信息中的產(chǎn)品ID和產(chǎn)品密鑰,方便獲取MQTT登錄參數(shù)。通過(guò)網(wǎng)上資料的一段python代碼,直接生成使用MQTT協(xié)議需要使用的產(chǎn)品ID,設(shè)備名稱,設(shè)備密匙。接著需要查看Topic列表查看發(fā)布和訂閱的響應(yīng)格式,方便后面寫(xiě)程序的時(shí)候判斷是否發(fā)布或者訂閱,如下圖4-5所示:圖4-5發(fā)布和訂閱的響應(yīng)格式本章小結(jié)本章主要介紹了基于STM32F103RCT6的智能寵物喂養(yǎng)系統(tǒng)的軟件設(shè)計(jì),包括主程序關(guān)鍵代碼的思路與設(shè)計(jì),還有對(duì)DS18B20模塊、H711模塊、步進(jìn)電機(jī)模塊的初始化和一些函數(shù)設(shè)計(jì),以及對(duì)聯(lián)網(wǎng)相關(guān)的MQTT協(xié)議模塊、esp8266和騰訊云平臺(tái)的一些操作配置等方面的內(nèi)容。本章主要是對(duì)各個(gè)功能模塊的一些關(guān)鍵代碼展開(kāi)分析與研究,并對(duì)一些函數(shù)和算法進(jìn)行詳細(xì)說(shuō)明,通過(guò)各個(gè)模塊之間的關(guān)系,根據(jù)前面的需求分析完成整個(gè)系統(tǒng)的設(shè)計(jì)。系統(tǒng)測(cè)試及結(jié)果測(cè)試說(shuō)明在進(jìn)行測(cè)試時(shí),首先保證STM32F103RCT6芯片能夠正常工作運(yùn)行,接著需要用電腦的usb口進(jìn)行供電準(zhǔn)備將準(zhǔn)備好的程序燒錄。在燒錄軟件測(cè)試時(shí),我使用的是STM32串口下載軟件FLYMCU,在檢查好所有模塊設(shè)備和單片機(jī)之間的引腳連接正確后,連接上電源,將生成的hex文件燒錄到單片機(jī)中,并開(kāi)始測(cè)試。為了測(cè)試該裝置的是否滿足前面的需求,需要進(jìn)行以下幾方面的測(cè)試:(1)食物余量檢測(cè):通過(guò)傳感器檢測(cè)食物余量,通過(guò)主控板控制實(shí)時(shí)顯示在LCD屏上,同時(shí)用戶可以通過(guò)微信小程序遠(yuǎn)程監(jiān)測(cè)寵物的實(shí)時(shí)食物余量,便于用戶能夠在食物沒(méi)有了的時(shí)候能夠隨時(shí)遠(yuǎn)程投喂,保證寵物的健康狀況。(2)水溫檢測(cè):通過(guò)傳感器檢測(cè)水溫,通過(guò)主控板控制實(shí)時(shí)顯示在LCD屏上,同時(shí)用戶可以通過(guò)微信小程序遠(yuǎn)程監(jiān)測(cè)寵物的喝水水溫,便于用戶能夠在水溫過(guò)高或過(guò)低時(shí)去控制水溫,保證寵物的健康狀況。(3)手動(dòng)投喂:用戶可以手動(dòng)啟動(dòng)投喂器,通過(guò)按下按鈕控制電機(jī)轉(zhuǎn)動(dòng),進(jìn)行手動(dòng)投喂。(4)遠(yuǎn)程投喂:用戶可以通過(guò)手機(jī)微信小程序控制投喂器,實(shí)現(xiàn)遠(yuǎn)程投喂功能。(5)遠(yuǎn)程定時(shí)投喂:用戶可以通過(guò)手機(jī)微信小程序設(shè)置投喂的時(shí)間間隔,主控板控制定時(shí)器設(shè)置投喂時(shí)間,方便用戶對(duì)寵物的投喂。功能測(cè)試結(jié)果在測(cè)試過(guò)程中,對(duì)智能寵物喂養(yǎng)系統(tǒng)的各個(gè)功能進(jìn)行了多次測(cè)試,并記錄了相關(guān)的測(cè)試數(shù)據(jù)和結(jié)果。WIFI連接檢測(cè)首先,要想能夠讓需求的遠(yuǎn)程功能得以實(shí)現(xiàn),就得先確保我們寫(xiě)的keil代碼中的聯(lián)網(wǎng)模塊是否能用,而且需要能夠連上手機(jī)開(kāi)的熱點(diǎn)。如下圖所示5-1所示:“WIFIOK……”的意思是WIFI模塊能正常使用,而“ConnectWIFI……”則表示正在連接WIFI。如果連接不上,會(huì)顯示“WIFIERROR……”。圖5-1WIFI連接示意圖食物余量檢測(cè)先看看初始狀態(tài),在稱重臺(tái)上先不放置物品,我們可以看到,在LCD彩屏和微信小程序上顯示的都是0g。如下圖5-2所示:圖5-2稱重臺(tái)無(wú)放置物品接著在稱重臺(tái)上放上2個(gè)小物件,我們可以看到,在LCD彩屏和微信小程序上“剩余食物”的數(shù)據(jù)馬上就發(fā)生了變化,都變成了47g。如下圖5-3所示:圖5-3稱重臺(tái)放置2個(gè)物品“剩余食物”變化接著在我們拿掉其中的1個(gè)小物件,我們可以看到,在LCD彩屏和微信小程序上“剩余食物”的數(shù)據(jù)也隨之減少,都變成了18g。如下圖5-4所示:圖5-4稱重臺(tái)減重1個(gè)物品“剩余食物”變化水溫檢測(cè)把我們的DB18B20防水性溫度傳感器的不銹鋼探頭放置在一盆正常從水龍頭放出的自來(lái)水中,可以看到

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論