基于物联网技术的智能家居嵌入式系统设计.docx
《基于物联网技术的智能家居嵌入式系统设计.docx》由会员分享,可在线阅读,更多相关《基于物联网技术的智能家居嵌入式系统设计.docx(63页珍藏版)》请在冰豆网上搜索。
![基于物联网技术的智能家居嵌入式系统设计.docx](https://file1.bdocx.com/fileroot1/2023-2/6/00e2457f-787b-4ea0-8273-078a8ac915e7/00e2457f-787b-4ea0-8273-078a8ac915e71.gif)
基于物联网技术的智能家居嵌入式系统设计
基于物联网技术的智能家居嵌入式系统设计
摘要
从上世纪的住宅电子化、住宅自动化到今天的住宅智能化,基于物联网技术的智能家居正逐步融入到我们的生活当中来。
作为嵌入式Linux系统设计的一个典型应用,智能家居是融合自动化控制系统、网络通信系统于一体的网络化、智能化家居控制系统。
基于物联网的智能家居嵌入式系统设计,主要分为三个子系统,即前端数据采集子系统、终端服务器子系统、上位机反控子系统。
前端数据采集子系统,主要负责实时数据采集与传输,包括温度数据、湿度数据、时钟数据,与终端服务器子系统通过串口进行单工通信,其中包括单片机主控制处理模块、温度采集模块、时钟采集模块、报警模块、电平转换模块等。
终端服务器子系统,主要负责实时数据存储与传输,即存储从前端采集模子系统收到的实时数据,传输独立采集数据,其搭载的BOA服务器可以进行远程浏览访问控制,包括前台界面、后台控制模块、智能家居控制模块等,另外,也可以进行独立数据采集以及传输。
上位机反控子系统,主要负责数据存储备份以及网络数据远程访问控制。
解析由终端服务器传输来的实时数据,同步显示在上位机界面上,另外可以通过浏览器远程访问控制搭载在终端服务器上的BOA服务器,实现智能家居远程访问控制。
关键词物联网嵌入式系统智能家居
DesignofIntelligentHomeEmbeddedSystemBasedonInternetofThings
ABSTRACT
Fromthelastcentury’selectronichomeandautomationhome,intelligenthomebasedonInternettechnologyisgraduallycomingintoourlives.AsatypicalapplicationoftheembeddedLinuxsystem,theintelligenthomeisnetworkingandintelligenthomecontrolsystemwhichintegratedautomatedcontrolsystemsandnetworkcommunicationsystems.
TheintelligenthomeembeddedsystembasedonInternetofThingsismainlydesignedtobethreesubsystems.Theyarenamelythefrontdataacquisitionsubsystem,terminalserversubsystem,hostcomputeranti-controlsubsystem.
Thefrontdataacquisitionsubsystemmainlyrealizeddataacquisitionandtransmissionwhichincludetemperaturedata,humidityandclock.Itsimplexcommunicatedwithterminalserversubsystemthroughserialport.Thissubsystemincludesamicrocontrollermastercontrolprocessingmodule,temperatureacquisitionmodule,clockacquisitionmodule,alarmmodule,levelconversionmodule.
Terminalserversubsystemmainlyrealizedstorageandtransmission.Theprocessstoredreal-timedatareceivedfromfrontacquisitionsubsystemandtransmittedtohostcomputeranti-controlsubsystem.WecanremotelybrowseandcontroltheBOAserverequippedinthissubsystemwhichincludesthefrontinterfacemodule,thebackgroundcontrolmodule,intelligenthomecontrolmodule.Itcanalsoseparatelycarryoutdatacollectionandtransmission.
Hostcomputeranti-controlsubsystemmainlyrealizeddatastoragebackupandnetworkdataremoteaccesscontrol.Itsynchronouslydisplayedoninterfacebyanalyzingrealtimedatatransmissionfromterminalserver.Besides,itcanalsoremotelyaccessandcontrolBOAserverthroughawebbrowser.Sorealizetheremoteaccessandcontrolofintelligenthome.
KEYWORDSInternetofThings,embeddedsystem,intelligenthome
图目录
表目录
缩略词表
英文缩写
英文全称
对应中文
BOA
蛇,引申为单任务HTTP服务器
ADSL
AsymmetricDigitalSubscriberLine
非对称数字用户环路
ARM
AdvancedRISCMachines
高级精简指令集制造公司
AVR
A与V先生共同研究的RISC精简指令集高速8位单片机
CGI
CommonGatewayInterface
通用网关接口
CMOS
ComplementaryMetalOxideSemiconductor
互补金属氧化物半导体
COM
CommunicationPort
串口
CPU
Central Processing Unit
中央处理器
CRC
CyclicalRedundancyCheck
循环冗余码校验
DB
Define Byte
定义字节
DS
DataSegmentRegister
数据段寄存器
GIS
GeographicInformationSystem
地理信息系统
GND
Ground
地线或零线
GNOME
TheGNUNetworkObjectModelEnvironment
GNU网络对象模型环境
GNU
GNU'sNotUnix
引申为自由的软件
GPGGA
GlobalPositioningSystemFixData
GPS系统固定数据
GPRMC
RecommendedMinimumSpecificGPS/TRANSITData
建议使用最小GPS数据格式
GPS
GlobalPositioningSystem
全球定位系统
GRUB
GRandUnifiedBootloader
多重操作系统启动管理器
GUI
GraphicalUserInterface
图形用户接口
HA
HomeAutomation
住宅自动化
HE
HomenElectronics
住宅电子化
HI
HomeIntelligent
住宅智能化
HTML
HypertextMarkupLanguage
超文本标记语言
I/O
input/output
输入输出端口
I2C
Inter-IntegratedCircuit
内部整合电路
IC
IntegratedCircuit
集成电路
IP
InternetProtocol
网络之间互联的协议
KDE
KoolDesktopEnvironment
K桌面环境
LCD
LiquidCrystalDisplay
液晶显示器
LED
LightEmittingDiode
发光二级管
LILO
LinuxLoader
Linux加载程序
MCS
MicrocontrollerSystem
微控制系统
MIME
MultipurposeInternetMailExtensions
多用途网际邮件扩充协议
MJPEG
MotionJointPhotographicExpertsGroup
运动联合图像专家小组
PC
PersonalComputer
个人计算机
PNG
PortableNetworkGraphicFormat
可移植的网络图像格式
QTE
Quick Time Event
快速反应事件
RAM
RandomAccessMemory
随机存储器
RISC
Reduced Instruction Set Computer
精简指令集计算机
ROM
Read-OnlyMemory
只读存储器
RS
RecommendedStandard
推荐标准
RX
Receive
接收
SD
SecureDigitalMemoryCard
安全数码卡
SPI
SerialPeripheralInterface
串行外设接口
STM
SynchronousTransferModule
同步传输模式
TCP
TransmissionControlProtocol
传输控制协议
TTL
TimeToLive
生存时间
TX
Transmit
传送
UART
UniversalAsynchronousReceiver/Transmitter
通用异步接收/发送装置
UDP
UserDatagramProtocol
用户数据包协议
USB
UniversalSerialBus
通用串口总线
UVC
USBVideoClass
USB视频类别
VCC
VoltCurrentCondenser
电源
第1章绪论
从20世纪80年代初,家用电器开始采用电子工艺技术,住宅电子化概念(HE,HomenElectronics)逐渐出现在人们的视野当中。
到90年代中期,将家用电器、网络设备、家庭安防设备等各自独立的系统整合为一体后,人们进入到了住宅自动化HA,HomeAutomation)的时代。
而进入到21世纪,随着电子工艺技术的革新,信息技术的迅猛发展,嵌入式设备以崭新的面孔出现在人们的生活中,它将网络设备、家电设备、安保设备通过主控制器进行控制、管理,即现如今的住宅智能化(HI,HomeIntelligent),也就是智能家居的雏形。
智能家居,即通过物联网技术整合自动化控制系统、计算机通信系统于一体的网络化、智能化家居控制系统。
智能家居能够让用户使用更加便捷、人性化的方式来控制管理家用电器,比如,通过触摸屏、遥控器、电话、互联网等控制家用设备;另一方面,智能家居内的各种设备相互间可以通讯,不需要用户指挥也能根据不同的状态互动运行,从而给用户带来最大程度的高效、便利、舒适与安全。
智能家居系统一般主要包括:
智能家居(中央)控制管理系统、灯光控制系统、家庭安防系统、家居布线系统、家庭网络系统、背景音乐控制系统、家庭多媒体系统、家庭环境控制系统等八大子系统[1]。
其中,智能家居(中央)控制管理系统、家居照明控制系统、家庭安防系统是其必备系统。
而基于物联网的智能家居嵌入式系统设计,正是智能家居系统的一个简单缩影,在三大必备系统的基础之上,参考增加了背景音乐控制系统、家庭网络系统等功能模块。
下面是系统的整体架构框图,如图11所示。
图11系统整体架构框图
基于S3C2440的智能家居嵌入式系统,整个系统分为三个子系统,即前端数据采集子系统、终端服务器子系统、上位机反控子系统。
其中前端数据采集子系统主要负责实时数据采集与传输,与终端服务器子系统通过串口或者I2C进行单工通信;终端服务器子系统负责实时数据存储与传输,其搭载的嵌入式BOA服务器可以通过网络浏览器进行远程访问控制,并且该子系统也可以进行独立数据采集传输;上位机反控子系统负责数据存储与备份,另外可以通过网络进行远程访问控制。
第2章嵌入式系统环境搭建
一般嵌入式Linux系统主要包括以下几个部分[1]:
(1)引导加载程序:
其中包括内部ROM中的固化启动代码和Bootloader两部分。
固化启动代码是厂家生产芯片时固化在ROM中的,其主要作用是引导Bootloader;而Bootloader是用来初始化硬件环境,加载Linux内核。
(2)Linux内核:
通过Bootloader传递内核参数来引导加载内核。
(3)文件系统:
包括根文件系统和建立在Flash设备上的其他文件系统,包含了Linux系统能够运行所必需的应用程序、库文件等,比如用户操作Linux的控制界面shell程序、动态链接的程序运行时所需要的glibc等。
(4)用户应用程序:
用户自定义的应用程序,它们也存储在文件系统当中,当然在用户应用程序以及内核层之间还可能包含嵌入式用户界面GUI。
嵌入式Linux系统的典型架构,如图21所示。
图21嵌入式Linux系统中的典型分区结构
根据上述嵌入式Linux系统的结构组成,基于物联网的智能家居嵌入式系统的设计,需要构建嵌入式系统开发环境,这其中包括Bootloader的移植、Linux内核裁剪、Rootfs根文件系统制作、QT4GUI的移植、Sqlite3嵌入式数据库的移植、Boa嵌入式服务器的搭载等。
2.1Bootloader的移植
Bootloader是在操作系统内核启动之前运行的一段小程序,通过这段程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备一个正确的环境,然后从别处(比如Flash、NET、SD卡等)引导Linux内核映像文件,最终加载Linux内核,启动Linux系统。
现如今,bootloader的种类非常多,一般比较常用的bootloader[1],在x86架构上有GRUB、LILO等,而在ARM架构上则有Vivi、U_Boot等,其适用性如表21所示。
从表中可以看出,U_boot对各种平台的支持性比较好,事实上,U_boot是遵循GNU条款的开放源代码项目,可以引导多种操作系统、支持多种架构的CPU,比如ARM、X86、PowerPC等。
支持多种操作系统,比如Linux、NetBSD、VxWorks、Windows等。
表21bootloader的分类
Bootloader
描述
X86
ARM
PowerPC
Vivi
针对三星的引导程序
否
是
否
U_Boot
通用引导程序
是
是
是
LILO
Linux磁盘引导程序
是
否
否
GRUB
GNU的LILO替代程序
是
否
否
但是,U_Boot一直以来都没有支持S3C2440,移植U_Boot仍是使用SBC2410的文件作为蓝本,主要针对S3C2440与S3C2410的不同,以及SBC2410与Micro440外设的不同来做相应的调整与修改,并增加新的功能特性。
S3C2440与S3C2410的主要区别是[2]2440的主频更高,在接口方面,增加了摄像头接口和AC97音频接口,在寄存器方面,NANDFLASH控制寄存器有较大变化,另外,芯片的时钟控制寄存器也有一定的变化,其他寄存器是兼容的。
下面是Bootloader移植的简要步骤:
步骤一:
修改顶层Makefile,定义交叉编译工具链和开发板配置选项,在/board目录中建立开发板micro2440目录,并拷贝复制sbc2410x的文件到此,并作适当修改;
步骤二:
测试编译环境,对出现的错误进行相应的调整修改。
如果测试编译通过,说明编译环境的基本的开发板代码没有问题,由于编译的蓝本是基于SBC2410的,接下来的工作主要是按照代码的执行流程来针对mico2440做相应的修改;
步骤三:
进入/cpu/arm920t/start.S初始化代码,针对CPU频率的不同修改初始化设置,针对寄存器配置的不同,作相应的调整与修改;
步骤四:
在UBoot启动的其一阶段,初始化NandFlash控制器,起到代码重定向的作用,但是在第二阶段的start_armboot函数还是需要再次初始化NandFlash控制器,真正启动U_boot,2410与2440NandFlash控制器上的寄存器和启动流程差别很大,需要修改NandFlash底层驱动代码。
接下来增加对yaffs2文件系统的支持,对网络协议、串口传输等作相应的修改;
步骤五:
根据配置文件,重新编译移植。
2.2Linux内核裁剪
相比于Linux2.4内核,2.6内核支持更多的平台架构,采用新的调度算法,使进程间的切换更加高效。
而基于物联网的的智能家居嵌入式系统则是在Linux2.6.32的基础上裁剪移植的。
在虚拟机下建立内核源码树,对于ARM架构的S3C2440,与其体系相关的内核代码在arch/arm目录下,在后面相关的移植裁剪工作,也主要是针对此目录下的文件。
对于ARM架构,通过缺省配置内核,在顶层目录下执行命令makemenuconfig,选择支持的平台S3C2410进行相应的配置,同样在顶层目录下执行命令makezImage,编译内核,在arch/arm/boot目录下生成相应的内核映像文件zImage。
下面主要是针对与平台相关的驱动,手工定制Linux内核。
(1)主配制菜单界面,如图22所示。
图22主配置菜单界面
(2)LCD驱动配置界面
在主菜单界面,进入DeviceDrivers->GraphicSupport->LCDSelect选择如图23所示的LCD型号支持。
图23LCD驱动配置界面
(3)触摸屏驱动配置界面
在主菜单界面,进入DeviceDrivers->InputdeviceSupport->Touchscreens选择如图24所示的触摸屏配置支持。
图24触摸屏驱动配置界面
(4)USB鼠标键盘配置界面
在主菜单界面,进入DeviceDrivers->HIDDevice->USBDevice选择如图25所示的USB鼠标键盘配置支持。
(5)USB摄像头驱动配置界面
在主菜单界面,进入DeviceDrivers->Multimediadevice->Videocaptureadapters–>V4LUSBdevice选择如图26所示的USB摄像头配置支持。
图25USB鼠标键盘配置界面
图26USB摄像头驱动配置界面
(6)DM9000网卡驱动配置界面
在主菜单界面,进入NetworkingSupport->NetworkingOptions,缺省配置一般网络支持,比如TCP等,进入DeviceDrivers->NetworkDevicesupport->Ethernet(10Mor100M)选择如图27所示的网卡驱动配置支持。
(7)AC97音频驱动配置界面
在主菜单界面,进入DeviceDrivers->Soundcardsupport->AdvancedLinuxSoundArchitecture选择如图28所示的音频驱动配置支持。
图27DM9000网卡驱动配置界面
图28AC97音频驱动配置界面
(8)串口驱动配置界面
在主菜单界面,进入Characterdevices->Serialdrivers选择如图29所示的串口配置支持。
(9)文件系统配置界面
在主菜单界面,进入Filesystems->Miscellaneousfilesystems选择如图210所示的yaffs2支持。
进入Filesystems->Networkfilesystem,选择如图211所示的NFS文件系统支持。
图29串口驱动配置界面
图210yaffs2文件系统配置界面
图211nfs文件系统配置界面
2.3根文件系统制作
区别于Windows系统,Linux中并没有C、D、E等盘符的概念,它是以树状形式来组织管理所有目录、文件的,而其他分区则是以挂载的形式挂接在某个目录上,然后通过访问目录来访问相应分区上的文件。
事实上根文件系统就是被挂载在目录“/”上,在根文件系统目录下又有其相应的各个目录、文件,比如/etc、/mnt、/dev、/lib等,其他分区挂载在/mnt目录下,比如CDRom等。
每一个分区上的文件需要遵循一定的文件系统类型,比如常见的yaffs、ntfs、fat32、ext3等。
实际上,除了这几种确实存储在存储分区上的文件系统类型以外,Linux还有几种虚拟的文件系统,比如sysfs、proc等,与实际存在的文件系统区别是,他们的目录文件并不存储在实际的存储设备上,而是在访问时由内核临时动态生成。
嵌入式Linux系统,在由U_boot引导内核之后,需要加载根文件系统,而所谓的根文件系统,是根据需要专门定制后移植到嵌入式开发板上的。
实际上,制作根文件系统,就是按照需要创建各种目录,并在里面存放需要的文件,比如在/etc目录下存放系统配置文件,在/lib目录下存放系统库文件,在/dev目录下存放设备节点文件,在/sbin、/bin目录下存放可执行文件等。
在虚拟机下编辑执行脚本程序rootfs.sh,完成根文件系统目录的创建工作,完善最小根文件系统,其中包括/bin、/dev、/lib等。
使用BusyBox工具创建嵌入式根文件系统/bin、/sbin目录下的可执行文件,另外在/dev目录下创建必要的设备节点,在/lib目录下创建必要的动态链接库,在/etc目录下创建必要的配置文件,在/dev目录下创建必要的配置文件等。
类似于裁剪Linux内核,解压源码包进入相应目录后,执行makemenuconfig命令即可进入相应的配置界面。
包含各个配置选项,如核心命令Coreutils、控制台相关命令ConsoleUtilities、网络方面的命令NetworkingUtilities、进程相关的命令ProcessUtilities等。
(1)主配置菜单界面,如图212所示。
(2)压缩、解压缩工具命令配置界面
在主配置菜单界面,选择ArchivalUtilities选项,进入如图213所示的压缩、解压缩工具命令配置界面。
图212busybox主配置界面