版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGE5PAGE4基于4G.CAT.1和單片機的多功能老人呼叫器設計摘要隨著移動通信及移動智能設備的飛速發(fā)展,2G/3G網絡因滿足不了人們日益增長的網絡速度需求而逐步退出歷史的舞臺,備受此影響的是適應不移動智能設備的老年人們。據調查,我國已步入老齡化社會,老年人口基數大且呈有逐年上漲的趨勢。此外,大部分老年人都與兒女分居兩地,“空巢老人”、“老人走失”等社會問題引起社會的廣泛關注,因此開發(fā)服務于老人的移動基礎設備具有極大的應用意義及社會價值。本設計旨在設計一款多功能老人呼叫器,便于兒女及時發(fā)現老人的異常情況、遠程康護老人的日常生活并了解老人的日?;顒榆壽E,給予老人更多地關愛與照顧。本設計創(chuàng)新點在于主控為Air724的4GCAT.1,是使用Lua腳本語言開發(fā),再以單片機STC8F2K16S2為輔助的產品設計。CAT.1能夠實現VoLTE通話,若按常規(guī)方式將主邏輯安排在單片機上,會增加代碼與模塊的冗余度,這樣的設計很好地將設計成本、體積以及系統(tǒng)優(yōu)化到最好。實現本設計從市場調研、產品選型,到查閱CAT.1相關資料,再到將書籍上的C與Lua轉化為設計中的軟件設計,都付出了很多的時間與精力。本文主要負責闡述以線程為主體的主控Air724CAT.1邏輯開發(fā)功能的Lua開發(fā)、單片機輔助C開發(fā)及系統(tǒng)的全面測試。單片機主要實現與主控之間的通信、執(zhí)行主控下達命令及控制燈與按鍵檢測;主控負責實現呼叫器的所有功能設計;最終進行模塊測試、接口測試及系統(tǒng)測試來確保設計的可靠性與完成度?;?GCAT.1多功能呼叫器的系統(tǒng)運行測試表明可以實現一鍵呼救、一鍵報警、個性化語音提醒、定位追蹤等功能,能為老人的日常生活及健康提供一種有效的監(jiān)護預警手段。關鍵詞:老齡化,移動通信,CAT.1,呼叫器目錄TOC\o"1-2"\h\u32197第1章緒論 1224071.1研究背景及意義 1261141.2研究內容 144111.3論文組織 219903第2章背景知識及相關技術介紹 3222922.1背景知識 3210262.2Lua語言簡介 3247722.3CAT.1簡介 399022.4本章小結 427631第3章系統(tǒng)設計方案 5209593.1需求分析 5201973.2系統(tǒng)總體方案設計 670423.3本章小結 814868第4章系統(tǒng)設計的實現 989154.1主控詳細設計 9261484.2主控設計難點分析 146954.3單片機詳細設計 1571314.4本章小結 1723684第5章系統(tǒng)測試及分析 18113245.1定位測試 1897725.2遠程升級測試 19252135.3低功耗測試 21160905.4本章小結 221732第6章總結及展望 2395236.1總結 23327246.2展望 2317623參考文獻 2521260附錄1部分關鍵源碼及解釋 2715588一、AIR724 2732098二、單片機 34PAGE5緒論1.1研究背景及意義根據國際公認的人口老齡化標準,當某個國家或地區(qū)60周歲人及以上人口超過總人口數的10%或65周歲及以上人口超過總人口數的7%時,就表明該國家或地區(qū)已經步入人口老齡化社會。據國家統(tǒng)計局統(tǒng)計2019年中國人口數據,我國60周歲及以上人口占18.1%;65周歲及以上人口占比12.6%[1],且呈逐年上升的趨勢,因此人口老齡化是中國人口均衡發(fā)展中所面臨的重要挑戰(zhàn)。而當今社會中,成人子女大多都與父母兩地分居,因此成人子女很難做到對父母的健康狀況、高齡老人行為軌跡的實時監(jiān)控,所以空巢老人獨居、走失等社會現象受到社會的廣泛關注。據統(tǒng)計,目前三大運營商的移動電話用戶數將近16億戶,其中將近2億戶人依然在是2G/3G用戶。2G/3G用戶大部分都是老年人,老年人視力差、反應遲鈍、記憶模糊,很難適應智能機的操作。但因2G/3G逐漸退網,這部分用戶將不得不換手機卡、手機來順應網絡時代的發(fā)展。人口老齡化阻止不了2G全面退網,因此老人機及老人呼叫器也需要得到發(fā)展與升級,我們依然需要為滿足老年人日益增長的精神文化需求而努力。社會迅速發(fā)展的同時,不能遺忘腳步緩慢的人,不然終將我們也會成為被世界拋棄的一類人,因此研究一款能夠滿足老年人基本需求的產品是迫在眉睫的事情。而老人的多功能呼叫器的基本需求是使用簡單、操作方便,音量大、撥號等特點,屬于中低速業(yè)務的設計,可以采用CAT.1來實現其功能設計。CAT.1的推動大大優(yōu)化了各大業(yè)務覆蓋的范圍,支持更多中低速物聯(lián)網業(yè)務的開發(fā)與設計,提高了多功能呼叫器實現的可行性。1.2研究內容多功能呼叫器主要由設備端、大數據云平臺和多功能呼叫器App構成,整個系統(tǒng)結合中低速物聯(lián)網、Wi-Fi/LBS定位、Socket等技術,實現設備端、云端和App端實時的數據交互,使服務于老年人的安全監(jiān)測變得更加信息化和智能化。多功能呼叫器實現了對老年人的生活動態(tài)位置、日常生活提醒及人身安全的實時監(jiān)測,同時還具有Wi-Fi/LBS定位和一鍵報警功能以應對突發(fā)狀況。App可遠程實時監(jiān)測老人情況、把控各項數據,同時也可下發(fā)相關配置來幫助老人制定每日計劃。本文的主要研究內容包括一鍵報警檢測和數據融合的協(xié)議研究、整個主控系統(tǒng)4GCAT.1模塊的軟件設計,實現一款性價比高、功能強、功耗低、操作簡單的多功能呼叫器,最終經過相關性能測試以及功能測試,驗證本系統(tǒng)的可行性及穩(wěn)定性。1.3論文組織本論文共分為六章來對研究內容及工作進行闡述:第一章為本文的緒論,本章主要闡述選題研究背景、意義及內容,介紹當前人口老齡化及2G/3G全面退網的社會背景及CAT.1技術的發(fā)展現狀,提出本系統(tǒng)地設計并介紹本設計的主要實現功能,最后再對本論文的論文組織加以陳述。第二章為本設計關于Lua及CAT.1技術背景知識及CAT.1技術介紹。首先介紹關于設計的背景知識,然后對主控所用到的Lua語言進行介紹,最后闡述CAT.1技術的發(fā)展與功能。第三章為系統(tǒng)具體設計方案,本章介紹了多功能呼叫器的系統(tǒng)總體方案設計及需求分析。需求主要詳細分析了功能需求及非功能需求兩個方面,再對系統(tǒng)的結構與主控模塊的選型進行具體分析。第四章為系統(tǒng)設計的實現,主要從模塊化多線程編程方向重點說明了主控的詳細設計,詳細說明主要的六大線程,并對重要的技術及用法設計進行具體介紹,然后介紹了主控本設計難點,最后介紹了單片機設計的MCU初始化及串口通信。第五章為系統(tǒng)測試及分析,包括硬件測試、軟件測試及測試問題的解決方案分析。第六章為文章的總結,并提出展望。 第2章背景知識及相關技術介紹2.1背景知識本課題為基于4GCAT.1多功能呼叫器,主控Air724的4GCAT.1芯片支持二次開發(fā),可以通過Lua、AT、CSDK開發(fā),本設計主要由Lua語言開發(fā)來實現設計,因此需要對Lua語言進行系統(tǒng)性的學習,了解CAT.1的發(fā)展情況及業(yè)務分布情況。2.2Lua語言簡介1993年巴西里約熱內盧,Lua被天主教大學一個研究小組研發(fā),是一種能夠被應用程序靈活擴展的腳本語言,被游戲行業(yè)廣泛運用的“膠水語言”,最著名的游戲莫過于魔獸世界。Lua是嵌入式的腳本語言,特點是輕量、高效、簡單,可擴展等,它可獨立進行編程,也可作為一個庫嵌入到其他宿主語言的應用程序中,因此在嵌入式系統(tǒng)、物聯(lián)網、游戲、移動設備等領域被廣泛地運用。Lua的底層實際上也是通過C語言來實現的,只是被設計成能為C/C++及其他常用語言開發(fā)的軟件集成一起使用,這樣成功的彌補了C語言在高級抽象能力、動態(tài)結構及調試能力等方面的不足。Lua語言是一種動態(tài)類型的語言,它沒有類型定義,每個值都帶有自身的類型信息[2]。Lua語言具有標準庫,用戶可以根據需求來選擇使用Lua語言的方法:在自己的程序中嵌入Lua語言、直接使用Lua語音開發(fā)或者是結合其他語言一并開發(fā)[3]。Lua語言能夠提供多樣化功能的API供使用者調用。隨著Lua的發(fā)展,越來越多的教程及文獻對Lua語言進行分析與解讀,將為設計提供莫大的幫助與支持。2.3CAT.1簡介CAT.1的全稱是LTEUE-Category1,UserEquipment簡寫是其中的UE,是對在4GLTE網絡下終端設備無線性能的一種“低配版4G”,也具有推動蜂窩物聯(lián)網代際遷移的潛力。根據3GPP標準規(guī)范,UECategory是可以在上行鏈路/下行鏈路中更改的一組無線性能參數,換句話說,基站和用戶終端通過各種UE類別參數確定用戶設備支持的速率,基站根據UECategory來調整其他參數來與用戶終端正常通信。[4]CAT.1適用于中低速的蜂窩物聯(lián)網產品的發(fā)展,對補齊物聯(lián)網產品主要運用場景需求有巨大的意義。CAT.1主要優(yōu)點有能夠無縫接入現有LTE網絡、集成度高、傳輸快、價格低等,這恰好滿足4G老人機的基本需求。多功能呼叫器主要需求為通話和少量數據傳輸,而CAT.1支持VoLTE高清通話及成本低的低速率數據傳輸,此外已有集成TTS、Wi-Fi定位等拓展功能的CAT.1模塊。蜂窩物聯(lián)網業(yè)務分布如圖2-1所示,發(fā)展好CAT.1網絡及相關產業(yè)對優(yōu)化物聯(lián)網各大類業(yè)務有至關重要的作用。圖2-1蜂窩物聯(lián)網業(yè)務分布LTECAT.1不需要對基站進行軟硬件的修改與升級就可無縫接入LTE網絡中,這樣在很大的程度上降低了網絡覆蓋成本;此外LTECAT.1模塊性價比高、集成度高、模組硬件架構簡單的優(yōu)點讓CAT.1的優(yōu)勢大大超過了Cat.4。CAT.1具有毫秒級傳輸時延,與Cat.4相同的能夠支持100km/H以上的移動速度,因此CAT.1在物聯(lián)網技術開啟萬物互聯(lián)的場景中具有得天獨厚的優(yōu)勢。2.4本章小結本章主要對本設計中使用的一些技術和概念進行了介紹。先介紹了本設計的背景知識,再介紹本課題實現所采用的腳本語言Lua,然后介紹了蜂窩物聯(lián)網業(yè)務分布及CAT.1所處的地位與作用,最后介紹了所使用的主控芯片采用的網絡技術。第3章系統(tǒng)設計方案3.1需求分析3.1.1功能需求分析由于本設計面向高齡老人,因此設計需要操作簡單、撥號方便、音量大等特點,本設計可以實現以下功能:一鍵撥號、一鍵求救功能。由于老人記憶力減退、交際圈較小,大部分都是聯(lián)系自己的兒女。本設計可以設置一個常用號碼,方便父母有事情一鍵撥打給自己的常用聯(lián)系人;另外可設置五組緊急呼叫號碼,當老人有緊急事件需要一鍵報警求救時,可以輪播五組電話號碼,直到有一組號碼接通為止。并且設備監(jiān)護人將會受到報警信息與老人的位置信息,方便設備監(jiān)護人及時實施救援。大音量語音報時。時間對老人來說依然十分重要,現在的老人機屏幕小、時間字體大,老人依然需要瞇著眼睛仔細看,大音量語音報時能夠解決老人看不清時間的問題。定位跟蹤功能。具有LBS及Wi-Fi室內輔助定位,能夠實現老人實時定位,通過手機App實時監(jiān)測老人的位置信息,并且能夠實時將定位信息上傳至服務器,將位置信息生成老人的實時路徑與歷史路徑,方便兒女等家人掌握老人的動態(tài)位置信息,并對數據進行保存和調用。[5]防騷擾??梢酝ㄟ^手機設置防騷擾功能,將能夠接通的號碼設置成白名單,避免其他詐騙電話、騷擾電話等撥號給老人,減少老人被電話詐騙、電話騷擾的次數,增加老人的安全性。來電提醒。能夠自動識別來電號碼是不是后臺所設置的白名單聯(lián)系人或者是親情聯(lián)系人,若是已存入的號碼,則會有來電鈴聲來提示親情號碼或白名單號碼的備注;若不是,則只播放來電鈴聲。如親情號碼張三來電,來電鈴聲為:“主人,張三來電話啦”。設備持有者可選擇接聽或掛斷。設備監(jiān)護人可以設置來電自動接聽或者響鈴幾聲后自動接聽等。個性化語音服務管家提醒。設備監(jiān)護人能夠通過手機來個性化設置鬧鐘及提示信息,提醒設備持有者到點進行相應的活動,如制定早上8:00鬧鐘提醒老人吃藥,當時間到早上8:00時,設備將會提醒:“該吃藥了”等信息,信息內容可以個性化設置。遠程升級。設備支持遠程升級,方便維護并且遇到緊急問題能夠及時覆蓋有問題版本,及時將損害降到最低從而節(jié)省成本。3.1.2非功能需求分析設備的原生開發(fā)在移動設備與智能網絡科技高速發(fā)展的情況下,已經無法滿足日新月異變化的需求。為了滿足多功能呼叫器的設備可靠性與系統(tǒng)性,讓設計更有研究、設計與實現的意義,還需要滿足以下非功能性需求。穩(wěn)定性。穩(wěn)定性是設備最基本的要求。為了確保設備穩(wěn)定性,就需要對產品進行風險預測分析,并且對不同場合進行風險包容性檢測與對代碼錯誤、運行異常的進行及時處理,保證老人使用的得心應手。擴展性。從設備的功能與老人的需求分析,設備功能需要不斷優(yōu)化與豐富來滿足老人日益增長的精神上的需求度,才不會被網絡時代的快速發(fā)展所淘汰。時代在進步,老人也需要逐步的跟上時代的步伐,科技網絡的發(fā)展不可能放慢腳步,但產品的設計開發(fā)可以不斷拓展來包容腳步緩慢的老人們??赏卣剐詮姷漠a品才會有更多的無限可能來包容老人的需求??删S護性。隨著移動用戶對互聯(lián)網產品品質的要求不斷提高,越來越多的產品被設計出來適應多樣化的需求,但許多產品因維護難度大而失去了很大的市場。特別是許多物聯(lián)網無法實現遠程升級或者升級難度大等問題,需要用戶寄回產品或者是到現場去排查故障等原因,導致維護成本高且會降低客戶的滿意度,因此產品的可維護性十分重要。低功耗。由于老人對呼叫器的性能不是很高但需要設備能夠將續(xù)航時間延長,因此需要實現低功耗來優(yōu)化產品的使用。呼叫器大部分的時間應該處于省電模式,除了有相應的操作或者配置才需要進行設備喚醒,做好低功耗是設備的重點之一。3.2系統(tǒng)總體方案設計3.2.1系統(tǒng)結構多功能呼叫對寬帶傳輸速率的要求不高,不需要以Cat.4的速率來適配,因此使用相差無幾且性價比高的CAT.1來作為主控是十分切合的。多功能呼叫器可設計成小模塊讓使用者隨身攜帶,設備定時將設備位置信息提交云服務器進行分析或保存,形成歷史記錄及歷史軌跡,方便設備監(jiān)控者隨時查看設備使用者的位置信息,設備監(jiān)控者也可以使用SMS短信服務遠程喚醒設備。本設計系統(tǒng)結構主體框架如圖3-1所示。本設計將定位技術、SMS短信服務技術及無線通信技術的相互融合,以AIR724模塊作為主控的多功能報警器實現了遠程對老人安全的監(jiān)控與保障,有效地保證了老人的安全與身心健康。圖3-1系統(tǒng)結構主體框架多功能呼叫器設計主體Air724的4GCAT.1,單片機STC8F2K16S2作為輔助并控制其他外設的產品設計。主控主要是用Lua腳本語言開發(fā),STC8主要是用C語言開發(fā)。設計主體主要分為五個部分,燈控、按鍵控制、電源控制、單片機控制及CAT.1主控。燈及按鍵等均通過STC8的GPIO來連接,AIR724UG通過UART連接在STC8上。STC8相當于設備的中轉站,中轉設備的外設狀態(tài)及接收控制外設指令并實施;AIR724UG相當于中央處理器,是多功能呼叫器的核心,所有的處理指令都是通過AIR724UG來分析完成的。多功能呼叫器的系統(tǒng)總體框架如圖3-2所示。圖3-2系統(tǒng)總體框架3.2.2系統(tǒng)主控芯片目前市場上微控制單元(MCU)的種類繁多,最常見的包括寄存器少、價格低的51單片機;性價比高、功能強大的意法半導體STM32相關產品;指令精簡、框架強大的PIC系列單片機等等。經過市場地調研,大部分物聯(lián)網產品都會以此類MCU作為主控。多功能呼叫器的需求及設計若以此類MCU作為主控,則需要加入更多的外設及投入更高的成本,將會使設計的性價比下降。為了選擇出一款編程簡便、性價比高、不造成資源浪費又同時滿足設計需求的主控芯片,應該考慮以下因素:主控的體積小,成本低;主控的GPIO至少兩個,至少一個UART;主控省電模式及工作模式的功耗要低,進入省電模式方式簡單;主控開發(fā)難度小,易上手,且現有的參考資料、開發(fā)教程易查找;主控集成度高,穩(wěn)定性強。綜合上述幾點性能要求,考慮各方面的因素,本系統(tǒng)最終選用AIR724系列芯片作為主控。AIR724UG芯片功能強大,內置豐富的網絡協(xié)議,且支持多種驅動配置。此外,AIR724UG還集成多個工業(yè)標準接口,在老人機、安防、工業(yè)互聯(lián)、車載等中低速速率傳輸的領域具有很廣的應用范圍。AIR724UG外設接口豐富,支持VOLTE、SPILCD、SPICamera等功能,性價比高、實時性好、集成度高且功能強大。此芯片還支持多種開發(fā)方式,如CSDK開發(fā)、Luat腳本二次開發(fā)、AT指令開發(fā)等,豐富的開發(fā)模式可以被廣泛應用與各種控制領域當中。AIR724UG具有LTECAT.1bis模塊的超小封裝(即郵票孔+LGA的封裝),采用的是紫光展銳的UIS8910平臺,支持LTE3GPPRel.13技術[5]。硬件部分主要采用AIR724UG芯片和STC8F2K16S2,根據芯片手冊來設計系統(tǒng)設備硬件端的電源模塊、主控模塊、單片機模塊及SIM卡卡槽模塊等,運用AD軟件來設計整個系統(tǒng)是詳細設計。所有的配件及芯片選型都經過精心對比,參考相關芯片手冊、AD軟件設計相關書籍及布板美觀技巧等,才實行硬件的原理圖繪制和PCB設計。3.3本章小結本章對本系統(tǒng)的需求進行功能需求及非功能需求兩個方面進行分析,再對系統(tǒng)設計的主控芯片詳細分析,介紹系統(tǒng)主要結構以及主控模塊的選型工作,并介紹了AIR724UG芯片的主要功能。第4章系統(tǒng)設計的實現4.1主控詳細設計主控AIR724UG主要采用模塊化多線程編程來對軟件進行設計。所謂的模塊化多線程編程就是將模塊分為多線程,將每個子線程用流程圖表示出來,通過中間變量使各個線程同時工作、相互調度,從而組成一個完整的程序。這樣能夠大大降低程序的復雜程度,使調試與維護變得更加方便快捷。主控AIR724UG的軟件設計部分使用的是Lua的開發(fā)方式,存在一定的開發(fā)難度。主控程序主要由多線程組成,當主控程序中創(chuàng)建了多線程時,由于每一條線程執(zhí)行速度很短,會給人同一時刻有多個線程同時執(zhí)行的錯覺,但實際上多線程時并非并發(fā)的。每個線程的執(zhí)行是通過CPU的調度來決定的,一個CPU只能執(zhí)行一個線程。雖然很難確定在一個時間片內具體執(zhí)行的是哪一個線程,但是我們可以設置線程的優(yōu)先級,來保證線程合理的被執(zhí)行與分配。本系統(tǒng)軟件設計主要包含六大模塊:雙核心數據收發(fā)線程、開機服務、按鍵處理、網絡主線程收發(fā)線程、個性化定時TTS提醒、測試模式線程。本設計主控的程序流程圖如圖4-2所示。圖4-2主控程序流程圖4.1.1雙核心數據收發(fā)線程由于AIR724UG模塊開機需要拉低PWRKEY管腳1.5秒,然后檢測V_GLOBAL_1V8管腳的電平的高低來判斷模塊是否開機成功。因此模塊需要借助STC8來進行開關機,STC8低功耗技術也十分精湛。STC8通過UART與AIR724UG相連接,AIR724UG有三個串口,每個串口的主要功能都各不相同。本設計所使用的UART1主要作用是與外設通信,AT命令和數據傳輸,所支持的最大波特率921600bps,默認115200bps,且支持硬件流控(CTS/RTS)。雙核心數據收發(fā)線程即單片機與主控之間的數據傳輸,UART初始化為最普遍的配置:波特率9600,8位數據位,無校驗,1位停止位。[6]雙核心線程處理單片機數據流程圖如圖4-3所示。圖4-3雙核心線程處理單片機數據流程圖雙核心數據收發(fā)線程需要處理接收單片機所收到的指令數據,并進行解析單片機所傳達的數據信息;作為系統(tǒng)的“中央處理器”,主控需要對設備進行控制及下發(fā)指令,比如需要亮燈亦或者需要播放來電鈴聲等,都需要經過主控下發(fā)指令給單片機,單片機收到指令之后進行相關的操作。4.1.2開機服務開機服務主要包含三個部分,初始化串口、載入配置文件及初始化線程。由于設備需要掉電后需要儲存親情號碼電話簿、白名單電話簿、TTS語音管家信息等配置信息,最初的實現方法只是使用了IO的操作文件來管理配置信息,最后發(fā)現設備掉電不保存相關配置。
NVM是利用文件實現的一種插入式參數存儲管理模塊,掉電后參數不會丟失,典型的應用場景為:小數據量的簡單鍵值對參數。雖然NVM擦寫次數也有相關的限制,但是一臺設備最少可以擦寫10萬次,已經足夠用戶所使用。為了以防萬一,也使用Lua去減少設備的擦寫次數。比如:將寫入底層的CONFIG配置信息在每次開機時全保存在全局變量中;收集好所有配置信息才將其寫入底層,進行NVM操作等等。因此開機時需要載入配置文件,來保證掉電后參數不丟失。NVM寫參數流程圖如圖4-4所示。圖4-4nvm寫參數流程圖4.1.3按鍵處理按鍵處理線模塊主要將雙核心數據收發(fā)線程所收到的單片機按鍵數據信息解析出來,然后判斷按鍵所對應的是需要報時、撥號還是緊急呼叫,分析完畢再執(zhí)行相關操作。其中涉及緊急輪播需要使用一種對象:迭代器(iterator),用來遍歷table或者數組中標準模板庫中的元素,每個元素具有相對應的地址。迭代器在Lua中可以遍歷集合的每一個元素。pairs函數主要特點是可以遍歷出本身及模板庫的所有元素,也可以遍歷nil值,每次遍歷都輸出是隨機的,還有一個類似的函數ipairs,參考了許多文檔資料及網絡相關知識才明白兩者區(qū)別。相對于pairs函數,ipairs函數限制較多,只能遍歷升序的數組,索引終止便停止遍歷,或者遇到nil便退出遍歷。迭代器在Lua中的作用類似與C語言中的指針,真正弄清楚含義、用法及底層調度需要一定的學習資料及例程實驗量。
總之,ipairs遍歷數組、pairs遍歷數組和table均可遍歷所有key,但是ipairs遍歷數組,只能從1開始升序、按順序遍歷出相對應key,若索引中斷,則退出。[7]按鍵處理最主要使用的函數為pairs來遍歷所存儲的親情號碼table,來完成緊急輪播這一難點。遍歷函數流程圖如圖4-5所示。圖4-5遍歷處理函數流程圖4.1.4網絡主線程收發(fā)線程網絡進程是通過套接字SOCKET來通信的,因此網絡主線程收發(fā)線程主要是通過SOCKET來進行數據鏈路激活、SOCKET管理,SOCKET所創(chuàng)建的IP需要公網IP,局域網IP會導致數據通信失敗??紤]到老人機不會長時間與前端聯(lián)系,只要做好數據重傳與通信重連,就能夠省下許多資源,因此建立UDP連接來完成數據通信。UDP的特點為:UDP通信不保證絕對連接,并且只保證努力交互,因此能夠減小開銷與時延;UDP主機不需要保持常連狀態(tài),是無阻塞控制,不能保證數據及時性也不會影響發(fā)送頻率;UDP的交互通信是多樣化的,如一對一、一對多等;UDP不拆分或合并報文,交付給IP層前之加個協(xié)議頭即從應用層投送;DUP的首部只有8個字節(jié),開銷短,節(jié)約資源。網絡主線程最主要兩個部分是構建數據包并通過UDP發(fā)送及收取UDP信息并解析。[8]構建數據包的方式是通過table的建立與table的插入,將數據整合成table的格式,通過json來對數據進行加密處理。json編譯將table轉化為string,再將string格式化后轉化成字節(jié)數組,才能夠將數據通過UDP發(fā)送出去。以此類推,數據的解析也是先將收到的字節(jié)數組進行解析,提取數據部分進行json解析,解析成table格式再進行分析我們所需要處理的數據。用網絡主線程流程圖如圖4-6所示。圖4-6Lua網絡主線程流程圖4.1.5個性語音TTS提醒線程高齡老人的記憶力逐漸衰退,大部分老人到一定年齡都會出現阿爾茲海默癥的癥狀。據統(tǒng)計,65歲以上老年人群阿爾茨海默病患病率為5.56%,每年老5歲癡呆地風險翻倍,80歲以上的老年人癡呆患病率達到40%。個性語音TTS提醒便于設備管理者通過線上客服端可配置個性的定時鬧鐘語音提醒,到時間點便提醒老人該做某件事情,以至于實現遠程看護老人的基本需求,也降低了兒女及其家人的看護壓力及心理壓力。TTS語音合成技術是將文字智能轉化為自然聲音語音,轉換時間十分迅速。隨著智能語音控制技術的不斷發(fā)展與優(yōu)化,TTS所轉化的語音越來流暢自然,越來越沒有機械的冷漠感。TTS技術具有漢字與英文接口,就算中英文混讀也能夠被識別出來。[9]因此能夠讓設備持有者使用得更加舒適。設備持有者也可以通過設定時間間隔,如周一至周日哪幾日進行提醒、下周是否重復提醒等,至多可以設置九組個性化語音提醒內容。并且利用NVM的插入式參數存儲管理模塊,保證設備掉電保存數據記錄。4.1.6測試模式線程為方便測試模塊硬件設施的好壞,增加了測試模塊音量、電量、信號等參數的語音播報,方便測試模塊、了解模塊的性能。具體數據獲取、處理成功后,通過TTS語音播報出具體數據方便測試者了解設備的具體情況,如喇叭音質、SIM卡信號值是否有誤、電量是否過低、音量對否過大等。 4.2主控設計難點分析4.2.1TTS語音播報與通話沖突測試需要多角度測試,需要考慮正常情況,更需要考慮異常情況。在正常情況設備需要解決的問題難度較低,但是異常情況也需要考慮周全。當設備在通話狀態(tài)時播放TTS會出現設備死機的現象,通過改變硬件設計是解決不了此類問題,就只能通過軟件設計來避免這種沖突。因此,軟件編寫解決這個問題主要關鍵點就是需要將兩種情況合理的分開,避免沖突。audio.play函數是播放TTS的具體函數,該函數是底層封裝好的,沒有標志位來作為參考參數,因此只能在通話時候進行相關處理。而通話的來電檢測采用的是消息訂閱的方式,即sys.subscribe(id,callback)。例如,當來電時,底層發(fā)送“COMMING”的ID告訴上層現在有來電了,這時上層接收到ID后可以進行接通、掛斷或者是免打擾等方式進行處理。這樣就可以訂閱到該消息,callback就可以進行相關的處理。當設備在通話時,callback中可以設置標志位來告知目前為通話狀態(tài);當設備掛斷時候,callback中可以設置標志位來表示掛機狀態(tài)。這樣讓TTS語言播報和通話變成互斥狀態(tài),就能夠防止設備死機。4.2.2低功耗Air724主要有兩種實現低功耗的方式。一種是底層Core內部自動處理,例如TCP發(fā)送或者接收數據時將會自動喚醒,發(fā)送接收結束后將會自動休眠;另一種是Lua腳本使用pm.sleep和pm.wake自行控制,例如,Uart連接外圍設備,Uart接收數據前,要主動去pm.wake,這樣才能保證前面接收的數據不出錯,當不需要通信時,調用pm.sleep。官網的說明書上寫不休眠時功耗至少30mA左右,休眠時候能夠做到3mA,實際運用大量的測試是完全做不到的,就算關閉所有的外設與通信接口都做不到3mA。4.2.3高清VoLTE模塊本身具有高清VoLTE通話,但是因為芯片設計的原因,不同運營商的卡在通話時候,有通話音量不同、音質好壞差距以及通話狀態(tài)反饋差異等問題。此類問題很難通過代碼設計來優(yōu)化,必須通過聯(lián)系廠家,然后提交問題工單并練習技術人員更改底層的參數配置才能夠完成。因此這個問題的解決需要大量的實驗總結及芯片廠商的技術支持的配合才能夠共同解決相關問題。4.3單片機詳細設計4.3.1MCU初始化STC8相關配置設置或參數設置可以參考《STC8系列單片機技術參考手冊》以及STC-ISP下載工具的范例程序。由于單片機的主要作用是給AIR724模塊開機及執(zhí)行命令作用,因此單片機的代碼相對比較簡單,但在實際的開發(fā)與模塊的聯(lián)合通信中,依然存在一定的難度。為了保證兩個模塊通信正常,協(xié)議中添加了一字節(jié)的心跳包,也能通過心跳包來檢測設備是否正常運行。單片機主要邏輯如圖4-7所示。圖4-7單片機主要邏輯STC8系列單片機的I/O口均有4種工作模式:準雙向口(弱上拉)、推挽輸出(強上拉)、高阻輸入(電流既不能流入也不能流出)、開漏輸出。[10]初始化定時器1、串口1,使用11.0592M晶振,串口波特率才準,否則會導致通信失敗等問題。MCU數據收發(fā)是通過UART與AIR724制定相關協(xié)議后,以波特率為9600來進行向主控匯報按鍵情況,主控接收、解析數據后下發(fā)相關指令來控制單片機來連滅燈等工作。I/O工作模式如圖4-8所示。圖4-8I/O口工作模式4.3.2串口通信串口通信是單片機和外圍設備進行數據交換的一種方式。串口通信主要是通過一條發(fā)送數據線與一條數據接收線進行數據傳輸,兩條線分工明確且可以并行執(zhí)行各自工作,實現異步通信以降低按字節(jié)的并行通信對速度的影響。串口將并行數據字符轉換成ASCII碼字符的串行數據流傳輸,其通信最主要的參數為波特率、數據位、停止位及奇偶校驗位。這種通信方式所占用的I/O口少,操作方式簡單,抗干擾性強,其傳輸速率也大大滿足本設計的要求。本設計串口通信數據量少,因此采用串口中斷的方式來對數據進行檢測與處理,單片機在執(zhí)行好下發(fā)的指令后,無其他待辦任務即進入休眠模式,保證設備的低功耗。串口通信中斷接收數據的流程圖如圖4-9所示。圖4-9串口通信中斷接收數據4.4本章小結本章主要根據前一章節(jié)的需求分析,來對主控模塊進行選型分析,最后確定使用Air724UG芯片來作為設計的主控;然后說明了設計中遇到的難點分析,主要是TTS語音與通話的沖突、低功耗的實現以及高清VoLTE通話的實現。這三個難點對設計具有至關重要的作用,設計的本身介紹沒有考慮到TTS與通話的沖突,在設計的多次測試中才發(fā)現有這個問題,因此設計完成后需要大量的測試才能夠保證多場景下設備的穩(wěn)定性。最后介紹了單片機的MCU初始化及串口通信設計詳情。 第5章系統(tǒng)測試及分析5.1定位測試本設計主要是基站定位及Wi-Fi定位。Wi-Fi是一種無線局域網技術,是高效率的移動接入網絡,傳輸穩(wěn)定、快速且低時延,此外Wi-Fi定位技術也發(fā)展的十分迅速。每一個無線AP都會擁有一個與之對應的、類似“身份證”的全球唯一的MAC地址,并且無線AP的位置相對固定。設備開啟Wi-Fi就會主動掃描周圍的AP信號信息及信號強度,即使AP被加密或者是低信號強度的AP都會被掃描收集[11]。根據信號的強弱程度,計算出設備的地理位置并返回到后臺。定位追蹤測試主要是通過設備持有者在室內外中繞圈,設備監(jiān)控者通過App去查看設備位置信息,也可以查詢設備的歷史軌跡信息。定位追蹤測試如圖5-1所示。圖5-1定位追蹤測試圖定位測試方法為掃描多地的路由信息,通過現有WIFI定位網站來輸出設備經緯度及位置信息,并與設備后臺所提供的位置信息做對比分析,具體實驗場景、次數及結果如表5-1所示。表5-1定位測試表主要場景測試次數測試工具準確度CSQ:1-1850轎車92.18%CSQ:1-1850步行95.67%CSQ:18-3550轎車98.12%CSQ:18-3550步行99.99%室內低CSQ50步行98.79%低溫50冰箱91.29%高溫50電熱扇90.23%5.2遠程升級測試許多物聯(lián)網設備要實現遠程升級都有很大的難度,Air724雖然具有遠程升級的接口,但是要依仗合宙廠商的服務器,要求穩(wěn)定并且在自建服務器上實現遠程升級的話,又是一個巨大的挑戰(zhàn)。在實現遠程升級的過程中,兩種方式都嘗試過,最終選擇了在合宙服務器上實現。Air724的升級方式無非也是通過HTTP請求獲取URL的文本信息,再進行版本與固件的對比,在自建服務器和合宙官網都是一個道理。但是合宙為了讓用戶更加離不開自己,將自建服務器上的升級加了限制:可以在自建服務器上升級,但是不能回退更新設備。這將使設備的遠程升級變的雞肋,嘗試多次并請教前輩發(fā)現,如果不按限制去做,升級設備可能導致設備變磚,那就得不償失了。因此最終選擇在合宙的服務器上升級。
在實現遠程升級還遇到一個問題:正常情況下,是否升級是需要按照用戶的需求去實現,但是合宙給的方式都是后臺一鍵升級,那么如何將每臺設備的升級獨立出來是關鍵問題。最終想到的方式是將版本信息儲存在自建服務器上,當有新版本發(fā)布的時候,需要在合宙服務器和自建服務器兩邊同時更新升級包的信息。這樣雖然加了一個步驟,但是更新的文件只要修改更新的版本及更新說明然后替換舊文件即可。正在遠程升級的日志如圖5-2所示。圖5-2遠程升級日志
經過大量的實驗發(fā)現,在合宙升級網上進行遠程,95%的概率能夠升級成功,但是在低信號的情況下,升級將會推遲至下次信號強度中等以上才會進行升級。結果是升級成功的,只是時間的早晚而已。正在遠程升級的設備如圖5-3所示。圖5-3遠程升級設備圖5.3低功耗測試低功耗是本設計的難點之一,多功能呼叫器的重點也是實現低功耗。經過多次的測試發(fā)現,影響設備功耗大小的因素有很多,如信號獲取、基站位置信息獲取、外設數目等等,因此需要根據狀態(tài)進行分析。最終使用PM模塊進行模塊的喚醒與休眠,并將每分鐘獲取一次CSQ和基站位置信息等通信全部關閉進入休眠,測試用5歐電阻,3.7伏鋰電池,將測試時間延長,測量多短周期的平均電壓值,多次測量求取平均休眠電流約為3.9mA,這是最理想的休眠功耗。多功能呼叫器最主要的特點就是低功耗,對于老人來說,肯定是越耐用越好,因此我們Socket連接采用UDP,但是實際上若需要通過App或者小程序來做配置的話,那么肯定需要與外界進行網絡通信的,當有前端有數據下發(fā)設備確處于休眠模式時候,卻又建立不了通信橋梁,這又與低功耗相駁,因此做到低功耗是重點、難點之一??紤]到設備大多時間都需要處于休眠狀態(tài),因此將心跳包作為是否休眠的主要因素。當設備存在心跳包時候,就說明設備未進入休眠,可進行相關操作,喚醒設備的方式簡單、多樣:按鍵操作設備、打電話、發(fā)短信給設備,這樣多樣化的接口與喚醒方式可以使設備變的可控,且易于實現低功耗。示波器測量圖功耗如圖5-4所示:圖5-4示波器測量圖5.4本章小結本章主要是對本系統(tǒng)進行主要模塊進行單獨測試以及檢測設備主要功能的準確性。首先是對定位測試進行對比分析,并給出大量定位實驗的距離統(tǒng)計進行誤差距離分析。其次對最主要的升級方式進行測試說明,對比測試了兩種遠程升級方式的優(yōu)劣性。最后對低功耗模式進行分析處理。第6章總結及展望6.1總結本文對5G迅速發(fā)展導致2G/3G退網后老人設備的發(fā)展進行分析,并結合當今中國所面臨的人口老齡化的社會問題,來開展設計中低速物聯(lián)設備開發(fā)的基于4GCAT.1多功能呼叫器的設計與實現的研究。本文對CAT.1技術、模塊化多線程編程以及呼叫器相關技術進行詳細介紹,在此基礎上設計基于CAT.1多功能呼叫器,完成多功能呼叫器的系統(tǒng)設計及軟件設計,詳細介紹了多功能呼叫器主要的線程內容,最后對系統(tǒng)進行全面測試,測試結果能夠滿足設計需求,實現預期效果。本課題主要完成以下工作:(1)通過相關政策解讀及移動通信的發(fā)展,確定課題的研究意義及內容;通過閱讀大量的Lua程序設計、C語言設計及單片機書籍,來為設計提前儲備好基礎知識。(2)查閱大量關于4GLTE、LTEeMTC、CAT.1等相關技術的資料,對相關技術發(fā)展情況進行了解,結合當今的移動通信發(fā)展與時代背景來確定研究方向。(3)對相關芯片進行產品選型對比,根據需求分析來確定單片機模塊、CAT.1模塊等。(4)對主控模塊軟件進行模塊化多線程編程設計,繪制軟件流程圖,根據流程圖及多線程來編寫程序,進而實現設計的主要功能:與單片機的數據交互、按鍵處理與按鍵命令、網絡信息數據交互、個性語音TTS播報、報時、撥號及測試模式等功能。(5)參考芯片手冊及STC下載軟件,對單片機的輔助C語言開發(fā),主要實現開機初始化、串口通信、燈的控制、按鍵檢測等。(6)制定相關通信的協(xié)議內容,協(xié)調單片機與主控模塊通信工作,并對協(xié)議進行加密解密的規(guī)范。規(guī)范通信模式及通信方式,保證數據交互的準確性與及時性。(7)完成系統(tǒng)的測試。主要包括兩個部分,一部分是對模塊的內部軟件測試,包括定位測試、遠程升級測試;另一部分是對系統(tǒng)的整體測試,如低功耗測試、定位、報警、跟蹤等測試,驗證了設備的可行性。在本次畢業(yè)設計的研究中,以產品來定義畢設才發(fā)現真正要做一個產品的難度非常大。產品不僅要考慮到成本、實用性、人性化等問題,還會遇到各種“疑難雜癥”,如芯片功能某些暫未開發(fā)成功、芯片某些功能存在問題等等。這時候僅僅靠老師、同學還解決不了相對應的問題,還需要尋找廠商技術支持、技術交流群、論壇等尋求幫助。6.2展望基于CAT.1多功能呼叫器雖然實現了預期的目標,通過Lua來開發(fā)主控來實現老人呼叫器的基本需求,但整個系統(tǒng)還有完善的空間。具體表現在以下幾個方面:(1)多功能呼叫器加入實現AI語音智能助手,將更加方便老人去使用,但可能局限于會說普通話的老年用戶。增加AI語音求救方式,便于及時發(fā)現老人處于危險情況,并及時采取相關措施。(2)增加心率檢測、血壓檢測、跌倒檢測等相關看護設計,便于老人的健康監(jiān)測。(3)加入電臺,健康知識科普、養(yǎng)生、娛樂等相關電臺,方便老人解悶或者是學習新知識,加強大腦的運動。參考文獻[1]王蒙.中國人口老齡化問題研究[J].中國經貿導刊(中),2021(03):158-160.[2]守love唯諾的專欄.第二課類型和值./zhenhuax/article/details/53535040.2019-10-25[3]周楊.基于Quest3D的應急預案三維自動演練系統(tǒng)的設計與實現[D].西安電子科技大學,2011.[4]\o"eSIM物聯(lián)工場"eSIM物聯(lián)工場.LTECat1承擔4G物聯(lián)網連接主力的時機已經開啟./forum/topic/81194_1_1.html.2019-11-21合宙.AIR724UG相關手冊.合宙官網.合宙.AIR724UG相關手冊.合宙官網.[7]馮旭.發(fā)行業(yè)連鎖經營庫存管理系統(tǒng)的設計實現[D].哈爾濱工程大學,2014.[8]閔銳.聯(lián)鎖軟件進路控制功能自動測試方法研究[D].北京交通大學,2018.[9]李大筠.TTS在辦公系統(tǒng)的研究與開發(fā)[D].青海師范大學,2012.[10]《STC8系列單片機技術參考手冊》[11]劉宸,李虎群,王強,張哲,崔靖茹.基于無線定位的智慧教室考勤助手APP的設計與研究[J].計算機時代,2018(04):26-28+32.
附錄1部分關鍵源碼及解釋在這部分,將結合具體的源代碼具體說明系統(tǒng)的執(zhí)行流程和邏輯。一、AIR7241.1線程初始化Lua開發(fā)部分代碼主要采用模塊化多線程編程來對軟件進行設計。在LuaTask架構下,線程初始化就是將通過sys.wait(ms)函數的延時操作,來將CPU讓給其他需要運行的程序,在倒計時完成之后又繼續(xù)這個線程的運行,從而實現延時與多線程并發(fā)執(zhí)行。以下是調用線程的詳細代碼:module('main_proc',
package.seeall)require
"dual_core"require
"clog"require
"pm"require
"pmd"require
"sys"require
"global"require
"tools"require
"audio_tts"require
"netproc"require
"config"require
"nvm"require
"lbs_wifi"require
"timing_tts"require
"test_mode"--
設置電壓域--pmd.ldoset(5,pmd.LDO_VMMC)pm.wake("main_proc")clog.debug("something
to
do.End
sleep")--
載入配置文件nvm.init("config.lua")--
初始化串口dual_core.p_ducr_init_uart()--
初始化nvmdual_core.p_ducr_init_nvm()--
保存配置function
p_cfgc_save_config()
local
bool
=
nvm.set("g_cfgc_config",
global.g_cfgc_config)
clog.warning("Write
config:"..tools.true2int(bool))
if
bool
==
true
then
bool
=
1
else
bool
=
0
--
TODO:保存失敗需要重新保存?
end
return
boolend--初始化線程sys.taskInit(dual_core.p_ducr_test_thread)sys.taskInit(dual_core.p_ducr_recv_thread)sys.taskInit(netproc.p_netc_main_thread)sys.taskInit(lbs_wifi.p_lbs_wifi_thread)sys.taskInit(timing_tts.p_timing_tts_thread)sys.taskInit(audio_tts.p_call_check_state)sys.taskInit(test_mode.p_test_mode_thread)1.2網絡主線程網絡進程是通過套接字SOCKET來通信的,主要建立UDP連接來完成數據通信。UDP建立需要保證上次UDP斷開或者是長時間沒有接收到信息需要斷開重連等操作來保證數據通信的準確性。數據通信的前提是SOCKET聯(lián)網成功,并且在沒有信息交互的情況下,要及時進入休眠模式來保證低功耗的實現。事實上,網絡信息交互功耗會比平常工作狀態(tài)高好幾倍。function
p_netc_main_thread()
while
true
do
if
global.g_cfgc_config.g
==
""
then
global.g_cfgc_config.g
=
get_guid_with_imei()
else
if
socket.isReady()
then
if
not
socketClient
and
(reconnect
==
true
or
dual_core.g_key_state
==
1)
then
clog.debug("socketclient
is
fail
try
to
reconnect"..tools.true2int(reconnect))
p_netc_create_socket()
sms.setNewSmsCb(p_netc_sms)
else
if
reboot
==
true
then
p_netc_send_hb_proc()
p_netc_recv_data()
p_netc_recv_proc()
if
nvm.get("devStart")
==
2
then
nvm.set("devStart",
1)
end
if
comm.p_comm_get_sec()
>
300
then
global.g_need_sleep
=
true
end
else
p_lbs_location()
p_sever_resend_msg()
end
end
end
p_net_check_sim_update()
end
if
resend_data_error
==
true
and
comm.p_comm_get_sec()
-
nothing_todo_tim
>15
then
p_netc_create_socket()
resend_data_error
=
false
elseif
comm.p_comm_get_sec()
-
nothing_todo_tim
>30
and
nothing_todo_tim
~=
0
then
pm.sleep("main_proc")
nothing_todo_tim
=
0
global.g_need_sleep
=
true
clog.error("nothing_todo_tim
>30")
end
if
audio_tts.hang_on_send_hb
==
true
and
audio_tts.call_group_state
==
false
then
if
socket.isReady()
then
if
not
socketClient
and
hang_on_hb
==
false
then
p_netc_create_socket()
hang_on_hb
=
true
sys.wait(3000)
clog.error("hang
on
hb
is
resend")
end
end
end
sys.wait(2000)
endendfunction
p_netc_sms(num,data,datetime)
("testScnewsms",num,data,datetime)
local
data_prc
=
nil
data
=
data..data
data_prc
=
string.find(
data,"+WAKEUP",1
)
("data_prc",data_prc)
if
data_prc
~=
nil
then
pm.wake("main_proc")
sms_hb
=
true
lbs_wifi.new_location
=
false
global.g_need_sleep
=
false
locat_msg_send_ok
=
true
clog.error("sms
hb
is
ready")
else
pm.sleep("main_proc")
endendfunction
fast_send(
payload_data
)
local
status_buffer
=
{}
local
status_buff_str
local
payload_buffer
status_buffer[1]
=
0xFF
status_buffer[2]
=
0xAA
status_buffer[3]
=
0X2A
--
主動發(fā)
status_buffer[4]
=
0X10
--
版本
status_buffer[5]
=
bit.rshift(bit.band(pack_idx,
0xFF00),
8)
status_buffer[6]
=
bit.band(pack_idx,
0x00FF)
status_buffer[7]
=
bit.band(string.len(payload_data),
0x00FF)
--小端
status_buffer[8]
=
bit.rshift(bit.band(string.len(payload_data),
0xFF00),
8)
--
字符串數據轉為字符數組
payload_buffer
=
tools.string2hex_table(payload_data)
--tools.table_dump(payload_buffer)
--
測試數據的hex打印是否正確
status_buffer
=
tools.tabledcpy(status_buffer,
#status_buffer
+
1,
payload_buffer,
1,
#payload_buffer)
status_buff_str
=
tools.table2string(status_buffer)
local
CRC
=
crypto.crc16("MODBUS",status_buff_str)
status_buffer[#status_buffer
+
1]
=
bit.band(CRC,
0x00FF)
--小端
status_buffer[#status_buffer
+
1]
=
bit.rshift(bit.band(CRC,
0xFF00),
8)
status_buff_str
=
tools.table2string(status_buffer)
tools.stringdump(status_buffer)
p_netc_send(status_buff_str)
pack_idx
=
pack_idx
+
1
pack_idx
=
pack_idx
%
65536
--
等待數據End1.3測試模式通過sys.waitUntil函數來配置信號量,當測試模式線程接收到需要進入測試模式的信號量時,才開始執(zhí)行測試模式的相關代碼。進入測試模式后,檢測按鍵值來判斷需要執(zhí)行的相關內容,然后播放當前電壓、信號值等或者進行錄音操作。function
p_test_mode_thread(
)
while
true
do
sys.waitUntil("test_mode")
global.g_need_sleep
=
false
if
reboot_fist
==
true
then
clog.error("test
mode
first
boot
")
last_test_mode_time
=
comm.p_comm_get_sec()
dual_core.p_ducr_send_stc(0X46)
--
快閃
reboot_fist
=
false
audio.setMicVolume(7)
audiocore.setsphvol(7)
audio.setCallVolume(7)
audio.setVolume(7)
end
if
record_state
==
2
then
record_state
=
3
dual_core.p_ducr_send_stc(0X42)
--
常亮
end
clog.error("record_state:"..record_state)
if
global.g_key_value
~=
""
and
global.g_key_type
~=
""
and
record_state
==
0
then
last_test_mode_time
=
comm.p_comm_get_sec()
if
audio_tts.hang_on
==
false
then
if
global.g_key_value
==
1
then
--
短按
dual_core.p_ducr_send_stc(0X4A)
--
播放當前電壓
local
get_vbatt
=
string.format(
"%4d",
misc.getVbatt())
get_vbatt
=
string.sub(
get_vbatt,1,1).."."..string.sub(
get_vbatt,2,4)
net.cengQueryPoll()
local
csq
=
net.getRssi()
local
myversion
=
_G.DATA
audio.play(6,
"TTS",
"當前電壓"..get_vbatt,
global.g_tts_volume)
sys.wait(4000)
audio.play(6,
"TTS",
"信號"..csq,
global.g_tts_volume)
sys.wait(3000)
audio.play(6,
"TTS",
"版本"..myversion,
global.g_tts_volume,
testCb)
end
if
global.g_key_value
==
2
then
if
global.g_key_type
==
1
then
--
長按SOS進入錄音5s
time_ID2
=
sys.timerStart(record.start,1500,5,rcdcb)
audio.play(7,
"TTS",
"開始錄音",
global.g_tts_volume)
record_state
=
1
dual_core.p_ducr_send_stc(0X46)
--
快閃
elseif
global.g_key_type
==
2
then
--
長按撥號退出測試模式
audio.play(7,
"TTS",
"退出測試模式",
global.g_tts_volume)
dual_core.p_ducr_send_stc(0X41)
--熄滅
dual_core.test_mode_state
=
3
global.g_need_sleep
=
true
sys.timerStopAll(sys.publish)
end
end
global.g_key_value
=
""
global.g_key_type
=
""
end
end
if
comm.p_comm_get_sec()
-
last_test_mode_time
>
60
then
audio.play(7,
"TTS",
"退出測試模式",
global.g_tts_volume)
dual_core.test_mode_state
=
3
global.g_need_sleep
=
true
sys.timerStopAll(sys.publish)
dual_core.p_ducr_send_stc(0X41)
--熄滅
audiocore.setsphvol(6)
audio.setCallVolume(6)
audio.setVolume(6)
end
if
socket.isReady()
and
tts_state
==
false
then
audio.play(7,
"TTS",
global.g_tts_default.test_mode,
global.g_tts_volume,testCb)
tts_state
=
true
end
endend1.4位置信息上報設備位置經緯度檢測走的是相同的通道,當優(yōu)先級高的定位方式信號值高且定位成功則采用優(yōu)先級高的定位方式。當優(yōu)先級高的定位失敗則會采取基站定位來確定設備的大體位置。獲取位置信息之后及時上傳并接收反饋信息后要及時進入低功耗模式,位置信息獲取及上報也會導致高功耗。local
try_Again
=
falsesys.taskInit(function()
while
true
do
sys.waitUntil("WIFI_SCAN_READY")
wifiScan.request(function(result,cnt,tInfo)
sys.publish("WIFI_SCAN_IND",result,cnt,tInfo)
end)
local
_,result,cnt,tInfo
=
sys.waitUntil("WIFI_SCAN_IND")
if
result
then
lbsLoc.request(function(result,lat,lng)
("testLbsLocwifi.getLocCb",result,lat,lng,type(lng))
global.g_cfgc_config["loctype"]
=
2
if
lat
~=
"0"
and
lat
~=
nil
then
global.g_need_sleep
=
false
global.g_wifi_lat
=
lat
global.g_wifi_lng
=
lng
if
audio_tts.alarm_state
==
false
and
locat_now
~=
true
then
lbs_wifi_loction
=
true
end
if
locat_now
~=
true
then
new_location
=
true
netproc.locat_msg_send_ok
=
false
else
locat_now
=
false
end
try_Again
=
false
elseif
try_Again
==
false
then
try_Again
=
true
sys.publish("WIFI_SCAN_READY")
end
sys.publish("LBS_WIFI_LOC_IND",result,lat,lng)
end,false,false,false,false,false,false,tInfo)
local
_,result,lat,lng
=
sys.waitUntil("LBS_WIFI_LOC_IND")
else
reqLbsLoc()
if
locat_now
~=
true
then
netproc.locat_msg_send_ok
=
false
else
locat_now
=
false
end
if
audio_tts.alarm_state
==
false
and
locat_now
~=
true
then
lbs_wifi_loction
=
true
new_location
=
true
try_cont
=
5
end
global.g_need_sleep
=
false
end
endend)單片機2.1主函數主函數主要是初始化設備基本參數、初始化時鐘、串口等,然后對USB狀態(tài)、燈狀態(tài)就是否休眠進行相關配置。#include"config.h"#define WDT_CLR 0x10 //看門狗計時清零u8iSleep_Cnt;/*主函數*/voidmain(void){ intcnt=0;//USB接入判斷次數 GSM_ioinit(); p_sysclk_init(); p_timer_init(); p_uart1_init(); p_uart2_init(); GSM_iostart(); /**************************************************/ //開機參數配置 ResetPara(); while(1) { //若USB插進來,且模塊沒有回復則進行開機操作 if(powerin==1)//判斷IO口是否接入高電平 { if((PWERIN==1))//判斷串口是否接收
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦卒中病人的出院準備與社區(qū)康復
- 2026山東淄博文昌湖省級旅游度假區(qū)面向大學生退役士兵專項崗位招聘1人備考題庫完整答案詳解
- 跨境電商獨立站2025年服務器維護協(xié)議
- 初級紅十字救護員考試及答案
- 中國地理熱點試題及答案
- 2025-2026人教版初一語文上期測試卷
- 2025-2026一年級道德與法治期末卷
- 體育保管室衛(wèi)生管理制度
- 售樓處案場衛(wèi)生制度
- 衛(wèi)生室疫情報告制度
- 量子科普知識
- 2025至2030中國航空安全行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 華潤燃氣2026屆校園招聘“菁英計劃·管培生”全面開啟備考考試題庫及答案解析
- 成本管理論文開題報告
- 華潤集團6S管理
- 新建粉煤灰填埋場施工方案
- 2025年提高缺氧耐受力食品行業(yè)分析報告及未來發(fā)展趨勢預測
- 小學三年級數學判斷題100題帶答案
- 互聯(lián)網運維服務保障承諾函8篇范文
- 2025年(第十二屆)輸電技術大會:基于可重構智能表面(RIS)天線的相控陣無線通信技術及其在新型電力系統(tǒng)的應用
- 電力三種人安全培訓課件
評論
0/150
提交評論