版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于物联网的智能衣柜设计目录TOC\o"1-2"\h\u9623摘要 111829关键词 2306991.绪论 262811.1研究背景及意义 210511.2国内外研究现状 2176871.3研究方法 3295032.系统主要技术简介 4248022.1WiFi通讯技术 434132.2传感器技术 6201812.3OneNet云服务技术 62493.系统分析 8258713.1功能需求分析 8281543.2可行性分析 914454.系统整体设计 10290704.1系统架构设计 10303444.2衣柜结构设计 10105444.3系统硬件设计 11146924.4系统软件设计 1424185.系统测试 17275766.总结与展望 194163参考文献 2014460附录 21摘要:在经济和生活水平快速发展和提高的当今社会,人们需要放存的衣服越来越多,这就给人们带来了相当多的困扰和麻烦。本设计的研究目的就是为了处理衣物放存环境条件中湿度过大引发的发霉、生虫等一些问题,还有就是在阴天下雨时没有办法进行快速晾干潮湿衣服的一些问题。本设计采用了调查方法,实验方法,文献研究方法以及系统科学的方法,对潮湿衣物进行一定的技术处理,研究并且设计了这个集除湿、消毒和状态显示功能为一体的智能衣柜系统,来解决衣物放存的一些问题。系统把STM32当做控制核心,而且还带有一些智能控制算法,可以完成去潮防霉和消毒杀菌等一系列的功能。不仅如此,智能衣柜在物联网的智能系统上,还能够连接到OneNet云平台,完成跟用户的简便优良的交互。该智能衣柜系统能够灵活、有效地防止衣物发霉,而且保证了衣柜内部的环境条件是最适合衣物放存的。该设计具有智能,成本低和方便快捷等优点,合理有效地解决了人们日常生活中的衣物放存问题。关键词:智能衣柜去潮防霉云平台物联网1.绪论随着时代的发展和技术的进步,人工智能带来了新的生活方式,家具行业也逐渐引入了智能控制技术。许多制造商已开始尝试优先占领智能家居市场。智能家居产品融合了多种技术,它是创新,智慧和实用性的统一,并具有强大的功能可塑性REF_Ref2114\w\h[1]。但是市场到目前为止还没有得到很好的发展,是由于各工厂设计的相似性以及无用和繁琐的功能与互联网行业不完全联系所导致的。1.1研究背景及意义近年来,社会经济发展的越来越快了,大家的生活水平越来越高了,大家的衣物也是越来越多,越来越复杂了。衣橱已经成为我们日常生活中的必需品。在响应市场的需求的过程中,衣橱从最开始存放衣物的功能,到现在发展到各种各样的功能衣柜层出不穷。经过对传统的衣柜行业的调查研究发现:传统衣柜会引发衣服潮湿发霉和生虫等问题,严重的影响了衣服的质量和穿着的舒适度。与传统衣柜相比,智能衣柜具有更强大的功能和“意识”REF_Ref25216\w\h[2]。在简单的储物衣柜中长期存放的衣服容易受潮和发霉。智能化衣橱能够为衣物存放提供非常好的湿度和温度条件,而且还能够调试衣橱中的湿度和温度,防止衣物发霉。与普通衣柜布局的错乱和没有明显的区分相比,智能衣柜的布局更加合理。储衣空间分为衣架区,配饰区,抽屉区等,储物效果更好。鉴于传统衣柜存在的问题,该设计可以使衣柜内部更加整洁。这个设计要运用物联网方面的一些技术,升级以前一些衣柜的结构还有功能,然后让衣柜在放存衣物的时候具备无损的干燥、杀菌防霉还有远程控制等一些功能,而且能够操纵智能控制算法来完成对衣柜的控制。1.2国内外研究现状在世界上,跟随着衣柜研究的不断进步,衣柜也逐步开始完成了包括智能化在内的一些性能。我们国家最早在2005年对智能衣柜开始展开研究,像唐佳青、钟吉湘一些人开始走上了对智能衣柜的强大性能进行探索的道路,而且还尝试对其类型进行了分类,可是并没有进行深入的研究。2011年,毛毅先生在解析智能控制技术的根源之上,设计完成了一款拥有防潮和防霉,还有杀菌消毒等一些功能融为一体的智能衣橱REF_Ref23374\w\hREF_Ref23374\w\hREF_Ref23400\w\h[3]。在国外,智能衣柜的一些研究领域,当然也有比较多的优秀的想法以及成功的案例。早在2006年,美国的一家公司完成并实现了第一款智能衣柜系统,此产品最主要的是根据衣柜上装配好的显示屏进行运行。不仅如此,人们还可以通过对屏幕地点击对它进行管控,比较方便。但是由于功能特别少,性能不齐全,尺寸非常大等不足,限制了智能衣柜的普遍而广泛地推广。尽管现在研究的智能衣柜已经研发出了多种类型,而且也可以给人们带来许许多多的方便,但是还有许许多多的问题有待进一步解决。1.3研究方法1.文献研究法:经过收集、研读、分析与总结国内外与智能衣柜相关的一些著作、期刊、硕博士学位论文及其他材料,去了解现在跟智能衣柜相关领域的一些研究情况和进度,从而能够系统的把握智能衣柜的整体研究,同时能够得到在智能衣柜研究道路上的一些问题还有不足。2.实验法:在模拟使用智能衣柜的基础上,充分的去感受市面上的衣物的存储装置。与此同时,结合衣物放存的相关评论及文章,揣摩衣物放存可能存在的一些场景。并把它做为设计智能衣柜的根据,从而建立实验大纲,验证用户对的衣物放存的想法和态度。3.调查法:为了拥有大家使用智能衣柜的想法及反馈,安排了关于智能衣柜使用情况的问卷调查。直接干脆的对智能衣柜的需求场景进行了考证和区分。4.系统科学方法:把设计好的智能衣柜系统模型装置,实行一些可用性的测试。并且注意使用者在使用智能衣柜时,他们的使用情况、使用时间和错误操作等,然后获得他们对智能衣柜的反馈意见。最后根据总结测试的结果,给未来智能衣柜的设计、改动和更新提供一些方向和指导。
2.系统主要技术简介2.1WiFi通讯技术Wi-Fi模块在物联网三层结构中属于传输层。有能够把串行端口转为切合无线通信标准的嵌入式的性能。它里边不仅仅有无线网络协议IEEE802.11b.gn协议栈,而且还有TCP/IP协议栈REF_Ref26039\w\h[4]。内置在无线通信模块里边的传统的硬件装置,能够干脆利落的运用无线技术连接到网络。所以,它就是成功完成智能家居,还有其它IOT应用程序的一些重要的组成成分。2.1.1WiFi模块模式WiFi模块有三大模式:AP、STA、STA+AP。AP模式:提供无线访问服务,也就是这个模块担任无线热点,许可其他设备连接到这个模块,并且无线路由器/网桥在此模式下工作。STA模式:与无线终端类似,它不接受无线访问服务。这个模式是连接到无线网络上的,然后它用来完成串行端口跟其它装置内部的无线数据的传输。通常,无线网卡在此模式下工作。STA+AP模式:这个模式用在无线AP还有无线STA,而且能够把别的设备连接到这个模式。这个模式还可以实现串行端口与另外的设备之间的无线数据传输还有转换。2.1.2WiFi模块选型目前市场上主流的WiFi模块有cc3200、ESP8266、mt7681,下面是对三种型号的WiFi模块的总结,如表2.1所示。表2.1WiFi模块型号总结表参数\芯片ESP8266CC3200MT7681频段2.4G2.4G2.4GCPUTensilicaL106(80M)ARMCortex-M4(80M)32-bitRISCMCU系统FreeRTOSFreeRTOSWindows和LinuxSDK是否开源是是是内存50KB64KB64KBFLASHEXTFLASHEXTFLASHEXTFLASH工作电压范围3.0-3.6V2.1-3.6V2.97-3.63V工作温度-40~125℃-40~85℃-10~70℃功耗(54MHz)TX:140mARX:56mATX:229mARX:59mATX:210mARX:59mA封装QFN32引脚5x5mmQFN64引脚9x9mmQFN40引脚5x5mm2.1.3AT指令使用WiFi模块一般分两个步骤。配置WiFi模块。AT指令是应用于WiFi模块与单片机之间的连接与通信的指令。常用指令集,如表2.2所示。表2.2常用指令集表RST重新启动模块指令GMR查看版本信息指令CWJAP设置加入AP热点指令CWSAP设置WIFI参数指令CWLIF查看已经接好的IP指令CIPSTATUS得到连接状况指令CIPSEND发送数据指令CIFSR得到IP地址指令CIPMUX打开多连接指令CIPMODE设置如何传输指令CIPSTO设置超时指令CIUPDATE固件升级指令2.1.4接收、发送数据WiFi模块与STM32连接,用于发送和接收数据,其通常的模块连接结构图,如图2.1所示。图2.1模块连接结构图2.2传感器技术传感器是现在一种非常流行、非常实用的检测装置,能够感应并检测到一些特殊信息,而且能够根据必然的规则,将感应到的大部分信息转变成电信号,或者是另外的所需形式的信息传递出来,进而来达到一些像存储跟显示记录,或者是信息的传输还有处理之类的良好效果。大部分的传感器一般是由转换元件,敏感元件,辅助电源和转换电路四部分组成。传感器包含像小型化、数字化和系统化等一些非常特别的属性。2.3OneNet云服务技术2.3.1OneNet云平台架构OneNet在“云、网、边、端”的整体架构的基础之上,创建了物联网的一些性能。它所具有的八最个主要的特性是增强接入、边缘计算、增值、智能、数据分析、一站式开发、产业以及生态开放。OneNet云平台向下延伸终端自适应访问,再就是向上也合成了行业规划的应用程序。这个平台供应了非常基本、非常普通的设备的管理能力,就像是设备的访问、设备的管理、设备的定位、设备的远程升级、设备的数据视图还有设备的PaaS功能等。在另一方面,现在的社会正在部署5G,这个平台还可以给5G+OneNet创建新的功能,专注于视频的供应和改进以及其他的功能。可以轻松地部署到云计算中,从而完美的支持行业端到端应用。2.3.2OneNet云服务的特点1.有无限选择的开放平台。创造产品和解决计划需求的很多种的软件和硬件组合,还有多种语言和平台都受到OneNet支持。2.端到端的安全。OneNet云平台里边拥有着端到端的安全性,而且还有完整的产物解决方案。并且非常安全的部署也能够保证对装置的控制,进而大家可以在正确的时间段,进行正确的访问形式。3.全互联的基础设施。位于中国移动的超大网络环境条件中开创的OneNet,提供了全国范围的互连基础架构。大量的设备投资,以确保设备的访问和减灾能力。有专门进行开发和运营的团队,用来保证平台7X24小时的平缓运转。4.实时消息总线。OneNet提供了多种通信方法。依照业务需求和规模,实时消息总线使用套接数字和RESTAPI,并提供了同步和异步的通信方法。5.覆盖设备整个生命期管理。设备的注册,身份的验证、删除还有激活整个的设备生存周期处理,还有便捷的广泛安排以及及时的数据监管都由OneNet供应了。
3.系统分析智能衣柜系统的设计,是采用软件跟硬件相结合的手段把大家的痛点给解决的,并且满足大家对智能衣柜系统的需求。为解决衣物存放的一些问题,我们现在需要对智能衣柜进行新的改动,以使衣柜能够更好地存放衣物。3.1功能需求分析智能衣柜设计的最初目的是为人们提供更好的服务。因此,在衣柜的设计中需要考虑功能设计,形状设计和材料颜色等的人性化设计。它需要基于用户所在地区的气候特征,年龄水平和个人喜好等方面来确定REF_Ref25856\w\h[5]。例如,在南部地区,春季气候相对潮湿,设计的时候要想到预定时间除湿。再例如,青年人的衣物的种类和数量比年长的人多,因此,应该考虑的是,许多年长的人的衣服不长时间穿着,要增添定时的消毒和杀菌功能;而青年人则经常换衣服,因此有必要增加去潮防霉的功能。功能整合是将现代衣橱所需的其他功能有机地、合理地整合在一起,通过衣橱中的衣物存放功能以达到人性化,智能化和便利化的目的。因此,在智能衣柜的设计中,衣柜的功能是通过衣柜的智能控制系统的集成在一起的。系统的功能模块划分,如图3.1所示。图3.1系统功能模块划分图每个模块对应着相应的功能,比如去潮防霉模块对应的功能是根据湿度的高低,决定是否打开加热系统进行除湿;杀菌消毒模块是通过继电器定时进行消毒;温湿度传感器进行对温湿度的检测;OLED显示模块是对系统状态以及各种数据进行显示;串口WiFi模块的功能是实现数据无线通信,让系统能够与OneNet云平台相连接;OneNet云服务模块能够实现对系统的远程控制等等。3.2可行性分析现如今,智能衣橱作为科学技术的日常生活热点,开始缓慢地渗入到生活的方方面面。人们需要用它体现自我魅力,实用性,舒适性和独特的品味等。因此,智能衣橱将快速流行。现在,智能衣橱开始变成人们追求便利,自由和特殊体验方式的象征性代表。智能衣橱的基础人性化,给所拥有者供应了最巨大的便利,而且给人跟衣橱之间的和谐互动供应了许许多多的便利。智能衣柜是精心选择设计的智能和衣柜系统的精美结合。它的发展是设计与技术相结合的产物。它的设计不仅具有艺术风格,关键更在于将现代技术融入衣柜的功能。此设计运用现代科学技术,解决了衣柜相关的智能化风格,以及合理的实现了衣柜的结构和加工技术。因此具有较高的可行性。
4.系统整体设计4.1系统架构设计本这个设计的主要包括空气的温湿度检测、去潮防霉、杀菌消毒还有状态显示等一系列功能。这个设计是通过衣柜控制终端还有OneNet云平台等组成。OneNet云平台是用在查看还有控制衣柜的运行状况,完成了让衣柜的终端进行入网的设置。衣柜的终端还能够控制着传感器去感知和检测衣柜里边的温湿度的情况,进而迅速的去执行去潮防霉还有杀菌消毒等功能的一些程序,而且还会通过WiFi技术向OneNet云平台传送系统的所有运行状态,如图4.1所示。图4.1系统路线图4.2衣柜结构设计衣柜所拥有的整体架构分为三个区域,如图4.2所示。对衣柜拥有的架构实行了一定水准的修正,而且还划分成了不同的衣物存放区域模块。然后处于最底下的是智能衣柜的终端控制系统。按照和根据处理器的控制作用,温湿度传感器就能够及时、可靠地监控衣橱中的温度还有湿度。而且在处理器的控制作用下,还能够对衣橱实行杀菌消毒,除湿防霉等一系列的措施,最后能够让衣橱的里边拥有放存衣物最好、最舒服的环境条件REF_Ref26525\w\h[6]。图4.2衣柜整体结构4.3系统硬件设计4.3.1处理器模块这个设计运用的是STM32F100R8T6核心处理器,它是基于Coretex-M3内核的,如图4.3所示,这个处理器能够达到温湿度值的采集、系统工作模式的控制和系统当前状态的显示工作的一些功能REF_Ref26754\w\h[7]。图4.3处理器4.3.2去潮防霉模块热效率高、耐氧化还有可控最高温度等一些安全性的优点是PTC加热器模块所具备的。一般都在家具的一些领域使用,如图4.4所示。这个设计运用PTC加热器和风扇在衣橱内部产生热的空气对流进而达到除湿效果REF_Ref26996\w\h[8]。PTC加热器会和风扇一起产生热空气,从而达到完成对衣物的去潮防霉作用的目的。图4.4PTC加热器4.3.3杀菌消毒模块在主控制器中,根据定时功能,将相应的引脚设置为低电平信号,以控制继电器。或是应用按键KEY控制相应的引脚的高电平跟低电平,进而来控制继电器。在继电器从主控制器中接收到低电平的信号的时候,继电器开关打开,然后消毒系统打开;在继电器从主控制器中接收到高电平的信号的时候,继电器开关关闭,消毒系统闭合。如图4.5所示。图4.5消毒模块继电器4.3.4门感应模块衣橱门传感模块由两个轻触微动开关组成,用于检测衣橱门的状态,并且确定衣橱门是否实时打开。一旦检测到衣橱门打开,就意味着将湿衣服放入衣橱中,因此系统开始自动检测湿度的变化并确定是否要除湿。4.3.5温湿度传感器此设计运用的是DHT11,如图4.6所示。温湿度的传感技术和数字的采集技术是这种传感器专有的,以此来保证拥有极高的可靠性还有非常出色的长期稳定性REF_Ref27178\w\h[9]。而且还拥有着质量良好、快速响应、强抗干扰能力与高性价比等一些优点。非常小的体积和特别低的功能消耗让它能够应用于要求严格的应用中。DHT11是拥有4针单排的引脚封装,连接非常方便。而且它还具有特别高、特别准确的测量幅度(湿度:20%〜90%,温度:0℃〜50℃),完全满足了系统的要求。图4.6温湿度传感器4.3.6Wi-Fi模块Wi-Fi模块是在这个设计中用在完成智能衣柜跟OneNet内的数据的交互上,还完成对系统的控制。想到了设计传送的数据量比较少,而且想到了性价比,所以这个设计选择了ESP8266,如图4.7所示。运用了数据透明的传输方式完成了系统联网还有数据传输通信的一些功能。图4.7Wi-Fi模块4.3.7OLED显示模块OLED显示模块大部分是根据电场驱动,然后有机的一般半导体材料和发光材料经过过载流子的汇入和混合后,完成发光的功能。本质上,它由数百万个“小灯泡”组成。它主要用于显示各种信息,以方便观察衣柜的运行状态。如图4.8所示。图4.8OLED显示屏4.3.8电路模块系统设计中,各个模块拥有的电源电路,如图4.9所示。图4.9各模块电路图4.3.9安全防护模块作为家庭用的系统,系统的安全性必然是整个系统的核心需求。这个设计具有硬件保护和软件保护。硬件保护:温度控制保护。装置根据它自己的物理特殊性质,让温度在稳定运行的时候能够保证恒定不变。每次温度超出了特定的范围值,这个保护的装置就马上会把电源断开。软件保护:衣物在除潮的过程中,总是会有一些温度的要求。万一温度过高的话,衣服就有可能会坏掉。因此,这个装置能够及时地检测衣橱中的温度,而且能够在温度太高的时候,能够自动的关闭除湿效果,用来防止温度太高而导致衣物坏掉。4.4系统软件设计4.4.1系统主控制流程设计衣柜这个系统在通上电以后,初始化系统,也就是系统复位。然后就开始检验衣柜内部的环境条件。假如湿度太高的时候,就会启动除湿程序。在这个程序运行的时候,可以经过Wi-Fi模块及时地向云平台发送当前的系统状况,同时也能够在OLED屏上显示出系统此时此刻的工作参数REF_Ref27446\w\h[10]。图4.10是系统主控的流程图。图4.10系统主控制流程图经过上边所说的处理控制之后,无线通信模块实行数据的传输还有接收的工作。无线信通信模块经过串行端口的方式把数据传送给处理器后,按照指令的类型,让处理器相应的控制程序开始运作REF_Ref27590\w\h[11]。在完成连接网络之后,及时地通过WiFi给OneNet云平台传送数据,具体的工作流程如图4.11所示。图4.11WiFi数据接收和发送流程4.4.2智能控制算法设计假如柜子中的湿度长时间大于80%的话,衣服容易发霉,因此启动去潮防霉的算法,将衣柜中的湿度控制在80%以下。具体如图4.12所示。为了防止参数设置得太低或太高,引起过分干燥让衣服破损或衣服并没有完全除湿,这个算法能够时刻监控着温度高低REF_Ref27691\w\h[12]。图4.12去潮防霉工作流程图4.4.3OneNet云服务OneNet定位为PaaS服务,旨在IoT应用与真实的设备之间构建高效的、稳定的和安全的应用程序平台REF_Ref28547\w\h[13]。因此,本系统选用OneNet云平台来实现监测和控制功能。用户都能够凭借OneNet云平台随时随地的查看并且控制衣柜终端的运行状况。4.4.4系统程序及介绍(1)主函数主函数融合了各个模块的功能,是一个总体函数。(2)WiFi模块函数WiFi模块函数实现了连接网络功能,可使ESP8266模块通过TCP/IP协议将数据传输至服务器,实现数据交换功能。(3)温湿度监测函数这部分函数用来实现监测温湿度。(4)OLED屏显示函数这部分函数用于在OLED屏显示数据。(5)OneNet云服务函数这是一个云平台调用函数,实现连接云平台的功能。以上各函数代码详见附录。
5.系统测试在进行此系统设计的测试中,主要测试:是否可以通过OneNet云平台查看和操控;不同环境湿度下看设备是否做出相应的反应;看设备是否定时消毒。可以根据OneNet云平台查看并且操控设备,如图5.1所示:图5.1查看和操控设备在测试中采集了四组数据,并查看设备运行状态。测试结果为湿度大于80的时候,继电器红灯自动亮起,代表除湿打开;湿度小于80的时候,继电器红灯自动熄灭,代表除湿关闭。证明设备可以通过湿度的高低,来自行打开或关闭除湿模块。如表5.1所示。设备具体的湿度测试,如图5.2所示。表5.1数据湿度是否打开除湿49否83是84是74否图5.2湿度测试在程序中的消毒定时函数是每十秒进行一次消毒,继电器红灯自动亮起,代表开始消毒,然后自动熄灭,代表关闭消毒。测试结果每隔10秒,消毒继电器红灯自动亮起,随后自动熄灭。证明设备可以定时消毒。如图5.3所示。图5.3消毒测试至此,整个智能衣柜系统的主要功能开发完毕。
6.总结与展望该系统是在物联网技术的基础上设计的智能衣柜系统。此系统具有杀菌消毒、去潮防霉、液晶显示等功能。它还可以通过OneNet云平台进行查看系统的运行状态并且对它进行控制。经过真实地测试表明,该系统杀菌除湿效果非常明显,而且可以取得较好的效果。该系统可控制,操作简单,内置的多个安全保护装置,可以确保系统的长期安全运行。但也还存在不美观等较多问题,以后会慢慢完善和改进。行业标准的制定对智能衣柜的快速发展来说是至关重要的。智能衣柜现在代表时代互异化的产品,行走在发展的道路上任重而道远,但是还需要看到它非常大的发展潜能,优良的行业标准现在成为了推进它健康发展的特定重要因素之一。但是,还是要求大家齐心协力地制定智能生产标准。唯有规范好智能的道路,形成优越的、良好的市场条件,才能够在智能化的道路上充足、充分地展现智能衣柜的市场长处,发挥其它的潜力,从而实现智能衣柜的开发价值,并且还推动着智能衣柜向更高、更优秀的水平发展。
参考文献吴智慧,杨勇,徐伟,方露,等.智能家具的研究现状与发展趋势[J].林产工业,2017.44(05):5-8.毛毅.智能衣柜设计研究与制作[J].家居与室内装饰,2011(6):100-101.张逢雪,王香婷,王通生.基于STM32单片机的无线智能家居控制系统[J].自动化技术与应用,2011(8):102-105.王永虹,徐炜,郝立平.STM32系列ARMCortex-M3微控制器原理与实践[M].北京:北京航空航天大学出版社,2008.李创辉,欧阳惕,陈华,等.PTC电加热器在恒湿恒温空调机上的应用研究[J].洁净与空调技术,2014.12(4):6-10.陈少勇,王佳权,王皓,黄启俊,常胜,等.基于物联网的智能衣柜系统[J].信息技术,2018(01):14-19.郁一波,陈锐,赵紫权,唐武宾,等.基于单片机的实现远程控制的智能除湿衣柜[J].工业控制计算机,2018,31(10):146+158.宋海友,张巧珍,等.多线程技术在数据通信中的应用[J].电子技术与软件工程,2015(5):64-64.赵文鹏,万洪莉,姜北辰.物联网环境下智能衣柜系统解决方案的设计与原型实现[J].工业控制计算机,2017,30(12):31-32+34.任小强,陈金鹰,李文彬,等.网络通信之JavaSocket多线程通信[J].信息通信,2015(6):206-207.倪天龙.单总线传感器DHT11在温湿度测控中的应用[J].单片机与嵌入式系统应用,2010(06):60-62.AmendolaS,LodatoR,ManzariS,etal.RFIDtechnologyforIoT-basedpersonalhealthcareinsmartspaces[J].IEEEInternetofthingsjournal,2014,1(2):144-152.HuX,JiangL,ChengR,etal.Aprobabilisticclothesrecommenderbasedonclothesfeatures[C].2014InternationalConferenceonManagementScience&Engineering21thAnnualConferenceProceedings.IEEE,2014:76-81.
附录主函数程序#include"delay.h"#include"sys.h"#include"string.h"#include"oled.h"#include"exti.h"#include"led.h"#include"usart1.h"//包含需要的头文件#include"usart2.h"//包含需要的头文件#include"wifi.h" //包含需要的头文件#include"onenet_http.h"//包含需要的头文件#include"timer.h"#include"dht11.h"charfasongbaowencishu_flag;charr_flag=0;//8266状态标志0:需要复位或重新复位1:正常状态//u8buff[10];//u8ii;externu8humi_value;voidLCD_mianban(void);intmain(void){ char*presult=0; delay_init(); //滴答时钟初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组分2组 OLED_Init(); //液晶屏初始化 Usart1_Init(9600); Usart2_Init(115200);// My_EXTI_Init1(); Jidianqi_Init(); WiFi_ResetIO_Init(); LED_Init(); TIM3_Int_Init(4000,36000-1); while(DHT11_Init());//未检测到返回1,检测到返回0 LCD_mianban(); humi_value=80;// ChuShi=0;//// XiaoDu=0; while(1) { DHT11_Read_Data(&temp1,&humi1); OLED_ShowNum(40,20,temp1,2,16); OLED_ShowNum(110,20,humi1,2,16); OLED_ShowNum(110,40,humi_value,2,16); if(humi1>humi_value) { ChuShi=0; } else { ChuShi=1; } delay_ms(10); if(r_flag==WeiLianJie) {//如果r_flag标志等于0,表示需要复位重置8266模块 if(WiFi_Init()==0) {//调用WiFi_Init函数,返回0表示复位重置成功 u1_printf("ESP8266状态初始化正常\r\n");//串口输出信息 r_flag=YiLianJie; Connect_flag=WeiLianJie; //r_flag标志置位,表示8266状态正常 } } if(Connect_flag==WeiLianJie) { u1_printf("准备连接服务器\r\n"); //串口提示数据 if(WiFi_Connect_Server(50)) //连接服务器,100ms超时单位,总计5s超时时间 { Connect_flag=WeiLianJie;//连接成功标志清除 u1_printf("连接服务器失败\r\n"); //串口提示数据 } else {//返回0,进入else分支,表示连接服务器成功 u1_printf("连接服务器成功\r\n"); //串口提示数据 OLED_ShowChinese(72,0,10,16); OLED_Refresh(); WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 Connect_flag=YiLianJie;//连接成功标志置位 } } delay_ms(200); if(Connect_flag==YiLianJie) { WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 OneNet_POST(TEMPHUMI_DID);//构建查上报温湿度数据的报文 WiFi_printf(TXbuff); WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE); delay_ms(200); OneNet_GET(TEMPHUMI_DID); //构建查询开关状态的报文 WiFi_printf(TXbuff); //把构建好的报文发给服务器 delay_ms(200); while(!(strstr(WiFi_RX_BUF,"\"SWITICH\""))); presult=strstr(WiFi_RX_BUF,"\"SWITICH\""); if(presult!=NULL) { OLED_ShowString(0,40,buff,16); for(ii=0;ii<10;ii++) { buff[ii]=*(presult-9+ii); } if(*(presult-9)=='0') //如果是0,关闭LED1 { KaiChu_flag=2; } elseif(*(presult-9)=='1') { KaiChu_flag=1;//反之是1,打开LED1 } } } if(KaiChu_flag==1) { LED=0; OLED_ShowChinese(80,40,7,16);//开 } elseif(KaiChu_flag==2) { LED=1; OLED_ShowChinese(80,40,8,16);//关 } delay_ms(10); OLED_Refresh();}}voidLCD_mianban(){ OLED_ShowChinese(0,20,0,16); //温 OLED_ShowChinese(16,20,1,16); //度 OLED_ShowChar(32,20,':',16); OLED_ShowChar(56,20,'C',16); OLED_ShowChinese(70,20,2,16); //湿 OLED_ShowChinese(86,20,1,16); //度 OLED_ShowChar(102,20,':',16); OLED_ShowChinese(0,40,3,16); //衣橱状态 OLED_ShowChinese(16,40,4,16); OLED_ShowChinese(32,40,5,16); OLED_ShowChinese(48,40,6,16); OLED_ShowChar(64,40,':',16); OLED_ShowChinese(80,40,8,16);//否 OLED_ShowString(0,0,"wifi",16);//wifi状态 OLED_ShowChinese(32,0,5,16); OLED_ShowChinese(48,0,6,16); OLED_ShowChar(64,0,':',16); OLED_ShowChinese(72,0,9,16);//未连接 OLED_ShowChinese(88,0,11,16); OLED_ShowChinese(104,0,12,16); OLED_Refresh();}WiFi模块程序#include"stm32f10x.h"//包含需要的头文件#include"wifi.h" //包含需要的头文件#include"delay.h" //包含需要的头文件#include"usart1.h" //包含需要的头文件#include"led.h"//包含需要的头文件#include"usart2.h"//包含需要的头文件#include"onenet_http.h"//包含需要的头文件charwifi_mode=0;//联网模式0:SSID和密码写在程序里1:Smartconfig方式用APP发送charConnect_flag=0;//同服务器连接状态0:还没有连接服务器1:连接上服务器了charChaXunBaoWen_flag=0;//定时时间到了会自动发送报文给服务器查询状态/*函数名:初始化WiFi的复位IO*//*参数:无*//*返回值:无*/voidWiFi_ResetIO_Init(void){ GPIO_InitTypeDefGPIO_InitStructure;//定义一个设置IO端口参数的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PA端口时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//准备设置PA4 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速率50Mhz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推免输出方式 GPIO_Init(GPIOA,&GPIO_InitStructure); //设置PA4 RESET_IO(1);//复位IO拉高电平}/*函数名:WiFi发送设置指令*//*参数:cmd:指令*//*参数:timeout:超时时间(100ms的倍数)*//*返回值:0:正确其他:错误*/charWiFi_SendCmd(char*cmd,inttimeout){ WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 WiFi_printf("%s\r\n",cmd);//发送指令 while(timeout--){//等待超时时间到0 delay_ms(100);//延时100ms if(strstr(WiFi_RX_BUF,"OK"))//如果接收到OK表示指令成功 break; //主动跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return1;//如果timeout<=0,说明超时时间到了,也没能收到OK,返回1 elsereturn0;//反之,表示正确,说明收到OK,通过break主动跳出while}/*函数名:WiFi复位*//*参数:timeout:超时时间(100ms的倍数)*//*返回值:0:正确其他:错误*/charWiFi_Reset(inttimeout){ RESET_IO(0);//复位IO拉低电平 delay_ms(100);//延时500ms RESET_IO(1);//复位IO拉高电平 while(timeout--){//等待超时时间到0 delay_ms(100);//延时100ms if(strstr(WiFi_RX_BUF,"ready"))//如果接收到ready表示复位成功 break; //主动跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return1;//如果timeout<=0,说明超时时间到了,也没能收到ready,返回1 elsereturn0; //反之,表示正确,说明收到ready,通过break主动跳出while}/*函数名:WiFi加入路由器指令*//*参数:timeout:超时时间(1s的倍数)*//*返回值:0:正确其他:错误*/charWiFi_JoinAP(inttimeout){ WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 WiFi_printf("AT+CWJAP=\"%s\",\"%s\"\r\n",SSID,PASS);//发送指令 while(timeout--){//等待超时时间到0 delay_ms(1000);//延时1s if(strstr(WiFi_RX_BUF,"OK"))//如果接收到WIFIGOTIP表示成功 break; //主动跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return1;//如果timeout<=0,说明超时时间到了,也没能收到WIFIGOTIP,返回1 return0;//正确,返回0}/*函数名:WiFi_Smartconfig*//*参数:timeout:超时时间(1s的倍数)*//*返回值:0:正确其他:错误*/charWiFi_Smartconfig(inttimeout){ WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 while(timeout--){//等待超时时间到0 delay_ms(1000);//延时1s if(strstr(WiFi_RX_BUF,"connected"))//如果串口接受到connected表示成功 break;//跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return1;//超时错误,返回1 return0;//正确返回0}/*函数名:等待加入路由器*//*参数:timeout:超时时间(1s的倍数)*//*返回值:0:正确其他:错误*/charWiFi_WaitAP(inttimeout){ while(timeout--){//等待超时时间到0 delay_ms(1000);//延时1s if(strstr(WiFi_RX_BUF,"WIFIGOTIP"))//如果接收到WIFIGOTIP表示成功 break; //主动跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return1;//如果timeout<=0,说明超时时间到了,也没能收到WIFIGOTIP,返回1 return0;//正确,返回0}/*函数名:等待连接wifi,获取IP地址*//*参数:ip:保存IP的数组*//*参数:timeout:超时时间(100ms的倍数)*//*返回值:0:正确其他:错误*/charWiFi_GetIP(inttimeout){ char*presult1,*presult2; charip[50]; WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 WiFi_printf("AT+CIFSR\r\n");//发送指令 while(timeout--){//等待超时时间到0 delay_ms(100);//延时100ms if(strstr(WiFi_RX_BUF,"OK"))//如果接收到OK表示成功 break; //主动跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return1;//如果timeout<=0,说明超时时间到了,也没能收到OK,返回1 else{ presult1=strstr(WiFi_RX_BUF,"\""); if(presult1!=NULL){ presult2=strstr(presult1+1,"\""); if(presult2!=NULL){ memcpy(ip,presult1+1,presult2-presult1-1); u1_printf("ESP8266的IP地址:%s\r\n",ip);//串口显示IP地址 return0;//正确返回0 }elsereturn2;//未收到预期数据 }elsereturn3;//未收到预期数据 }}/*函数名:获取连接状态*//*参数:无*//*返回值:连接状态*//*0:无状态*//*1:有客户端接入*//*2:有客户端断开*/charWiFi_Get_LinkSta(void){ charid_temp[10]={0};//缓冲区,存放ID charsta_temp[10]={0};//缓冲区,存放状态 if(strstr(WiFi_RX_BUF,"CONNECT")){//如果接受到CONNECT表示有客户端连接 sscanf(WiFi_RX_BUF,"%[^,],%[^,]",id_temp,sta_temp); u1_printf("有客户端接入,ID=%s\r\n",id_temp);//串口显示信息 WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 return1;//有客户端接入 }elseif(strstr(WiFi_RX_BUF,"CLOSED")){//如果接受到CLOSED表示有链接断开 sscanf(WiFi_RX_BUF,"%[^,],%[^,]",id_temp,sta_temp); u1_printf("有客户端断开,ID=%s\r\n",id_temp);//串口显示信息 WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 return2;//有客户端断开 }elsereturn0;//无状态改变}/*函数名:获取客户端数据*//*两组回车换行符\r\n\r\n作为数据的结束符*//*参数:data:数据缓冲区*//*参数:len:数据量*//*参数:id:发来数据的客户端的连接ID*//*返回值:数据状态*//*0:无数据*//*1:有数据*/charWiFi_Get_Data(char*data,char*len,char*id){ chartemp[10]={0};//缓冲区 char*presult; if(strstr(WiFi_RX_BUF,"\r\n\r\n")){//两个连着的回车换行作为数据的结束符 sscanf(WiFi_RX_BUF,"%[^,],%[^,],%[^:]",temp,id,len);//截取各段数据,主要是id和数据长度 presult=strstr(WiFi_RX_BUF,":");//查找冒号。冒号后的是数据 if(presult!=NULL)//找到冒号 sprintf((char*)data,"%s",(presult+1));//冒号后的数据,复制到data WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 return1;//有数据到来 }elsereturn0;//无数据到来}/*函数名:服务器发送数据*//*参数:databuff:数据缓冲区<2048*//*参数:data_len:数据长度*//*参数:id:客户端的连接ID*//*参数:timeout:超时时间(10ms的倍数)*//*返回值:错误值*//*0:无错误*//*1:等待发送数据超时*//*2:连接断开了*//*3:发送数据超时*/charWiFi_SendData(charid,char*databuff,intdata_len,inttimeout){ inti; WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 WiFi_printf("AT+CIPSEND=%d,%d\r\n",id,data_len);//发送指令 while(timeout--){//等待超时与否 delay_ms(10);//延时10ms if(strstr(WiFi_RX_BUF,">"))//如果接收到>表示成功 break; //主动跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } if(timeout<=0)return1;//超时错误,返回1 else{//没超时,正确 WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 for(i=0;i<data_len;i++)WiFi_printf("%c",databuff[i]);//发送数据 while(timeout--){//等待超时与否 delay_ms(10);//延时10ms if(strstr(WiFi_RX_BUF,"SENDOK")){//如果接受SENDOK,表示发送成功 WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 break;//跳出while循环 } if(strstr(WiFi_RX_BUF,"linkisnotvalid")){//如果接受linkisnotvalid,表示连接断开 WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 return2;//返回2 } } if(timeout<=0)return3;//超时错误,返回3 elsereturn0; //正确,返回0 } }/*函数名:连接TCP服务器,并进入透传模式*//*参数:timeout:超时时间(100ms的倍数)*//*返回值:0:正确其他:错误*/charWiFi_Connect_Server(inttimeout){ WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 WiFi_printf("AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",ServerIP,ServerPort);//发送连接服务器指令 while(timeout--){//等待超时与否 delay_ms(100);//延时100ms if(strstr(WiFi_RX_BUF,"CONNECT"))//如果接受到CONNECT表示连接成功 break;//跳出while循环 if(strstr(WiFi_RX_BUF,"CLOSED"))//如果接受到CLOSED表示服务器未开启 return1;//服务器未开启返回1 if(strstr(WiFi_RX_BUF,"ALREADYCONNECTED"))//如果接受到ALREADYCONNECTED已经建立连接 return2;//已经建立连接返回2 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return3;//超时错误,返回3 else//连接成功,准备进入透传 { u1_printf("准备进入透传\r\n");//串口显示信息 WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 WiFi_printf("AT+CIPSEND\r\n");//发送进入透传指令 while(timeout--){//等待超时与否 delay_ms(100);//延时100ms if(strstr(WiFi_RX_BUF,">"))//如果成立表示进入透传成功 break;//跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } if(timeout<=0)return4;//透传超时错误,返回4 } return0; //成功返回0 }/*函数名:断开连接*//*参数:timeout:超时时间(100ms的倍数)*//*返回值:0:正确其他:错误*/charWiFi_Close(inttimeout){ delay_ms(200);//延时 WiFi_printf("+++");//发送退出透传 delay_ms(1500);//延时 Connect_flag=0;//连接成功标志置位清除 WiFi_RxCounter=0;//WiFi接收数据量变量清零 memset(WiFi_RX_BUF,0,WiFi_RXBUFF_SIZE);//清空WiFi接收缓冲区 WiFi_printf("AT+CIPCLOSE\r\n");//发送指令 while(timeout--){//等待超时时间到0 delay_ms(100);//延时100ms if(strstr(WiFi_RX_BUF,"OK"))//如果接收到OK表示成功 break; //主动跳出while循环 u1_printf("%d",timeout);//串口输出现在的超时时间 } u1_printf("\r\n");//串口输出信息 if(timeout<=0)return1;//如果timeout<=0,说明超时时间到了,返回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教师游戏指导能力提升路径研究-基于2024年指导能力测评与提升策略
- 电气工程基础
- 浙江省2025年广播电视编辑记者、播音员主持人资格考试(广播电视基础知识)模拟试题
- 建筑幕墙结构胶老化检测评估技术指南
- 2026年四川省评标专家考试(交通类)复习题及答案
- 新闻记者考试(新闻采编实务)试题及答案(鸡西2025年)
- 【广东】2025年高考广东卷政治高考真题文档版
- 2022年1月福建省地理高中学生学业基础会考
- 2025年岳阳市云溪区事业单位集中选调工作人员考试真题及答案
- 液晶投影机企业县域市场拓展与下沉战略分析报告
- 2026年重庆烟草招聘考试试题及答案
- 2026年城管协管员业务知识考试题库及答案
- 2026年哈三中高三下学期三模语文试卷及答案
- 肠造口患者的心理支持与调适
- 河南省2026年普通高等学校对口招收中等职业学校毕业生考试机电与制造类基础课试卷
- 2025年广东省深圳市初二学业水平地生会考试题题库(答案+解析)
- 2026年度春季江西金德铅业股份有限公司校园招聘17人建设考试备考试题及答案解析
- 2025福建龙岩国信物业有限公司招聘5人笔试历年难易错考点试卷带答案解析
- 球墨铸铁管监理实施细则
- 2026中考英语时文热点:跨学科融合阅读 练习(含解析)
- 2025年全国初中应用物理竞赛试题及答案
评论
0/150
提交评论