《基于嵌入式的智能家居系统设计.docx》由会员分享,可在线阅读,更多相关《基于嵌入式的智能家居系统设计.docx(78页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于嵌入式的智能家居系统设计系统开发及程序设计学 院:专 业:姓 名:指导老师:工业自动化学院机械电子工程张铭学 号:职 称:160404102553尹新彦讲师中国珠海二二年五月北京理工大学珠海学院2020届本科生毕业设计诚信承诺书本人郑重承诺:本人承诺呈交的毕业设计基于嵌入式的智能家居系统设计系统开发及程序设计是在指导教师的指导下,独立开展研究取得的成果,文中引用他人的观点和材料,均在文后按顺序列出其参考文献,设计使用的数据真实可靠。本人签名: 日期: 年 月 日基于嵌入式的智能家居系统设计系统开发及程序设计摘 要本文基于STM32控制进行的智能家居软件系统开发,通过对硬件的智能管理和通过e
2、sp8266 Wi-Fi模块接收到的控制指令对门禁、客厅卧室灯、窗帘、晾衣架等控制,或通过esp8266 Wi-Fi模块获取相应的温湿度、可燃气体、火焰检测等信息。通过需求分析以及查阅相关书籍,选取使用STM32F407作为硬件控制芯片、选取SG90作为晾衣架、门控和窗帘控制的动力源、SW2812作为客厅智能灯、esp8266作为Wi-Fi通信模块。 采用模块化编程的思想,基于C语言编写的开源微控制实时操作系统UCOSIII编写系统软件,每一个模块都会编写一个对应任务进行自我管理,任务与任务之间通过消息队列、互斥锁等方法进行同步互斥或者数据交换,使得系统有效的运行。关键词:STM32F407,
3、智能家居,UCOSIII,esp8266Design of Embedded Smart Home SystemSystem development and program designAbstractThis paper develops the smart home software system based on STM32 control. It controls the access control, living room and bedroom lights, curtains and drying racks by intelligent hardware management
4、 and the control instructions received through esp8266 wi-fi module, or it obtains the corresponding temperature and humidity, combustible gas, flame detection and other information through esp8266 wi-fi module. Through demand analysis and consulting relevant books, STM32F407 was selected as the har
5、dware control chip, SG90 as the power source of drying rack, door control and curtain control, SW2812 as the living room smart lamp, esp8266 as the wi-fi communication module.By adopting the idea of modular programming, the software programing based on C language and using the opensource Real-time o
6、perating system which is UCOSIII to programing. each module has a corresponding task for self-management, through the message queue between tasks and tasks, the mutex methods such as synchronous mutex or data exchange which makes the system run effectively.Keywords: STM32F407, smart home, UCOSIII, e
7、sp8266目录第一章 绪论11.1课题研究背景21.2课题研究意义和目的21.3智能家居国内外研究状况21.4智能家居发展趋势21.4课题研究内容及主要工作21.5论文结构安排2第二章 软件系统整体设计方案12.1系统软件整体架构设计12.2软件开发流程32,3通信协议52.4UCOSIII操作系统62.5本章小结6第三章 智能家居系统的软件实现73.1开发工具与MCU73.1.1 KeilMDK73.1.2 STM32F40773.2智能照明控制模块73.3无线Wi-Fi模块93.4窗帘模块113.5晾衣杆模块123.6环境检测模块133.7安防模块143.8本章小结16第四章 软件调试分
8、析184.1模块编程调试184.2结合实物调试184.3本章小结18第五章 总结与展望19参考文献20谢 辞21附录1程序22附录2英文参考文献55附录3文献翻译62第一章 绪论1.1课题研究背景随着我国的经济发展不断提高,科学技术水平不断与世界一流水平接近,生活在信息化社会的人们已逐渐意识到信息的重要性。随着生产技术的不断进步,各大企业都投身于研究新产品,电子产品日渐丰富。丰富的电子产品无疑会给人们带来更多便利,以及大大方便了人们的日常家居生活。因此,开发一套符合大众需求的、能完善以及安全可靠的智能家居产品意义重大。在物质生活基本满足的生活水平下,现在的人们对于精神需求远大于物质。关于居住环
9、境,人们从以前单纯的关注家居住宿环境已经转变成精神上更高层次的家居享受和体验,甚至是体验科技的体验。例如,家居照明控制不再仅限于安装在墙壁上的灯控开关,而是希望通过无线的平板或者手机中的智能家居系统来控制,并且还可以根据个人喜好来智能调节灯光的颜色和亮暗,甚至还具备各种各样的情景模式;家居中的电器也不是一个个体,电器的控制也不再独立,而是作为智能家居整体的一部份,进行系统控制。在信息化时代的在居住环境中,家居环境中的各种指数已经越来越受到人们的重视1,例如PM2.5值、室内温湿度值、甲醛指标、光照强度等等,智能家居甚至能通过检测这些环境变量以及结合用户的个人习惯而做出相应的设备控制。从古至今家
10、居生活都会存在的一个问题,就是安全与防盗,而智能设备能更好的提高家居环境的安全性,通过科学技术的方式来对家居进行安全和防盗的升级,无疑是最好的办法。 在现有产品方面,随着嵌入式技术、物联网技术和无线通信技术的发展,智能家居大众化以不再是梦。很多的国内企业都研发出了各种各样的智能化设备,向小米、华为、阿里等科技巨头都逐渐投身与智能家居设备研发行业,比如米家、天猫精灵等。各种电商企业也不甘落后,例如智能电饭煲、智能冰箱等产品等。基本上每一个电商企业都具备了独立研发智能家居设备的能力。但是大多数的厂家生产出来的不同产品也是相互独立的,智能家居行业缺乏一个行业标准。随着物联网技术的出现,这一问题也得到
11、了解决,将智能家居设备接入互联网2,随时查看家居环境中的状态。因此,对于智能家居统一标准具有重大的意义。 在智能家居技术方面,随着单片机技术、软件技术、无线技术以及射频的快速发展,无疑为智能家居的研发提供了关键的技术支持。所以,基于STM32控制的家智能家居控制、检测系统的研发具有很好的前景和很强的实用价值和商业价值。1.2课题研究意义和目的 智能家居主要意义是给家居生活带来便利,同时让人享受科技带来不一样的家居体验。虽然目前智能家居产品不断增加,科技感越来越强,并且对家居的控制方式多样化,但是大多是单独的智能家居产品,或者通用的智能家居控制器,很少有一套完整的,集智能安防,家居控制于一体的智
12、能家居终端操作系统。因此,设计一套完整的智能家居软件系统非常有意义,也符合当下的市场需求。本文研究的智能家居软件系统,是一套功能齐全,可扩展性强的智能家居软件系统,在家居安防方面能实时的进行检测可燃气体和火焰的信息,以及对门禁的多重控制;在家居生活方面有各种家居设备的控制。这套智能家居软件旨在满足当下消费者的需求,并且性价比高。1.3智能家居国内外研究状况1.3.1国内发展状况我国的智能家居相对于外国起步比较晚,而且还没有国家标准,90年代后期,我国的智能小区才逐渐兴起,上海、深圳和广州等沿海城市是我国最早建设智能化住宅的城市,并且逐步的向各个内陆城市发展。智能家居发展伊始,仅有非常少的国内家
13、电企业踏入智能家居的产品研发领域,并且随着不断的投入,逐渐的开发出具有自身品牌特色的智能家居产品。国家不断深化改善融资环境,以及加大了对信息消费和财税政策的支持等措施,直接促进了电子信息消费市场迅猛的发展,智能家居产品在不断的发展与更新换代,软件产业所支撑的服务水平在不断提高以及电子几处产业的创造重新能力在不断的增强,这些信息电子与软件产业的不断发展都促进国内的智能家居产业发展带。无论是新进入智能家居领域的互联网企业,还是传统的家电企业都对智能家居领域产生浓厚的兴趣,都非常乐意去加入或研发智能家居产品,例如国内有名的家电企业海尔公司,已经加入和研究智能家居产品多年,现在的智能家居产品已经是非常
14、成熟了。同样是家电企业的格力、美的和TCL等家电企业都纷纷加入到智能家居的行列中,并且都研发了各自的智能家居产品。像小米这样的企业也着手与智能家居的研究,米家更是深受广大用户的喜爱,小米也比较注重智能家居行业,并且已经研究设计了非常多的智能家居产品,包括智能台灯、智能电视、空气净化器、智能路由、智能吸尘器等一系列的产品,几乎涉及家居生活的方方面面,小米的智能家居产品研究已经非常的成熟了,自从小米公司入股美的电器公司以后,两家不相干的企业不断互补优势,在智能家居领域展现出了多种合作的模式,还有华为、阿里、百度也有做相应的智能家居产品,阿里与百度研究的语音控制智能家电产品也比较火热。可以看出国内的
15、智能家居发展前景犹如一匹黑马,飞速发展。1.3.2国外发展状况美国作为智能家居的发源地,这些年来智能家居的发展更是无法想象。前些年世界首富比尔盖茨耗时数年的时间建造了一栋世界一流的智能豪宅,该豪宅被称为“未来之屋”,堪称是智能家居的经典之作。该豪宅设有各种环境和天气传感器,智能家居系统可通过检测到的参数对室内空气等环境进行智能调节,控制室内的温度和通风等。如果有人来访,那么他们将会被会被分发一只小电子针,该电子针的作用就是定位,并且可根据来访者的习惯或者需求对周围环境进行预先配置,如灯光喜好、习惯听的音乐、最常开的可调温度、湿度等,都可以电子针来进行任意调节。踏入房间,系统会根据个人的偏好做出
16、响应,如壁画投影等。厕所里甚至安装了人体检测系统,时刻监测着人的身体状况,若发现异常,会立即发出警报;该豪宅的地板甚至都具备智能化,通过压力传感器获取数据,预测人的行走目标而提前做好准备。国内的智能家居发展飞快,国外也如此,因此智能家居的研究不能停。相反,应该抓住发展机遇不断向更高层次发展。很多新产品、新技术都会在美国诞生。在美国,智能家居的销售和国内还有很大的差别,智能家居产品不是天上的繁星,可望不可及;智能家居系统也不是完美的时装表演,没有任何瑕疵;智能家居的发展更不是一蹴而就3。1.4智能家居发展趋势随着互联网技术的不断提高和发展以及网络通信技术和自动化控制技术的不断进步,智能化家居也已
17、经进入一个飞速发展的时期。我国目前已经成为了家电产品的出口大国,已是全球主要的供应商,我国企业的技术水平与世界领先的技术水平保持同步发展,并且随着人工智能的不断发展和提高,新的技术不断出现,电子器件做的越来越微型化,这些现象都有极大的可能给智能家居行业带来新的发展,新的机遇和脱胎换骨的改变,时时刻刻的促进着这一行业的发展。智能家居就像一匹黑马一般不断的冲进大众的视野,对于大众来说已经一点都不陌生了。智能家居逐渐成为现代人们买房、装修的热点了。人们逐渐学会享受科技带来的方便与安全。一直以来大叫都在兜售智能家居的概念,使大家觉得智能家居应该里我们很遥远,其实并不是。如今的智能家居已经非常普遍了,它
18、像长了腿一样,一步又一步的走向原来元多的家庭,如现在的大城市中,甚至有些人认为要是买了房子但是装修的时候却没有智能家居会觉得非常落后,感觉更不上潮流。现在许多高档的楼盘以及豪华别墅等都或多或少的安装了各种各样的智能家居系统或设备。人们的生活质量不断提高对现有的家居环境的追求也提升到了另一个层次,对于家庭的舒适度的要求也不断提高,甚至对住宅地都有更高的要求,人们买房也要看是否智能了。因此智能家居的发展只会越来越强,市场占有率会不断提高。1.4课题研究内容及主要工作本文通过对智能家居产品的特点以及发展趋势等进行分析,设计一款基本功能齐全、操作简单、成本低廉的智能家居软件系统。本文对智能家居软件系统
19、研究的主要内容,主要包括一下几个方面:(1) 研究基于STM32控制的智能家居系统设计的一些关键技术以及一些基本的概念。(2) 研究基于串口Wi-Fi模块来实现无线界面与STM32智能家居系统的交互与控制。(3) 研究智能家居中智能灯的各种无线操作与控制,使其更加符合用户对灯的偏好以及需求。(4) 研究智能控制窗帘,以及智能晾衣杆。(5) 研究智能家居安防的系统实现,使家庭日常居住更安全。1.5论文结构安排全文总共分为五章,各章节内容安排如下:第二章:软件系统的整体设计方案,这一章节主要是介绍该智能家居系统的整体设计方案,包括系统软件的整体架构设计、软件的开发流程、无线通信的协议和采用的操作系
20、统。第三章:智能家居系统的软件实现,这一章节主要是介绍了开发工具、MCU,以及如何设计软件来实现模块以及模块化的控制,其中有智能照明控制模块、Wi-Fi无线通信模块、晾衣杆模块、环境监测模块以及防盗模块。第四章:调试分析,该章节主要介绍如何去调试各个模块以及分析其结果的可靠性以及准确性。第五章:总结与展望,这一章节是对该智能家居软件系统设计过程的总结以及展望。第二章 软件系统整体设计方案2.1系统软件整体架构设计本文设计的智能家居系统主要是针对普通家庭使用的,其具有结构简单、体积小、便于安装、网络覆盖面小、具有自己独立的网络、可扩展性强和价格低廉等特点,因此比较适用于普通家庭住宅,对于普通居民
21、来说性价比也比较高。本文设计的智能家居系统以STM32F407芯片为基础的核心板作为硬件控制平台,STM32F407 全天候24小时运行,时刻侦察各个硬件的状态信息,及时、实时的汇报各个模块硬件的工作状况,从而做出相应的硬件处理以及信息交互,而该智能家居的控制端则是通过中控平台的可触屏图形界面进行相应的控制。本文主要对STM32F407的智能家居系统软件进行论述。本智能家居操作系统的基本架构如图.1所示,该系统的程序设计中采用的是目前应用非常广的微型实时操作系统UCOSIII。UCOSIII系统具有非常多的优势,在本章第三小节详细介绍。本智能家居系统主要分为一下几个任务:(1) Wi-Fi无线
22、数据处理任务,该任务主要是用于接收并处理接收到的无线数据协议,是实现界面控制硬件模块的关键,通过发送/接收自定义无线通信的协议,对接收到的信息进行解析,从而对窗帘、灯、门、锁等模块进行控制以及修改RFID门禁卡和密码锁密码。我们采用的是esp8266Wi-Fi模块,该模块与芯片通过串口通信,该模块支持AT指令,因此程序中主要是对串口进行配置,然后通过发送AT指令设置Wi-Fi模块的工作模式,例如可以连接到某个Wi-Fi热点,并且通过UDP或TCP来连接目标或者配置成TCP服务端来等待客户端连接等,同时也可以将自己设置为Wi-Fi热点,并且设置为UDP或者TCP Server等待客户端连接。(2
23、) 温湿度检测任务,该任务的主要作用是经过固定时间检测温湿度,并且将温湿度封装成有效协议,发送至界面程序,以便显示室内温湿度;同时也把温湿度值封装成字符串通过消息队列发送至OLED实时显示。(3) 独立看门狗管理任务,该任务的主要作用是在程序跑飞后能够及时的重启程序,让系统时刻有效的工作,而不是跑飞后就不能工作。独立看门狗的工作原理是:在系统启动后设置好看门狗的计数值,计数方式是向下计数,当计数值为0的时候就会触发中断,从而使程序进行复位,也就是重启,因此需要在计数值为0之前给独立看门狗为食,也叫喂狗,当程序跑飞的时候自然就不能喂狗了,从而实现了系统复位,保证的系统的可靠性,该部分软件设计的思
24、路也是。图 .1系统设计框架(4) 火焰检测任务,火焰检测任务的作用是通过火焰传感器模块的探头来检测周围的环境,判断是否存在火焰,并且火焰传感器模块会时刻将检测的模拟量发送至固定引脚,该引脚接收到模拟量后通过ADC将模拟量转化成数字量,在程序中通过特定公式将数字来转成电压值,通过判断电压值变化从而确定是否有火灾发生。(5) 可燃气体检测任务,可燃气体检测的原理与火焰检测基本,可燃气体检测时通过MQ2模块,将模拟量发送至引脚,最后都是通过检测最终的电压进行判断结果。(6) OLED实时信息显示任务,该任务会在0.96寸的屏幕上实时显示时间、温度、湿度和各种报警信息,OLED模块与STM32芯片是
25、通过I2C通信的。I2C又叫IIC,即Inter-Integrate Circuit(集成电路总线),I2C是一种多向控制总线,在实际应用中可支持多个支持I2C通信的设备同时连接到该总线下,每一设备都可以作为实时数据传输控制源。这种通信方式在寸土如金的集成芯片上极大的缓解了引脚不足的压力。I2C有两根总线一根为时钟线,一根为可双向传输数据的数据线。OLED的两根线分别接到时钟线与双向数据线上。所有的I2C都接到同一总线数据不会混乱?答案是不会的,因为任何一个支持I2C通信的设备接在总线上都会有其唯一的一个地址,该地址是用于区别其他设备和传输数据的依据。(7) 密码输入处理任务,该任务主要是用于
26、检测矩阵键盘,以及判断密码输入完毕后是否正确,判断完毕后再对电磁锁和门控舵机模块进行相应的控制,如果错误则将错误信息通过消息队列发送至报警任务和OLED任务进行处理和显示。(8) RFID卡检测任务,该任务是实时监测RFID模块是否有卡片在感应范围内,当监测到卡片,就会将结果以数据帧的形式发送给STM,这个过程有两个步骤:第一步,发送请求;第二步,防碰撞。RFID模块发送请求成功后就会发送防碰撞命令,发送命令后就会返回一个防碰撞的数据中,其中就包含了卡号。然后匹配卡号是否正确再进行相应的操作控制。(9) 雨水检测任务,雨水检测任务是通过对地税检测模块的软件编程控制,当该模块的pcb板检测到水就
27、会通过水的量转化成数字量通过一个AO引脚发生出去,同时当达到某一设定好的阈值后DO一脚就会输出高电平,本系统是通过中断捕捉高 电平,然后设置标志位给该任务去处理,处理完毕后清空标志位。其中处理的代码主要是用于控制晾衣架,以及发送下雨预警。(10) 蜂鸣器处理任务,蜂鸣器处理任务处理了所有的报警信息和蜂鸣器控制以及系统交互。该任务通过读取消息队列的信息,对信息进行判断是什么类型的消息从而让蜂鸣器发出不一样的蜂鸣声。2.2软件开发流程本文的系统软件开发流程如下图.2所示。首先要对智能家居系统软件做需求分析,需求分析就是对我们小组对本智能家居系统的需求按软件工程开发语言表达出来的过程。过程如:确定要
28、解决的问题,建立软件的逻辑模型,编写需求规格说明书文档。这个过程对于整个智能家居系统的开发有着关键的作用。需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。然后是确定系统的模块功能,这一部分就是对本智能家居系统所具备的功能进行筛选,分析和最终确定,这一步对后面软件代码的编写具有重要的作。如果这一部分没有确定并且在后期有所变动,那么在后期的代码编写的修改就会非常麻烦,甚至可能到至所有代码重新编写。本智能家居系统最终确定的模块功能有雨水传感器自动控制晾衣架模块、手动控制晾衣架模块、客厅智能彩灯控制、卧室灯PWM可调亮度控制、窗帘智能控制、密码以及RFID卡开门、室内温湿度检测、厨房可
29、燃气体检测、厨房火焰检测、独立看门狗复位系统设置、Flash存储用户密码以及卡号、时钟设置、OLED实时显示系统信息等功能。第三步就是确定系统设计框架,本文使用的是UCOSIII实时操作系统,采用任务线程的方式对各个模块进行控制的设计框架;如图.3所示,主函数主要是初始化一个初始化任务和进入任务调度,初始化任务负责把所有的任务进行内存、优先级等配置。第四步就是对相关的模块代码进行编写,第四、五和六步是一个连续、不可分离的过程,对每一个模块都是,编写完毕后进行编译,然后下载调试,测试代码是否有问题,保证模块工作的可靠性。所有的测试均已正常,则软件开发完毕。需求分析确定系统软件设计框架编写相关代码
30、确定系统模块功能编译代码下载调试代码是否所有功能调试正常?N软件开发完成Y图 .2系统软件开发流程main()函数初始化任务函数开始任务调度任务1任务2任务3任务n图 .3任务线程逻辑2,3通信协议本文设计的智能家居系统使用esp8266 Wi-Fi模块进行通信,并且采取TCP/IP协议进行通信。TCP/IP分层协议共有四层,分别是网络接口层、网络层、传输层和应用层。TCP/IP并非指TCP和IP这两种协议,IP、ICMP、TCP、UDP、TELNET、FTP以及HTTP等协议都属于TCPIP协议7,TCPIP协议又称为网际协议群,泛指这一类的网络协议。本文的智能家居系统采用两个esp8266
31、 Wi-Fi模块,并且使用TCP通信协议,STM32中的Wi-Fi模块作为TCP服务端Server,界面控制端的Wi-Fi模块作为客户端Client。除了各层的固定协议以外,我们设置了用户自定义协议,即在发送或接受数据的时候以固定的格式进行封装或以固定方法进行解析,每一条数据都严格按照我们商定好的协议来封装和解析,若是接收到用户自定义协议以外的数据将被忽视。并且自定义的通信协议能更有效的保护控制信息,若是通信数据被恶意截取,但是对方不了解我们对协议的定义,那将无法获取该数据的实际信息。本系统中的数据通信主要由三部分组成,前两部分之间由空格隔开,第一部分是指的是操作的对象,第二部分也有几部分组成
32、,主要是包含操作对象有何种操作,并且做何种操作等信息。第二部分中的子部分由-隔开。第三部分则是结束标志“rn”。现在以客厅灯的操作为例进行介绍,“COLOR RGB-xxx-xxx-xxxrn”,这句协议的意思是,操作对象是颜色,即客厅的智能彩灯;第二部分的第一小部分指的是通过RGB的方式来进行控制颜色,后面的9个“x”代表的是三个0255的指,后面三小部分则是控制的主要命令,也就是控制的最终结果。“COLOR PATTERNrn”而这一句协议的意思是操作对象依旧是客厅灯的颜色,其中第二部分中的中括号的内容为实际值,指的是情景模式,发送特定的模式实现特定灯光效果。用户自定义协议是实现无线控制的
33、基础也是关键的一步,好的通信协议能够提高程序的解析速度从而提高程序的响应效率。2.4UCOSIII操作系统UCOS系统是RTOS(Real Time OS)类的实时操作系统,Free RTOS、RXT、RT-Thread、DJYOS等都是RTOS实时操作系统。RTOS实时操作系统强调的就是实时性,该类型系统又分为软实时和硬实时。RTOS实时操作系统的特点就是实时内核,可剥夺型内核8。RTOS内核主要是负责管理任务,决定哪个任务来占用CPU运行,这也就是RTOS多任务内核管理的能力,这样的优点就像给原本为单个CPU的芯片增加为多个CPU的芯片了,这样可以更有效的提高CPU的使用率,实现程序的模块
34、化开发和多任务管理。目前UCOS系统有两款,分别是UCOSII和UCOSIII。本智能家居系统设计中所使用的是UCOSIII。相对于UCOSII,UCOSIII增加了许多新的功能,例如:互斥型信号量、任务挂起、防死锁机制、用户自定义接口函数、任务被内核多个元素挂起、向无信号请求的任务发送信号量等。UCOSIII系统的灵活性非常多高,只要用户的CPU和RAM足够大,理论上UCOSIII系统可以实现无数个任务,并且任务的内存大小可随意分配,这样可以充分和具有针对性的去利用芯片的内存;同时UCOSIII可以对任务设置优先级,这与中断相似,能实现其总是运行最高优先级的任务。本文的智能家居系统采用的就是
35、这种模块化的任务控制的设计思想。通过一个的任务模块来管理一个的硬件软件设计思想,使得系统有效有规律的工作运行。例如,Wi-Fi无线数据处理模块,该模块就相当于是一个while死循环,循环内部就是对Wi-Fi模块的管理,在该while循环里面就是一个消息队列阻塞等待函数,在没有接收到任何消息的时候,这个任务就相当于是休眠的,操作系统不会给它分配时间片,CPU会把时间片分配给就绪态的任务,直到消息队列接收到数据,该任务今日就绪态时才有机会获得CPU的使用权,这就是一个典型的任务,在需要使用CPU的时候获得CPU使用权,其余时候都在休眠。本智能家居系统采用UCOSIII实时操作系统而不是以前的前后台
36、系统是由于UCOSIII的实时性。本系统中有十多个任务,由于前后台系统只有一个大的while死循环和一些中断函数,各个模块的管理就是在while循环里面的部分代码,这对于本系统的十多个任务的代码编写会显得比较臃肿,而且在循环的过程中本不该做判断和不该去延时的部分代码也也在不停的执行,这样会导致一些硬件响应不及时,甚至无响应,而UCOSIII正好解决了这个问题。2.5本章小结 本章主要对软件系统的整体设计方案进行论述,其中包括软件的整体设计架构、软件开发的流程、无线通信的协议以及软件采用的开源实时操作系统UCOSIII。第三章 智能家居系统的软件实现3.1开发工具与MCU3.1.1 KeilMD
37、KKeil MDK是一款行业领先的ARM C/C+编译工具链。它能完美无瑕的支持多种器件,如Cortex-M系列、ARM7、ARM9和Cortex-R4系列等。Keil MDK同时还具备Vision4 IDE集成开发环境以及仿真器和调试工具,并且对于TCPIP网络群提供多种网络协议和应用4。Keil MDK软件自带了非常多的历程,用户可通过历程来快速熟悉该软件的开发。Keil MDK目前为ARM公司所有,原本是由Keil公司开发的软件,针对于微型控制器的软件开发平台。Keil MDK是当下最主流的单片机微型控制软件开发工具,并且集成了业内最领先的技术。Keil MDK还有许多别称,如Realv
38、iew MDK、MDK-ARM、I-MDK等。Keil非常容易学习和使用,不管是在开发过程中还是调试过程中都非常便捷,因此非常多的嵌入式工程师,都对其十分喜爱。Keil在程序调试的时候可起到非常关键的作用,具备大多数调试软件的功能,如断点调试、单步调试等。3.1.2 STM32F407STM32中的ST指的是ST公司研发的芯片,ST是一家全球半导体公司意法半导体,意法半导体作为全球领先的半导体公司,专门为不同电子应用领域的客户提供成熟完善的智能驾驶和物联网半导体解决方案5。M是指该芯片是微电子或微控制器,在STM32中的ARMv7架构系列,明确的划分为三个系列,如:A系列,是面向高端的基于虚拟
39、内存的高端芯片,例如目前很多安卓手机就是使用A系列的芯片;R系列,是针对实时性要求比较强的系统芯片系列,例如在工业或者航天等对时间要求苛刻的情景下,R系列会使用的比较多;M系列,是针对微控制器的,低功耗应用;32是指该芯片是32位的。STM32根据其内核架构不同,可按如下分类,主流产品:STM32F0、STM32F3和STM32F1;高性能产品:STM32F2、STM32F4、STM32F7和STM32H7等;低功耗产品: STM32L4 、STM 32L0、STM32L1和STM32L4+。STM32的应用场景非常广泛,例如在工业自动化领域中可用于断路器、工业网络、可编程逻辑控制器等;在医学
40、设备中可用于心电监护仪、电量计量、便携式测试仪、血糖仪等;在建筑安防消防设备中可用于报警系统、控制面板、测量设备等。STM32能应用如此广泛得益于其有许多优势,STM32使用的是当下主流的Cortex内核,具有极高的性能,并且具有且丰富的外接设备、功耗低以及合理的价格;对于每一款芯片都有全面的说明文档和帮助文档支持。芯片的型号总类繁多,涉及的领域非常广;以及有强大的用户基础,由于CM3芯片的成功,积累了大批的群体用户,为其做了铺垫。我们的智能家居系统设计所使用的芯片是STM32F407,该芯片所属系列主要面向的是小于1010nm的高度封装的、高性能、高集成、嵌入式存储器和外接设备的工业、医疗与
41、消费应用。STM32F407的正常工作频率为168MHz,可以通过配置PLL适当的提高或者降低CPU频率,从而达到超高性能状态或者低功耗状态。STM32F407在168MHz的频率下从Flash存储执行的时候,它能够提供210DMIPS/556CoreMark的性能,并且理由立法半导体自身研发的ART加速器,实现了Flash执行时的零等待状态。并且该芯片的DSP指令以及浮点单元时产品的应用范围更加广阔。STM32Fxx系列产品采用的是意法半导体ART加速器和90纳米工艺的,其特点是具备动态功耗调整的功能。该芯片具备多达17个定时器,其中有频率高达168MHz的16位和32位的6。3.2智能照明
42、控制模块本文的智能家居系统采取两种方式对灯进行控制。第一种是使用WS2812智能外控集成LED光源模块,用于客厅,作为多情景模式颜色和RGB自定义可调颜色控制;另一种是普通的LED光源,通过PWM控制其亮度,用于卧室。WS2812模块控制是给该模块上的一个IO引脚输入高低电平将信息传输给模块,实际上传输的是连续的01数据,一共24位,每八位代表一个颜色RGB中的一个。如表.1所示,其中0码由0.35s高电平和0.7s低电平组成,1码由0.8s高电平和表3.1 WS2812数据传输时间T0H0码,高电平时间0.35 s150nsT0H0码,低电平时间0.7 s150nsT1L1码,高电平时间0.
43、8 s150nsT1L1码,低电平时间0.6 s150nsRST帧单位,低电平时间50 s0.6s低电平组成。由表1可知,高低电平的时间达到了纳秒级别,但是STM32F407最高只能达到s,再低的话就会出现严重的误差,因此需要使用STM32内核级函数_nop(),该函数占用一个逻辑运算的时间,部分代码如下:void rgb_led_write0(void) / 高电平:400ns150ns;低电平:850ns150nsRGB_LED_1;_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop(); / 延时 5.9
44、5ns * 67 = 398nsRGB_LED_0;_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop();_nop(); / 时间 5.95ns * 141 = 839ns由函数名可知这部分代码封装了给WS2812模块写0码的内容,写1码的函数也差不多,只有_nop()函数的数量不一样。上面的代码就封装好了写一个01码的函数,由于要写3个字节,共24位,也就是24个01码,因此需要进一步封装,代码如下:void rgb_led_write_byte(uint8_t byte) / 写一个字节uint8_t i;for(i=
45、0;i8;i+)if(byte&0x80)rgb_led_write1();elsergb_led_write0();byte = 1;以上代码将写一个01码的函数封装成写一个字节的函数,可代表RGB中的任意一位。然后再做最后的封装,一次性传入三个参数,分别代码RGB,通过调用写字节函数,一次性的发送24为数据给WS2812模块,以实现显示特定的颜色。void rgb_led_write_24bits(uint8_t green, uint8_t red, uint8_t blue)rgb_led_write_byte(green);rgb_led_write_byte(red);rgb_le
46、d_write_byte(blue);这样的编写程序方式有很大优势,高度的封装函数对于代码的可读性和移植性具有重要作用,例如如果程序需要移植,WS2812模块所接的引脚改变了,那么这代码只需要修改最底层的初始化引脚和修改宏RGB_LED_1/ RGB_LED_0的值即可,提高了代码的移植效率。普通LED光源PWM智能控制亮度是通过初始化引脚为PWM脉冲宽度调制来实现灯的亮度调节,PWM全称为Pulse Width Modulation,能够通过调制输出自定义的频率以及占空比。初始化引脚为PWM脉冲输出主要有如图.1以下几步:使能定时器端口硬件时钟配置输出频率配置脉冲输出模式使能脉冲工作配置引脚
47、为复用模式图 3.1 PWM初始化流程3.3无线Wi-Fi模块无线Wi-Fi模块的软件逻辑如图3.2所示,主要是由以下几部分组成。由于esp8266模块是STM32是通过串口通信的,因此需要对串口进行初始化,使用中断来接收来自Wi-Fi模块的数据,相对于软件,硬件中断的优先级是最高的,使用中断来接收数据能保证数据的完整性。再而就是对模块进行配置,配置完成后就进入消息等待队列,最后就是处理数据。初始化串口配置esp8266 Wi-Fi模块工作模式进入消息等待队列消息处理初始化中断等待数据发送消息队列图 3.2 Wi-Fi任务逻辑部分代码如下:OS_ERR err;OS_MSG_SIZE msg_size;char *p;usart3_init(115200);/ 配置模式usart3_send_str(