【《基于4G.CAT.1和单片机的多功能老人呼叫器设计》15000字】_第1页
【《基于4G.CAT.1和单片机的多功能老人呼叫器设计》15000字】_第2页
【《基于4G.CAT.1和单片机的多功能老人呼叫器设计》15000字】_第3页
【《基于4G.CAT.1和单片机的多功能老人呼叫器设计》15000字】_第4页
【《基于4G.CAT.1和单片机的多功能老人呼叫器设计》15000字】_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE5PAGE4基于4G.CAT.1和单片机的多功能老人呼叫器设计摘要随着移动通信及移动智能设备的飞速发展,2G/3G网络因满足不了人们日益增长的网络速度需求而逐步退出历史的舞台,备受此影响的是适应不移动智能设备的老年人们。据调查,我国已步入老龄化社会,老年人口基数大且呈有逐年上涨的趋势。此外,大部分老年人都与儿女分居两地,“空巢老人”、“老人走失”等社会问题引起社会的广泛关注,因此开发服务于老人的移动基础设备具有极大的应用意义及社会价值。本设计旨在设计一款多功能老人呼叫器,便于儿女及时发现老人的异常情况、远程康护老人的日常生活并了解老人的日常活动轨迹,给予老人更多地关爱与照顾。本设计创新点在于主控为Air724的4GCAT.1,是使用Lua脚本语言开发,再以单片机STC8F2K16S2为辅助的产品设计。CAT.1能够实现VoLTE通话,若按常规方式将主逻辑安排在单片机上,会增加代码与模块的冗余度,这样的设计很好地将设计成本、体积以及系统优化到最好。实现本设计从市场调研、产品选型,到查阅CAT.1相关资料,再到将书籍上的C与Lua转化为设计中的软件设计,都付出了很多的时间与精力。本文主要负责阐述以线程为主体的主控Air724CAT.1逻辑开发功能的Lua开发、单片机辅助C开发及系统的全面测试。单片机主要实现与主控之间的通信、执行主控下达命令及控制灯与按键检测;主控负责实现呼叫器的所有功能设计;最终进行模块测试、接口测试及系统测试来确保设计的可靠性与完成度。基于4GCAT.1多功能呼叫器的系统运行测试表明可以实现一键呼救、一键报警、个性化语音提醒、定位追踪等功能,能为老人的日常生活及健康提供一种有效的监护预警手段。关键词:老龄化,移动通信,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章系统设计方案 5209593.1需求分析 5201973.2系统总体方案设计 670423.3本章小结 814868第4章系统设计的实现 989154.1主控详细设计 9261484.2主控设计难点分析 146954.3单片机详细设计 1571314.4本章小结 1723684第5章系统测试及分析 18113245.1定位测试 1897725.2远程升级测试 19252135.3低功耗测试 21160905.4本章小结 221732第6章总结及展望 2395236.1总结 23327246.2展望 2317623参考文献 2521260附录1部分关键源码及解释 2715588一、AIR724 2732098二、单片机 34PAGE5绪论1.1研究背景及意义根据国际公认的人口老龄化标准,当某个国家或地区60周岁人及以上人口超过总人口数的10%或65周岁及以上人口超过总人口数的7%时,就表明该国家或地区已经步入人口老龄化社会。据国家统计局统计2019年中国人口数据,我国60周岁及以上人口占18.1%;65周岁及以上人口占比12.6%[1],且呈逐年上升的趋势,因此人口老龄化是中国人口均衡发展中所面临的重要挑战。而当今社会中,成人子女大多都与父母两地分居,因此成人子女很难做到对父母的健康状况、高龄老人行为轨迹的实时监控,所以空巢老人独居、走失等社会现象受到社会的广泛关注。据统计,目前三大运营商的移动电话用户数将近16亿户,其中将近2亿户人依然在是2G/3G用户。2G/3G用户大部分都是老年人,老年人视力差、反应迟钝、记忆模糊,很难适应智能机的操作。但因2G/3G逐渐退网,这部分用户将不得不换手机卡、手机来顺应网络时代的发展。人口老龄化阻止不了2G全面退网,因此老人机及老人呼叫器也需要得到发展与升级,我们依然需要为满足老年人日益增长的精神文化需求而努力。社会迅速发展的同时,不能遗忘脚步缓慢的人,不然终将我们也会成为被世界抛弃的一类人,因此研究一款能够满足老年人基本需求的产品是迫在眉睫的事情。而老人的多功能呼叫器的基本需求是使用简单、操作方便,音量大、拨号等特点,属于中低速业务的设计,可以采用CAT.1来实现其功能设计。CAT.1的推动大大优化了各大业务覆盖的范围,支持更多中低速物联网业务的开发与设计,提高了多功能呼叫器实现的可行性。1.2研究内容多功能呼叫器主要由设备端、大数据云平台和多功能呼叫器App构成,整个系统结合中低速物联网、Wi-Fi/LBS定位、Socket等技术,实现设备端、云端和App端实时的数据交互,使服务于老年人的安全监测变得更加信息化和智能化。多功能呼叫器实现了对老年人的生活动态位置、日常生活提醒及人身安全的实时监测,同时还具有Wi-Fi/LBS定位和一键报警功能以应对突发状况。App可远程实时监测老人情况、把控各项数据,同时也可下发相关配置来帮助老人制定每日计划。本文的主要研究内容包括一键报警检测和数据融合的协议研究、整个主控系统4GCAT.1模块的软件设计,实现一款性价比高、功能强、功耗低、操作简单的多功能呼叫器,最终经过相关性能测试以及功能测试,验证本系统的可行性及稳定性。1.3论文组织本论文共分为六章来对研究内容及工作进行阐述:第一章为本文的绪论,本章主要阐述选题研究背景、意义及内容,介绍当前人口老龄化及2G/3G全面退网的社会背景及CAT.1技术的发展现状,提出本系统地设计并介绍本设计的主要实现功能,最后再对本论文的论文组织加以陈述。第二章为本设计关于Lua及CAT.1技术背景知识及CAT.1技术介绍。首先介绍关于设计的背景知识,然后对主控所用到的Lua语言进行介绍,最后阐述CAT.1技术的发展与功能。第三章为系统具体设计方案,本章介绍了多功能呼叫器的系统总体方案设计及需求分析。需求主要详细分析了功能需求及非功能需求两个方面,再对系统的结构与主控模块的选型进行具体分析。第四章为系统设计的实现,主要从模块化多线程编程方向重点说明了主控的详细设计,详细说明主要的六大线程,并对重要的技术及用法设计进行具体介绍,然后介绍了主控本设计难点,最后介绍了单片机设计的MCU初始化及串口通信。第五章为系统测试及分析,包括硬件测试、软件测试及测试问题的解决方案分析。第六章为文章的总结,并提出展望。 第2章背景知识及相关技术介绍2.1背景知识本课题为基于4GCAT.1多功能呼叫器,主控Air724的4GCAT.1芯片支持二次开发,可以通过Lua、AT、CSDK开发,本设计主要由Lua语言开发来实现设计,因此需要对Lua语言进行系统性的学习,了解CAT.1的发展情况及业务分布情况。2.2Lua语言简介1993年巴西里约热内卢,Lua被天主教大学一个研究小组研发,是一种能够被应用程序灵活扩展的脚本语言,被游戏行业广泛运用的“胶水语言”,最著名的游戏莫过于魔兽世界。Lua是嵌入式的脚本语言,特点是轻量、高效、简单,可扩展等,它可独立进行编程,也可作为一个库嵌入到其他宿主语言的应用程序中,因此在嵌入式系统、物联网、游戏、移动设备等领域被广泛地运用。Lua的底层实际上也是通过C语言来实现的,只是被设计成能为C/C++及其他常用语言开发的软件集成一起使用,这样成功的弥补了C语言在高级抽象能力、动态结构及调试能力等方面的不足。Lua语言是一种动态类型的语言,它没有类型定义,每个值都带有自身的类型信息[2]。Lua语言具有标准库,用户可以根据需求来选择使用Lua语言的方法:在自己的程序中嵌入Lua语言、直接使用Lua语音开发或者是结合其他语言一并开发[3]。Lua语言能够提供多样化功能的API供使用者调用。随着Lua的发展,越来越多的教程及文献对Lua语言进行分析与解读,将为设计提供莫大的帮助与支持。2.3CAT.1简介CAT.1的全称是LTEUE-Category1,UserEquipment简写是其中的UE,是对在4GLTE网络下终端设备无线性能的一种“低配版4G”,也具有推动蜂窝物联网代际迁移的潜力。根据3GPP标准规范,UECategory是可以在上行链路/下行链路中更改的一组无线性能参数,换句话说,基站和用户终端通过各种UE类别参数确定用户设备支持的速率,基站根据UECategory来调整其他参数来与用户终端正常通信。[4]CAT.1适用于中低速的蜂窝物联网产品的发展,对补齐物联网产品主要运用场景需求有巨大的意义。CAT.1主要优点有能够无缝接入现有LTE网络、集成度高、传输快、价格低等,这恰好满足4G老人机的基本需求。多功能呼叫器主要需求为通话和少量数据传输,而CAT.1支持VoLTE高清通话及成本低的低速率数据传输,此外已有集成TTS、Wi-Fi定位等拓展功能的CAT.1模块。蜂窝物联网业务分布如图2-1所示,发展好CAT.1网络及相关产业对优化物联网各大类业务有至关重要的作用。图2-1蜂窝物联网业务分布LTECAT.1不需要对基站进行软硬件的修改与升级就可无缝接入LTE网络中,这样在很大的程度上降低了网络覆盖成本;此外LTECAT.1模块性价比高、集成度高、模组硬件架构简单的优点让CAT.1的优势大大超过了Cat.4。CAT.1具有毫秒级传输时延,与Cat.4相同的能够支持100km/H以上的移动速度,因此CAT.1在物联网技术开启万物互联的场景中具有得天独厚的优势。2.4本章小结本章主要对本设计中使用的一些技术和概念进行了介绍。先介绍了本设计的背景知识,再介绍本课题实现所采用的脚本语言Lua,然后介绍了蜂窝物联网业务分布及CAT.1所处的地位与作用,最后介绍了所使用的主控芯片采用的网络技术。第3章系统设计方案3.1需求分析3.1.1功能需求分析由于本设计面向高龄老人,因此设计需要操作简单、拨号方便、音量大等特点,本设计可以实现以下功能:一键拨号、一键求救功能。由于老人记忆力减退、交际圈较小,大部分都是联系自己的儿女。本设计可以设置一个常用号码,方便父母有事情一键拨打给自己的常用联系人;另外可设置五组紧急呼叫号码,当老人有紧急事件需要一键报警求救时,可以轮播五组电话号码,直到有一组号码接通为止。并且设备监护人将会受到报警信息与老人的位置信息,方便设备监护人及时实施救援。大音量语音报时。时间对老人来说依然十分重要,现在的老人机屏幕小、时间字体大,老人依然需要眯着眼睛仔细看,大音量语音报时能够解决老人看不清时间的问题。定位跟踪功能。具有LBS及Wi-Fi室内辅助定位,能够实现老人实时定位,通过手机App实时监测老人的位置信息,并且能够实时将定位信息上传至服务器,将位置信息生成老人的实时路径与历史路径,方便儿女等家人掌握老人的动态位置信息,并对数据进行保存和调用。[5]防骚扰。可以通过手机设置防骚扰功能,将能够接通的号码设置成白名单,避免其他诈骗电话、骚扰电话等拨号给老人,减少老人被电话诈骗、电话骚扰的次数,增加老人的安全性。来电提醒。能够自动识别来电号码是不是后台所设置的白名单联系人或者是亲情联系人,若是已存入的号码,则会有来电铃声来提示亲情号码或白名单号码的备注;若不是,则只播放来电铃声。如亲情号码张三来电,来电铃声为:“主人,张三来电话啦”。设备持有者可选择接听或挂断。设备监护人可以设置来电自动接听或者响铃几声后自动接听等。个性化语音服务管家提醒。设备监护人能够通过手机来个性化设置闹钟及提示信息,提醒设备持有者到点进行相应的活动,如制定早上8:00闹钟提醒老人吃药,当时间到早上8:00时,设备将会提醒:“该吃药了”等信息,信息内容可以个性化设置。远程升级。设备支持远程升级,方便维护并且遇到紧急问题能够及时覆盖有问题版本,及时将损害降到最低从而节省成本。3.1.2非功能需求分析设备的原生开发在移动设备与智能网络科技高速发展的情况下,已经无法满足日新月异变化的需求。为了满足多功能呼叫器的设备可靠性与系统性,让设计更有研究、设计与实现的意义,还需要满足以下非功能性需求。稳定性。稳定性是设备最基本的要求。为了确保设备稳定性,就需要对产品进行风险预测分析,并且对不同场合进行风险包容性检测与对代码错误、运行异常的进行及时处理,保证老人使用的得心应手。扩展性。从设备的功能与老人的需求分析,设备功能需要不断优化与丰富来满足老人日益增长的精神上的需求度,才不会被网络时代的快速发展所淘汰。时代在进步,老人也需要逐步的跟上时代的步伐,科技网络的发展不可能放慢脚步,但产品的设计开发可以不断拓展来包容脚步缓慢的老人们。可拓展性强的产品才会有更多的无限可能来包容老人的需求。可维护性。随着移动用户对互联网产品品质的要求不断提高,越来越多的产品被设计出来适应多样化的需求,但许多产品因维护难度大而失去了很大的市场。特别是许多物联网无法实现远程升级或者升级难度大等问题,需要用户寄回产品或者是到现场去排查故障等原因,导致维护成本高且会降低客户的满意度,因此产品的可维护性十分重要。低功耗。由于老人对呼叫器的性能不是很高但需要设备能够将续航时间延长,因此需要实现低功耗来优化产品的使用。呼叫器大部分的时间应该处于省电模式,除了有相应的操作或者配置才需要进行设备唤醒,做好低功耗是设备的重点之一。3.2系统总体方案设计3.2.1系统结构多功能呼叫对宽带传输速率的要求不高,不需要以Cat.4的速率来适配,因此使用相差无几且性价比高的CAT.1来作为主控是十分切合的。多功能呼叫器可设计成小模块让使用者随身携带,设备定时将设备位置信息提交云服务器进行分析或保存,形成历史记录及历史轨迹,方便设备监控者随时查看设备使用者的位置信息,设备监控者也可以使用SMS短信服务远程唤醒设备。本设计系统结构主体框架如图3-1所示。本设计将定位技术、SMS短信服务技术及无线通信技术的相互融合,以AIR724模块作为主控的多功能报警器实现了远程对老人安全的监控与保障,有效地保证了老人的安全与身心健康。图3-1系统结构主体框架多功能呼叫器设计主体Air724的4GCAT.1,单片机STC8F2K16S2作为辅助并控制其他外设的产品设计。主控主要是用Lua脚本语言开发,STC8主要是用C语言开发。设计主体主要分为五个部分,灯控、按键控制、电源控制、单片机控制及CAT.1主控。灯及按键等均通过STC8的GPIO来连接,AIR724UG通过UART连接在STC8上。STC8相当于设备的中转站,中转设备的外设状态及接收控制外设指令并实施;AIR724UG相当于中央处理器,是多功能呼叫器的核心,所有的处理指令都是通过AIR724UG来分析完成的。多功能呼叫器的系统总体框架如图3-2所示。图3-2系统总体框架3.2.2系统主控芯片目前市场上微控制单元(MCU)的种类繁多,最常见的包括寄存器少、价格低的51单片机;性价比高、功能强大的意法半导体STM32相关产品;指令精简、框架强大的PIC系列单片机等等。经过市场地调研,大部分物联网产品都会以此类MCU作为主控。多功能呼叫器的需求及设计若以此类MCU作为主控,则需要加入更多的外设及投入更高的成本,将会使设计的性价比下降。为了选择出一款编程简便、性价比高、不造成资源浪费又同时满足设计需求的主控芯片,应该考虑以下因素:主控的体积小,成本低;主控的GPIO至少两个,至少一个UART;主控省电模式及工作模式的功耗要低,进入省电模式方式简单;主控开发难度小,易上手,且现有的参考资料、开发教程易查找;主控集成度高,稳定性强。综合上述几点性能要求,考虑各方面的因素,本系统最终选用AIR724系列芯片作为主控。AIR724UG芯片功能强大,内置丰富的网络协议,且支持多种驱动配置。此外,AIR724UG还集成多个工业标准接口,在老人机、安防、工业互联、车载等中低速速率传输的领域具有很广的应用范围。AIR724UG外设接口丰富,支持VOLTE、SPILCD、SPICamera等功能,性价比高、实时性好、集成度高且功能强大。此芯片还支持多种开发方式,如CSDK开发、Luat脚本二次开发、AT指令开发等,丰富的开发模式可以被广泛应用与各种控制领域当中。AIR724UG具有LTECAT.1bis模块的超小封装(即邮票孔+LGA的封装),采用的是紫光展锐的UIS8910平台,支持LTE3GPPRel.13技术[5]。硬件部分主要采用AIR724UG芯片和STC8F2K16S2,根据芯片手册来设计系统设备硬件端的电源模块、主控模块、单片机模块及SIM卡卡槽模块等,运用AD软件来设计整个系统是详细设计。所有的配件及芯片选型都经过精心对比,参考相关芯片手册、AD软件设计相关书籍及布板美观技巧等,才实行硬件的原理图绘制和PCB设计。3.3本章小结本章对本系统的需求进行功能需求及非功能需求两个方面进行分析,再对系统设计的主控芯片详细分析,介绍系统主要结构以及主控模块的选型工作,并介绍了AIR724UG芯片的主要功能。第4章系统设计的实现4.1主控详细设计主控AIR724UG主要采用模块化多线程编程来对软件进行设计。所谓的模块化多线程编程就是将模块分为多线程,将每个子线程用流程图表示出来,通过中间变量使各个线程同时工作、相互调度,从而组成一个完整的程序。这样能够大大降低程序的复杂程度,使调试与维护变得更加方便快捷。主控AIR724UG的软件设计部分使用的是Lua的开发方式,存在一定的开发难度。主控程序主要由多线程组成,当主控程序中创建了多线程时,由于每一条线程执行速度很短,会给人同一时刻有多个线程同时执行的错觉,但实际上多线程时并非并发的。每个线程的执行是通过CPU的调度来决定的,一个CPU只能执行一个线程。虽然很难确定在一个时间片内具体执行的是哪一个线程,但是我们可以设置线程的优先级,来保证线程合理的被执行与分配。本系统软件设计主要包含六大模块:双核心数据收发线程、开机服务、按键处理、网络主线程收发线程、个性化定时TTS提醒、测试模式线程。本设计主控的程序流程图如图4-2所示。图4-2主控程序流程图4.1.1双核心数据收发线程由于AIR724UG模块开机需要拉低PWRKEY管脚1.5秒,然后检测V_GLOBAL_1V8管脚的电平的高低来判断模块是否开机成功。因此模块需要借助STC8来进行开关机,STC8低功耗技术也十分精湛。STC8通过UART与AIR724UG相连接,AIR724UG有三个串口,每个串口的主要功能都各不相同。本设计所使用的UART1主要作用是与外设通信,AT命令和数据传输,所支持的最大波特率921600bps,默认115200bps,且支持硬件流控(CTS/RTS)。双核心数据收发线程即单片机与主控之间的数据传输,UART初始化为最普遍的配置:波特率9600,8位数据位,无校验,1位停止位。[6]双核心线程处理单片机数据流程图如图4-3所示。图4-3双核心线程处理单片机数据流程图双核心数据收发线程需要处理接收单片机所收到的指令数据,并进行解析单片机所传达的数据信息;作为系统的“中央处理器”,主控需要对设备进行控制及下发指令,比如需要亮灯亦或者需要播放来电铃声等,都需要经过主控下发指令给单片机,单片机收到指令之后进行相关的操作。4.1.2开机服务开机服务主要包含三个部分,初始化串口、载入配置文件及初始化线程。由于设备需要掉电后需要储存亲情号码电话簿、白名单电话簿、TTS语音管家信息等配置信息,最初的实现方法只是使用了IO的操作文件来管理配置信息,最后发现设备掉电不保存相关配置。

NVM是利用文件实现的一种插入式参数存储管理模块,掉电后参数不会丢失,典型的应用场景为:小数据量的简单键值对参数。虽然NVM擦写次数也有相关的限制,但是一台设备最少可以擦写10万次,已经足够用户所使用。为了以防万一,也使用Lua去减少设备的擦写次数。比如:将写入底层的CONFIG配置信息在每次开机时全保存在全局变量中;收集好所有配置信息才将其写入底层,进行NVM操作等等。因此开机时需要载入配置文件,来保证掉电后参数不丢失。NVM写参数流程图如图4-4所示。图4-4nvm写参数流程图4.1.3按键处理按键处理线模块主要将双核心数据收发线程所收到的单片机按键数据信息解析出来,然后判断按键所对应的是需要报时、拨号还是紧急呼叫,分析完毕再执行相关操作。其中涉及紧急轮播需要使用一种对象:迭代器(iterator),用来遍历table或者数组中标准模板库中的元素,每个元素具有相对应的地址。迭代器在Lua中可以遍历集合的每一个元素。pairs函数主要特点是可以遍历出本身及模板库的所有元素,也可以遍历nil值,每次遍历都输出是随机的,还有一个类似的函数ipairs,参考了许多文档资料及网络相关知识才明白两者区别。相对于pairs函数,ipairs函数限制较多,只能遍历升序的数组,索引终止便停止遍历,或者遇到nil便退出遍历。迭代器在Lua中的作用类似与C语言中的指针,真正弄清楚含义、用法及底层调度需要一定的学习资料及例程实验量。

总之,ipairs遍历数组、pairs遍历数组和table均可遍历所有key,但是ipairs遍历数组,只能从1开始升序、按顺序遍历出相对应key,若索引中断,则退出。[7]按键处理最主要使用的函数为pairs来遍历所存储的亲情号码table,来完成紧急轮播这一难点。遍历函数流程图如图4-5所示。图4-5遍历处理函数流程图4.1.4网络主线程收发线程网络进程是通过套接字SOCKET来通信的,因此网络主线程收发线程主要是通过SOCKET来进行数据链路激活、SOCKET管理,SOCKET所创建的IP需要公网IP,局域网IP会导致数据通信失败。考虑到老人机不会长时间与前端联系,只要做好数据重传与通信重连,就能够省下许多资源,因此建立UDP连接来完成数据通信。UDP的特点为:UDP通信不保证绝对连接,并且只保证努力交互,因此能够减小开销与时延;UDP主机不需要保持常连状态,是无阻塞控制,不能保证数据及时性也不会影响发送频率;UDP的交互通信是多样化的,如一对一、一对多等;UDP不拆分或合并报文,交付给IP层前之加个协议头即从应用层投送;DUP的首部只有8个字节,开销短,节约资源。网络主线程最主要两个部分是构建数据包并通过UDP发送及收取UDP信息并解析。[8]构建数据包的方式是通过table的建立与table的插入,将数据整合成table的格式,通过json来对数据进行加密处理。json编译将table转化为string,再将string格式化后转化成字节数组,才能够将数据通过UDP发送出去。以此类推,数据的解析也是先将收到的字节数组进行解析,提取数据部分进行json解析,解析成table格式再进行分析我们所需要处理的数据。用网络主线程流程图如图4-6所示。图4-6Lua网络主线程流程图4.1.5个性语音TTS提醒线程高龄老人的记忆力逐渐衰退,大部分老人到一定年龄都会出现阿尔兹海默症的症状。据统计,65岁以上老年人群阿尔茨海默病患病率为5.56%,每年老5岁痴呆地风险翻倍,80岁以上的老年人痴呆患病率达到40%。个性语音TTS提醒便于设备管理者通过线上客服端可配置个性的定时闹钟语音提醒,到时间点便提醒老人该做某件事情,以至于实现远程看护老人的基本需求,也降低了儿女及其家人的看护压力及心理压力。TTS语音合成技术是将文字智能转化为自然声音语音,转换时间十分迅速。随着智能语音控制技术的不断发展与优化,TTS所转化的语音越来流畅自然,越来越没有机械的冷漠感。TTS技术具有汉字与英文接口,就算中英文混读也能够被识别出来。[9]因此能够让设备持有者使用得更加舒适。设备持有者也可以通过设定时间间隔,如周一至周日哪几日进行提醒、下周是否重复提醒等,至多可以设置九组个性化语音提醒内容。并且利用NVM的插入式参数存储管理模块,保证设备掉电保存数据记录。4.1.6测试模式线程为方便测试模块硬件设施的好坏,增加了测试模块音量、电量、信号等参数的语音播报,方便测试模块、了解模块的性能。具体数据获取、处理成功后,通过TTS语音播报出具体数据方便测试者了解设备的具体情况,如喇叭音质、SIM卡信号值是否有误、电量是否过低、音量对否过大等。 4.2主控设计难点分析4.2.1TTS语音播报与通话冲突测试需要多角度测试,需要考虑正常情况,更需要考虑异常情况。在正常情况设备需要解决的问题难度较低,但是异常情况也需要考虑周全。当设备在通话状态时播放TTS会出现设备死机的现象,通过改变硬件设计是解决不了此类问题,就只能通过软件设计来避免这种冲突。因此,软件编写解决这个问题主要关键点就是需要将两种情况合理的分开,避免冲突。audio.play函数是播放TTS的具体函数,该函数是底层封装好的,没有标志位来作为参考参数,因此只能在通话时候进行相关处理。而通话的来电检测采用的是消息订阅的方式,即sys.subscribe(id,callback)。例如,当来电时,底层发送“COMMING”的ID告诉上层现在有来电了,这时上层接收到ID后可以进行接通、挂断或者是免打扰等方式进行处理。这样就可以订阅到该消息,callback就可以进行相关的处理。当设备在通话时,callback中可以设置标志位来告知目前为通话状态;当设备挂断时候,callback中可以设置标志位来表示挂机状态。这样让TTS语言播报和通话变成互斥状态,就能够防止设备死机。4.2.2低功耗Air724主要有两种实现低功耗的方式。一种是底层Core内部自动处理,例如TCP发送或者接收数据时将会自动唤醒,发送接收结束后将会自动休眠;另一种是Lua脚本使用pm.sleep和pm.wake自行控制,例如,Uart连接外围设备,Uart接收数据前,要主动去pm.wake,这样才能保证前面接收的数据不出错,当不需要通信时,调用pm.sleep。官网的说明书上写不休眠时功耗至少30mA左右,休眠时候能够做到3mA,实际运用大量的测试是完全做不到的,就算关闭所有的外设与通信接口都做不到3mA。4.2.3高清VoLTE模块本身具有高清VoLTE通话,但是因为芯片设计的原因,不同运营商的卡在通话时候,有通话音量不同、音质好坏差距以及通话状态反馈差异等问题。此类问题很难通过代码设计来优化,必须通过联系厂家,然后提交问题工单并练习技术人员更改底层的参数配置才能够完成。因此这个问题的解决需要大量的实验总结及芯片厂商的技术支持的配合才能够共同解决相关问题。4.3单片机详细设计4.3.1MCU初始化STC8相关配置设置或参数设置可以参考《STC8系列单片机技术参考手册》以及STC-ISP下载工具的范例程序。由于单片机的主要作用是给AIR724模块开机及执行命令作用,因此单片机的代码相对比较简单,但在实际的开发与模块的联合通信中,依然存在一定的难度。为了保证两个模块通信正常,协议中添加了一字节的心跳包,也能通过心跳包来检测设备是否正常运行。单片机主要逻辑如图4-7所示。图4-7单片机主要逻辑STC8系列单片机的I/O口均有4种工作模式:准双向口(弱上拉)、推挽输出(强上拉)、高阻输入(电流既不能流入也不能流出)、开漏输出。[10]初始化定时器1、串口1,使用11.0592M晶振,串口波特率才准,否则会导致通信失败等问题。MCU数据收发是通过UART与AIR724制定相关协议后,以波特率为9600来进行向主控汇报按键情况,主控接收、解析数据后下发相关指令来控制单片机来连灭灯等工作。I/O工作模式如图4-8所示。图4-8I/O口工作模式4.3.2串口通信串口通信是单片机和外围设备进行数据交换的一种方式。串口通信主要是通过一条发送数据线与一条数据接收线进行数据传输,两条线分工明确且可以并行执行各自工作,实现异步通信以降低按字节的并行通信对速度的影响。串口将并行数据字符转换成ASCII码字符的串行数据流传输,其通信最主要的参数为波特率、数据位、停止位及奇偶校验位。这种通信方式所占用的I/O口少,操作方式简单,抗干扰性强,其传输速率也大大满足本设计的要求。本设计串口通信数据量少,因此采用串口中断的方式来对数据进行检测与处理,单片机在执行好下发的指令后,无其他待办任务即进入休眠模式,保证设备的低功耗。串口通信中断接收数据的流程图如图4-9所示。图4-9串口通信中断接收数据4.4本章小结本章主要根据前一章节的需求分析,来对主控模块进行选型分析,最后确定使用Air724UG芯片来作为设计的主控;然后说明了设计中遇到的难点分析,主要是TTS语音与通话的冲突、低功耗的实现以及高清VoLTE通话的实现。这三个难点对设计具有至关重要的作用,设计的本身介绍没有考虑到TTS与通话的冲突,在设计的多次测试中才发现有这个问题,因此设计完成后需要大量的测试才能够保证多场景下设备的稳定性。最后介绍了单片机的MCU初始化及串口通信设计详情。 第5章系统测试及分析5.1定位测试本设计主要是基站定位及Wi-Fi定位。Wi-Fi是一种无线局域网技术,是高效率的移动接入网络,传输稳定、快速且低时延,此外Wi-Fi定位技术也发展的十分迅速。每一个无线AP都会拥有一个与之对应的、类似“身份证”的全球唯一的MAC地址,并且无线AP的位置相对固定。设备开启Wi-Fi就会主动扫描周围的AP信号信息及信号强度,即使AP被加密或者是低信号强度的AP都会被扫描收集[11]。根据信号的强弱程度,计算出设备的地理位置并返回到后台。定位追踪测试主要是通过设备持有者在室内外中绕圈,设备监控者通过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远程升级测试许多物联网设备要实现远程升级都有很大的难度,Air724虽然具有远程升级的接口,但是要依仗合宙厂商的服务器,要求稳定并且在自建服务器上实现远程升级的话,又是一个巨大的挑战。在实现远程升级的过程中,两种方式都尝试过,最终选择了在合宙服务器上实现。Air724的升级方式无非也是通过HTTP请求获取URL的文本信息,再进行版本与固件的对比,在自建服务器和合宙官网都是一个道理。但是合宙为了让用户更加离不开自己,将自建服务器上的升级加了限制:可以在自建服务器上升级,但是不能回退更新设备。这将使设备的远程升级变的鸡肋,尝试多次并请教前辈发现,如果不按限制去做,升级设备可能导致设备变砖,那就得不偿失了。因此最终选择在合宙的服务器上升级。

在实现远程升级还遇到一个问题:正常情况下,是否升级是需要按照用户的需求去实现,但是合宙给的方式都是后台一键升级,那么如何将每台设备的升级独立出来是关键问题。最终想到的方式是将版本信息储存在自建服务器上,当有新版本发布的时候,需要在合宙服务器和自建服务器两边同时更新升级包的信息。这样虽然加了一个步骤,但是更新的文件只要修改更新的版本及更新说明然后替换旧文件即可。正在远程升级的日志如图5-2所示。图5-2远程升级日志

经过大量的实验发现,在合宙升级网上进行远程,95%的概率能够升级成功,但是在低信号的情况下,升级将会推迟至下次信号强度中等以上才会进行升级。结果是升级成功的,只是时间的早晚而已。正在远程升级的设备如图5-3所示。图5-3远程升级设备图5.3低功耗测试低功耗是本设计的难点之一,多功能呼叫器的重点也是实现低功耗。经过多次的测试发现,影响设备功耗大小的因素有很多,如信号获取、基站位置信息获取、外设数目等等,因此需要根据状态进行分析。最终使用PM模块进行模块的唤醒与休眠,并将每分钟获取一次CSQ和基站位置信息等通信全部关闭进入休眠,测试用5欧电阻,3.7伏锂电池,将测试时间延长,测量多短周期的平均电压值,多次测量求取平均休眠电流约为3.9mA,这是最理想的休眠功耗。多功能呼叫器最主要的特点就是低功耗,对于老人来说,肯定是越耐用越好,因此我们Socket连接采用UDP,但是实际上若需要通过App或者小程序来做配置的话,那么肯定需要与外界进行网络通信的,当有前端有数据下发设备确处于休眠模式时候,却又建立不了通信桥梁,这又与低功耗相驳,因此做到低功耗是重点、难点之一。考虑到设备大多时间都需要处于休眠状态,因此将心跳包作为是否休眠的主要因素。当设备存在心跳包时候,就说明设备未进入休眠,可进行相关操作,唤醒设备的方式简单、多样:按键操作设备、打电话、发短信给设备,这样多样化的接口与唤醒方式可以使设备变的可控,且易于实现低功耗。示波器测量图功耗如图5-4所示:图5-4示波器测量图5.4本章小结本章主要是对本系统进行主要模块进行单独测试以及检测设备主要功能的准确性。首先是对定位测试进行对比分析,并给出大量定位实验的距离统计进行误差距离分析。其次对最主要的升级方式进行测试说明,对比测试了两种远程升级方式的优劣性。最后对低功耗模式进行分析处理。第6章总结及展望6.1总结本文对5G迅速发展导致2G/3G退网后老人设备的发展进行分析,并结合当今中国所面临的人口老龄化的社会问题,来开展设计中低速物联设备开发的基于4GCAT.1多功能呼叫器的设计与实现的研究。本文对CAT.1技术、模块化多线程编程以及呼叫器相关技术进行详细介绍,在此基础上设计基于CAT.1多功能呼叫器,完成多功能呼叫器的系统设计及软件设计,详细介绍了多功能呼叫器主要的线程内容,最后对系统进行全面测试,测试结果能够满足设计需求,实现预期效果。本课题主要完成以下工作:(1)通过相关政策解读及移动通信的发展,确定课题的研究意义及内容;通过阅读大量的Lua程序设计、C语言设计及单片机书籍,来为设计提前储备好基础知识。(2)查阅大量关于4GLTE、LTEeMTC、CAT.1等相关技术的资料,对相关技术发展情况进行了解,结合当今的移动通信发展与时代背景来确定研究方向。(3)对相关芯片进行产品选型对比,根据需求分析来确定单片机模块、CAT.1模块等。(4)对主控模块软件进行模块化多线程编程设计,绘制软件流程图,根据流程图及多线程来编写程序,进而实现设计的主要功能:与单片机的数据交互、按键处理与按键命令、网络信息数据交互、个性语音TTS播报、报时、拨号及测试模式等功能。(5)参考芯片手册及STC下载软件,对单片机的辅助C语言开发,主要实现开机初始化、串口通信、灯的控制、按键检测等。(6)制定相关通信的协议内容,协调单片机与主控模块通信工作,并对协议进行加密解密的规范。规范通信模式及通信方式,保证数据交互的准确性与及时性。(7)完成系统的测试。主要包括两个部分,一部分是对模块的内部软件测试,包括定位测试、远程升级测试;另一部分是对系统的整体测试,如低功耗测试、定位、报警、跟踪等测试,验证了设备的可行性。在本次毕业设计的研究中,以产品来定义毕设才发现真正要做一个产品的难度非常大。产品不仅要考虑到成本、实用性、人性化等问题,还会遇到各种“疑难杂症”,如芯片功能某些暂未开发成功、芯片某些功能存在问题等等。这时候仅仅靠老师、同学还解决不了相对应的问题,还需要寻找厂商技术支持、技术交流群、论坛等寻求帮助。6.2展望基于CAT.1多功能呼叫器虽然实现了预期的目标,通过Lua来开发主控来实现老人呼叫器的基本需求,但整个系统还有完善的空间。具体表现在以下几个方面:(1)多功能呼叫器加入实现AI语音智能助手,将更加方便老人去使用,但可能局限于会说普通话的老年用户。增加AI语音求救方式,便于及时发现老人处于危险情况,并及时采取相关措施。(2)增加心率检测、血压检测、跌倒检测等相关看护设计,便于老人的健康监测。(3)加入电台,健康知识科普、养生、娱乐等相关电台,方便老人解闷或者是学习新知识,加强大脑的运动。参考文献[1]王蒙.中国人口老龄化问题研究[J].中国经贸导刊(中),2021(03):158-160.[2]守love唯诺的专栏.第二课类型和值./zhenhuax/article/details/53535040.2019-10-25[3]周杨.基于Quest3D的应急预案三维自动演练系统的设计与实现[D].西安电子科技大学,2011.[4]\o"eSIM物联工场"eSIM物联工场.LTECat1承担4G物联网连接主力的时机已经开启./forum/topic/81194_1_1.html.2019-11-21合宙.AIR724UG相关手册.合宙官网.合宙.AIR724UG相关手册.合宙官网.[7]冯旭.发行业连锁经营库存管理系统的设计实现[D].哈尔滨工程大学,2014.[8]闵锐.联锁软件进路控制功能自动测试方法研究[D].北京交通大学,2018.[9]李大筠.TTS在办公系统的研究与开发[D].青海师范大学,2012.[10]《STC8系列单片机技术参考手册》[11]刘宸,李虎群,王强,张哲,崔靖茹.基于无线定位的智慧教室考勤助手APP的设计与研究[J].计算机时代,2018(04):26-28+32.

附录1部分关键源码及解释在这部分,将结合具体的源代码具体说明系统的执行流程和逻辑。一、AIR7241.1线程初始化Lua开发部分代码主要采用模块化多线程编程来对软件进行设计。在LuaTask架构下,线程初始化就是将通过sys.wait(ms)函数的延时操作,来将CPU让给其他需要运行的程序,在倒计时完成之后又继续这个线程的运行,从而实现延时与多线程并发执行。以下是调用线程的详细代码: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联网成功,并且在没有信息交互的情况下,要及时进入休眠模式来保证低功耗的实现。事实上,网络信息交互功耗会比平常工作状态高好几倍。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

--

主动发

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函数来配置信号量,当测试模式线程接收到需要进入测试模式的信号量时,才开始执行测试模式的相关代码。进入测试模式后,检测按键值来判断需要执行的相关内容,然后播放当前电压、信号值等或者进行录音操作。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位置信息上报设备位置经纬度检测走的是相同的通道,当优先级高的定位方式信号值高且定位成功则采用优先级高的定位方式。当优先级高的定位失败则会采取基站定位来确定设备的大体位置。获取位置信息之后及时上传并接收反馈信息后要及时进入低功耗模式,位置信息获取及上报也会导致高功耗。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状态、灯状态就是否休眠进行相关配置。#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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论