基于ZigBee技术的无线考勤系统设计毕业设计解析Word下载.docx
《基于ZigBee技术的无线考勤系统设计毕业设计解析Word下载.docx》由会员分享,可在线阅读,更多相关《基于ZigBee技术的无线考勤系统设计毕业设计解析Word下载.docx(19页珍藏版)》请在冰点文库上搜索。
ZigBee协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。
协议栈是协议的具体实现形式。
协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。
图2展示了ZigBee无线网络协议层的架构图。
ZigBee的协议分为两部分,IEEE802.15.4定义了物理层和介质访问层技术规范,ZigBee联盟定义了网络层、应用程序支持子层、应用层技术规范。
ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用。
图2ZigBee协议栈层次
2.2协议栈结构
ZigBee协议栈是由一组称为层模块的结构来构成。
下一层将为上层执行特定的一组服务。
数据单位提供数据传输服务,管理单位提供所有其他服务。
各个业务实体通过服务接入点(SAP)为上层提供一个接口,每个服务接入点支持多个服务原语来实现要求的功能。
IEEE802.15.4-2003标准定义了物理层(PHY)和媒体访问控制子层(MAC)两个网络底层。
基于物理层和媒体访问控制子层,ZigBee联盟开发了网络层和应用层体系结构。
其中,应用支持子层(APS)、ZigBee设备对象(ZDO)组成了应用层框架。
应用对象使用架构层以及APS共享和安全服务,则有不同芯片制造商来定义。
IEEE802.15.4-2003标准有两个物理层,运行在868/915MHz和2.4GHz两个不同的频率范围。
由于每个国家开放给科学和工业的ISM频段标准不同,所以低频率物理层包括欧洲使用的868MHZ频段以及美国和澳大利亚等国家使用915MH频段。
而世界上大多数国家的使用的是2.4GHz频段的物理层。
IEEE802.15.4-2003MAC子层使用CSMA-CA协议机制来控制无线信道访问。
CSMA-CA协议即载波监听多路访问冲突检测方法。
2.3ZigBee网络拓扑
ZigBee网络层支持星型,树撞和网状的网络拓扑结构。
在星型拓扑结构中,控制网络的设备称为ZigBee协调器。
ZigBee协调器负责ZigBee网络备启动和网络设备的维护,其他的设备,称为终端设备,直接与ZigBee协调器进行通信。
在树状和网状网络拓扑结构中,ZigBee协调器负责发起ZigBee网络,选择网络中的一些关键参数,但网络可以通过ZigBee路由器进行扩展。
树型网络中,路由器使用一个分层路由策略传输数据和控制信息在网络中。
树型网络可以使用IEEE802.15.4-2003标准化通信信标。
网状网络允许完全的点对点通信。
在网状网络拓扑中,ZigBee路由器将不定期发布的IEEE802.15.4-2003信标。
图3网络拓扑
ZigBee网络是一个简单的、低成本的通信网络,它应用于一些功率有限和对网络吞吐量无严格要求的设备之间的无线连接。
ZigBee网络的目标是建立一个易于安装、有可靠的数据传输、通信距离短、成本低、非常好的电池寿命这样的一个网络,并且它能保持简单的和灵活的网络协议。
ZigBee网络中含有两个不同的设备,全功能设备(FFD)和简单功能设备(RFD)。
FFD在三种网络模式中可作为整个PAN网络的协调器、路由器或网络中的终端设备。
FFD可以和RFD或者FFD通信,而简单功能设备(RFD)只能和FFD通信。
RFD设备在网络中主要是一个应用设备,它们箱单简单,比如它们可以作为灯的开关或者红外线传感器,但不能传输大规模的数据,且在某一时刻只能和一个FFD相联系。
一个ZigBee网络由几个部分组成。
最基本的部分是设备,设备既可以是FFD,也可以是RFD。
如果两个和更多的设备在一个个人通信空间(POS)范围内,且在同一信道通信,那么这些设备就组成一个WPAN。
但网络中必须含一个FFD设备作为PAN协调器。
对于无线多媒体来说,由于传播的动态性和不确定性,一个精确的覆盖区域是不存在的。
位置和方向的微笑变化,都可能引起信号强度和通信链路的急剧变化。
不管静态设备或移动设备都可能出现这种结果。
3.ZigBee刷卡设备
ZigBee刷卡设备由CC2530系统板外接RC522读写模块组成,实物图如图4所示。
RC522非接触式IC卡读写模块采用PhilipsMFRC522芯片设计,能够读取符合ISO14443A标准的多张卡片,使用方便,成本低廉。
CC2530通过SPI接口直接驱动读写模块。
图4 ZigBee刷卡设备
3.1采集节点主控芯片
节点主控芯片使用的CC2530是由德州仪器公司提出的用于ZigBee应用的片上系统解决方案。
CC2530系统核心板的电路原理图如图5所示。
CC2530片上系统能够广泛解决的2.4GHz应用方案。
这些应用场景能够快速的通过TI提供的Z-Stack协议栈找到合适的解决方案,从而加快开发进程。
同时CC2530片上系统是一具有增强型工业标准8051单片机,并集成了无线收发功能。
CC2530片上系统具有非常低的待机功耗,在普通干电池的驱动下能够稳定工作半年以上。
CC2530工作电压为3.0V到3.6V,待机电流最低值为1微安。
具有丰富的片内外设,包括5通道DMA,红外发生电路,8路12位ADC,硬件支持CSMA/CA,AES安全协处理器,电池监视器和温度传感器,具有捕获功能的32-kHz睡眠定时器以及2个usart(通用同步异步串行发送接收器)等。
图5 ZigBee核心板原理图
3.2非接触式IC卡工作原理
非接触式IC卡电气部分组仅为一个天线和集成电路卡(ASIC)。
卡的天线由适用于包装ISO卡的几个绕组线圈构成。
集成电路卡是由高速(106kb波特率)的射频接口,一个控制单元和一个8KEEPROM(电可擦可编程只读存储器-)。
非接触式IC卡的工作原理为,RC522射频卡读写模块回发一组固定频率的电磁信号,而卡片内具有一个频率与RC522读写模块相同频率的串联谐振电路,在电磁信号的激发下,LC谐振电路将会产生共振,从而使电容内存储了电荷,而电容器的另一极,连接有一个单向导通的电子泵,会将充电电容器的电荷送到另一个电容器储存,当所积累的电荷达到2V,电容器将作为电源为卡片其他电路提供工作电流,将发出卡片内数据或读入RC522模块数据。
3.3ZigBee节点程序
上电后CC2530主控芯片初始化RC522模块,当有符合ISO14443A/MI标准的卡片进入读写范围时,RC522模块通过SPI协议把数据传递给CC2530主控芯片,主控芯片把接收到的数据打包发送到协调器。
程序流程图如图6所示。
图6ZigBee节点程序流程图
4.系统主机设备设计与实现
主机设备由三星6410开发板和CC2530系统板组成,如图7所示。
S3C6410开发板和CC2530系统板通过串口进行通信,当CC2530建立起传感网络后,刷卡节点会自动加入网络。
网关基于Linux3.0内核和飞凌嵌入式技术有限公司提供的文件系统以及QT4.8运行环境,开发了ZigBee网关程序,能够监听ZigBee协调器的串口并且能够读写远程或本地数据库。
下文将详细介绍主机设备的开发过程,包含sqlite数据库移植和嵌入式QT的环境搭建与开发。
图7 ZigBee刷卡考勤网关设备
4.1Sqlite数据库移植
4.1.1Sqlite数据库移植过程
SQLite是遵守ACID的,能够实现自包容、零配置、支持实物的、开源的关系型数据库管理系统,它包含在一个相对其他数据库非常小的的C语言库中。
其特点是高度便携、使用方便、结构紧凑、高效、可靠。
SQLite是D.RichardHipp建立的公有领域项目。
与其他数据库管理系统不同,SQLite不是常见的客户端到服务器模式,SQLite引擎也不是程序与之通信的独立进程,而是连接到程序中成为程序的一个主要部分。
所以,SQLite主要的通信协议是在编程语言内通过直接调用接口函数来实现。
这一方法在消耗总量、延迟时间和整体简单性上有积极的作用。
整个数据库,包括数据库的定义、表、索引和数据本身,都在宿主主机上存储在一个单一的文件中。
SQLite是一款微型嵌入式数据库,目前已经有很多嵌入式产品使用了SQLite数据库引擎。
SQLite具有占用资源非常的低的有点,在嵌入式系统中可能只需要几百K的内存就够了。
移植步骤如下:
1、下载sqlite3源代码、解压
下载地址为http:
//www.sqlite.org/sqlite-src-3070900.zip
2.配置SQLite
在sqlite目录下进行如下配置:
./configure--prefix=/QT/sqlite3--disable-tcl--host=arm-none-linux-gnueabi
3.编译
在Shell环境下使用make命令编译。
3.安装
在Shell环境下使用makeinstall命令安装。
该命令运行后,会将编译好的结果安装到sqlite-arm文件夹下,在安装目录下会生成bin、lib、include文件夹,bin文件夹下是sqlite3可执行文件,lib文件夹下包含sqlite3运行所依赖的库。
另外,在编译包含sqlite数据库的应用程序时,必须指明sqlite所依赖的头文件和库。
4.去掉调试信息
SQLite完成编译后,会产生许多调试信息。
如果把编译见过全部下载到开发板,会占用目标板很多资源。
为了减少占用目标板Flash和其他资源,可以通过命令来去掉调试信息。
在SQLite安装目录下执行如下命令:
arm-linux-stripbin/*
arm-linux-striplib/*
5.移植
命令执行后,会去掉编译结果的调试信息,文件大小减小许多。
将SQLite安装目录下/bin文件夹下的文件sqlite3拷贝到根文件系目录下,并将sqlite_arm/lib目录下的文件拷贝到目标板根文件系统的lib目录下。
完成SQLite移植工作。
4.1.2.SQLite的基本操作命令
(1)建立数据库
sqlite3gstest.sqlite3
命令运行后,在当前目录下建立了名为gstest.sqlite3的数据库。
(2)建立数据表
createtablecall_echo(idINTEGERPRIMARYKEY,nameNUMERIC,numNUMERIC,timeTEXT,countNUMERIC,charge_rateNUMERIC,charge_sumNUMERIC);
建立了名为call_echo的数据表,包含id,name,time,,count,charge_sum,charge_rate七个字段。
(3)向数据表中插入数据
insertintocall_echovalues($n,guoshuai,2,'
new'
4,5,6);
(4)查询数据表中的数据
select*fromcall_echo;
(5)修改call_echo表中的数据
updatecall_echosetid=99whereid=88;
(6)删除表中的数据记录
deletefromcall_echowhereid=99;
(7)SQLite中的其它经常用到的命令
.tables-列出所有的数据库中的数据表
.schematablename-列出指定数据表的结构
.quit-离开数据库
4.1.3SQLite编程介绍
Sqlite数据库提供了多种编程语言连接的库,如PHP,C/C++,JAVA等。
下面简单介绍如何通过C语言编程,实现数据库的创建,以及数据库的各种操作,如表的插入、查询、删除等。
(1)打开数据库由sqlite3_open()函数完成,原型如下:
ntsqlite3_open(constchar*filename,sqlite3**ppdb);
第一个函数形参用来指定数据库文件名。
第二个函数形参是一个SQLite数据库指针,如果数据库打开成功则返回0,否则返回一个出错代码。
(2)关闭数据库由sqlite3_clos()函数完成,原型如下:
intsqlite3_close(sqlite3*);
传递的参数是SQLite数据库指针,用来关闭指定名称的数据库,操作成功是返回0,否则返回一个出错编号。
(3)数据库出错信息由函数完成,原型如下:
intsqlite3_errcode(sqlite3*db);
constchar*sqlite3_errmsg(sqlite3*db);
constchar*sqlite3_errmsg16(sqlite3*db);
上面的函数都是返回出错信息的,第一个函数返回的是最近调用数据库接口的错误代码。
第二个和第三个函数,是返回最近调用数据库接口的错误信息。
第二个函数返回的错误信息是用UTF-8编码的。
第三个函数返回的错误信息是用UTF-16编码的。
(4)数据库SQL语句由sqlite3_exec()函数完成,原型如下:
intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,**errmsg);
这个函数是用来执行SQLite数据库的SQL语句的。
第一个参数是SQLite数据库指针。
第二个参数是要执行的SQL语句字符串。
第三个参数是一个回调函数,在执行查询操作时用到,其它的操作可以传空值即NULL。
第四个参数是传递给回调函数第一个参数的实参。
第五个参数是一个错误信息。
(5)数据库操作的回调由callback()函数完成,原型如下:
intcallback(void*,intargc,char**argv,char**cname);
第一个参数是从sqlite3_exec传递过来的参数,可以为任意的类型。
第二个参数是查询的列数。
第三个参数是查询结果集的值。
第四个参数是列名。
(6)数据库的有专门的查询函数sqlite3_get_table(),原型如下:
intsqlite3_get_table(sqlite3*db,constchar*sql,char***result,int*row,int*col,char**errmsg);
这个函数主要是用来查询的。
第一个参数是数据库描述符指针。
第二个参数是SQL语句。
第三个参数是查询的结果集。
第四个参数是结果集中的行数。
第五个参数是结果集中的列数。
第六个参数是错误信息。
它查询出的行数是从字段名开始的。
即第0行是字段名。
(7)SQLite有许多内置函数用于处理字符串或数字数据。
下面列出了一些有用的SQLite内置函数,如表1,且所有函数都是大小写不敏感,所以可以使用这些函数的小写形式或大写形式或混合形式。
表1SQLite常用字符串处理函数
序号
函数&
描述
1
SQLiteCOUNT函数
SQLiteCOUNT函数是用来计算一个指定数据库表中的行数。
2
SQLiteMAX函数
SQLiteMAX函数是允许我们选择数据库表中某列的最大值。
3
SQLiteMIN函数
SQLiteMIN函数是允许我们选择数据库表中某列的最小值。
4
SQLiteAVG函数
SQLiteAVG函数是计算数据库表中某列的平均值。
5
SQLiteSUM函数
SQLiteSUM函数是允许为一个数值列计算总和。
6
SQLiteRANDOM函数
SQLiteRANDOM函数返回一个指定范围的伪随机整数。
7
SQLiteABS函数
SQLiteABS函数功能是返回数值参数的绝对值。
8
SQLiteUPPER函数
SQLiteUPPER函数功能是把指定字符串转换为大写字母。
9
SQLiteLOWER函数
SQLiteLOWER函数功能是把字符串转换为小写字母。
10
SQLiteLENGTH函数
SQLiteLENGTH函数功能是返回指定字符串的长度。
11
SQLitesqlite_version函数
SQLitesqlite_version函数返回当前SQLite库的版本。
4.2QT开发环境搭建和移植
4.2.1QT概述
Qt是1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。
它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。
Qt是面向对象语言,易于扩展,并且允许组件编程。
2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。
现今,Qt库已经能够支持windows、linux、MAC、embeddedLinux、WindowsCE等多种平台。
4.2.2嵌入式QT开发平台搭建
正式进入QT开发流程之前,需要进行一系列的QT环境搭建工作,Qt环境搭建流程如图4所示。
由图8知,QT平台搭建的最终目标包括:
★在PC机上安装Qt的集成开发环境,用于开发调试时使用。
★在PC机上安装好交叉编译版本的QT编译环境,用于QT程序调试完毕后的交叉
编译、移植时使用。
★在ARM网关上移植QT库,用于支持移植好的QT程序运行。
图8嵌入式QT开发平台搭建流程
4.2.3.QT程序交叉编译流程
完整的嵌入式Qt应用程序从开发到能够应用的流程如图9所示。
交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码。
这里所谓平台,实际上包含两个概念:
体系结(Architecture)、操作系统(OperatingSystem)。
同一个体系结构可以运行不同的操作系统;
同样,同一个操作系统也可以在不同的体系结构上运行。
本文所用的交叉编译方法,即为在我们常说的Intelx86体系结构的linux操作系统中编译生成可以在ARM体系结构中运行的代码。
图9嵌入式Qt应用程序开发流程
4.2.4QT编程
在QT中没有特定的串口控制类,而系统主机和ZigBee网络的协调器通过UART连接,所以采用第三方串口控制类qextserialport进行开发。
程序流程为如图8所示,网关上电后,对设备进行初始化,然后开始监听ZigBee串口,当有刷卡节点的数据传递进来,判断数据是否合法,如果不合法则丢弃,反之则对有效数据进行格式化处理,写入数据库。
软件运行效果图如图10所示。
图10嵌入式网关程序流程图和运行效果图
5.总结
本系统在传统IC卡考勤系统的基础上,将ZigBee无线通信技术引入到考勤系统中,提出基于ZigBee无线通信技术的嵌入式考勤系统的设计方案。
给出了其硬件系统组成和软件设计流程。
该系统主要有IC卡读写模块,发射接收模块和嵌入式系统主机组成,实现了低成本、低功耗,能够实际应用于员工考勤系统。
致谢
首先感谢我的指导老师金中朝讲师,他的严谨负责的治学态度,一丝不苟的工作作风对我产生很大的影响。
一直是我工作、学习中的榜样。
在金中朝老师教导下,我在学校已经踏入了嵌入式开发领域,接触了实际项目开发,对我将来的学习和工作打下了良好基础。
承蒙金老师亲切的关怀和精心的指导,特别是给我提供了创新学习的环境和平台,让我接触了许多新兴技术,使我获益匪浅。
还要感谢我的父母家人。
时光如白驹过隙,回想童年生活,仿佛就在昨日,只是蓦然回首时,才发现曾经依靠的肩膀已经变得孱弱。
感谢他们,让我总是能够在脆弱的时候重新变得坚强,让我在最失意的时候也能够找回自信,让我在迷茫彷徨时,也始终找得到人生的方向。
参考文献
[1]IEEE802.15.4,ZigBee[S].
[2]黄河.基于ARM的嵌入式无线ZigBee网关的设计与实现[D].上海大学,2007.
[3]李建坡朱绪宁隋吉生.基于ZigBee技术的无线指纹考勤系统[J].东北电力大学学报,2009,29(6).
[4]BlanchetteJ.C++GUIQt4编程[M].电子工业出版社,2013.
[5]蒋挺,赵成林.紫蜂技术及其应用[M].北京邮电大学出版社,2006.
[6]韦东山.嵌入式Linux应用开发完全手册[M].人民邮电出版社,2008.
[7]金纯,罗祖秋.ZigBee技术基础及案例分析[M].国防工业出版社,2008.
DesignofwirelessattendancesystembasedonZigBeeTechnology
Abstract:
SystembasedonZigBeenetworkprotocolandembeddedsystem,thecardequipmentandattendancestatisticssystemseparation,networkconstructionisconvenient,easytoinstallanddisassemble,expansionisgood,with