基于嵌入式系统ZigBee传感器控制LED矩阵的设计与实现

2016-03-15 01:19王华本胡建明鹿建银
长春师范大学学报 2016年2期
关键词:ZigBee技术嵌入式系统

王华本,胡建明,鹿建银

(安徽新华学院信息工程学院,安徽合肥 230088)



基于嵌入式系统ZigBee传感器控制LED矩阵的设计与实现

王华本,胡建明,鹿建银

(安徽新华学院信息工程学院,安徽合肥 230088)

[摘要]本文在嵌入式系统的平台下,将ZigBee技术引入到LED矩阵的设计系统中,提出一种由 ZigBee传感器构成的LED显示模式的具体实现方法。在CVT-6410实验箱上研究了LED显示模式、汉字字符转换成点阵的设计原理,实现了控制LED矩阵显示图形、控制LED矩阵图形变换和控制LED矩阵亮度变换,为LED显示屏的进一步应用创造了条件。

[关键词]ZigBee技术;LED矩阵;嵌入式系统;图形变换

无线LED显示屏的优势是改变了传统的LED显示屏需外来传递信息的显示方式,使用ZigBee技术可以随时随地改变信息并在LED显示屏上显示所要的结果,使得LED显示屏的使用范围得到扩展。无线LED显示屏采用无线远程控制方式,可实现近距离控制,具有良好的发展前景。

1Linux的设备文件

Linux将外部设备看作一个文件来管理,用户使用外部设备就像使用普通文件一样。按照存取方式的不同,可以分为两种[1]:字符设备、块设备,按照是否对应物理实体,也可以分为两种:物理设备、虚拟设备。设备文件存放在/dev目录下,使用设备的主设备号和次设备号来区分指定的外部设备。主设备号说明设备类型,次设备号说明具体指哪一个设备。

应用程序通过open、read、write等命令完成对设备的访问。当应用程序调用设备文件时,程序就会去找它对应的设备文件,在文件内会对设备进行初始化。在设备文件中外部设备的硬件地址会被映射成一个虚拟地址,在LED矩阵的设备文件中使用的就是虚拟地址0xF600,在内核的文件中有一个地址的映射表,它将物理地址0x38000000映射成虚拟地址0xF6000000,所以设备文件最终还是依托于物理硬件。这里涉及初始化函数、接口函数、退出函数,同时字符设备还会提供一个对设备进行操作的函数static struct file_operations dev_fops,在函数中提供了一个mled_ioctl接口,根据这个mled_ioctl接口会对对应的物理地址进行操作,在设备文件中外部设备的硬件地址会被映射成一个虚拟地址,在LED矩阵的设备文件中使用的就是虚拟地址,在内核的里面有一个地址的映射表,通过源文件里面关键的核心语句,实现地址的映射。

.virtual=0xF6000000,

.pfn=__phys_to_pfn(S3C64XX_PA_XM0CSN5),//片选5,0x38000000

.length=0x10000,

.type=MT_DEVICE,

2LED矩阵的工作原理

LED的电路结构如图1所示,从硬件图中可以知道此时LED共阳极的8*8点阵,列连接的是发光二极管的阳极,行所连接的发光二极管的阴极,发光二极管核心的组成部分是PN结,LED发光的原理是当PN结加正向电压时,外接电源的正极接发光二极管的阳极,外接电源的负极接发光二极管的阴极,大量的电子将移向P区,在P区里电子填入空穴中,然后就会以光子的形式发出能量[2]。

从图1中可以看出,8*8共阳极的LED,不管显示图形还是文字,都是控制LED器件在对应发光二极管所组成的文字或图形位置的地方发光,当图形或文字对应的地方都发光,其它地方不发光就可以得到想要的显示结果,在嵌入式系统下控制LED列、行的16进制代码如图2所示。

图1 LED矩阵的硬件原理图

图2 控制LED列、行的16进制代码

同时控制各个对应位置的LED发光的方法称为静态显示。每个8*8的点阵共有64个发光二极管,但是如果采用锁存器来扩展端口,对一个很大的LED矩阵来说静态显示就不合理了,因为没有那么多的I/O口去控制。在这里使用的仅仅是8*8的点阵,而在实际使用中,几乎都是大或超大的显示屏,显示采用动态扫描的方式取代静态显示[3]。LED以动态扫描的方式逐行或逐列轮流点亮,这种方法可以让I/O口进行复用。

在嵌入式系统中,LED点阵显示主要是通过调用接口函数来实现显示的功能,在LED点阵显示图形和文字的时候,需要将应用中的LED单独放置并根据需要点亮。这里的主函数主要是调用ioctl函数,static long mled_ioctl(struct file *filp, unsigned int cmd, unsigned long arg),这个函数在matrix驱动程序时会详细地定义ioctl函数的功能,ioctl 定义了3个参数,分别表示文件描述符,命令字,LED对应的列、行的16进制代码编码。譬如ioctl(fd,1,0x1efd);//0001 1110 1111 1101,这里的0x1efd表示前列后行,从图1硬件原理图中可以知道,8*8点列的LED是共阳极的,列数据为高,行数据为低时对应发光二极管点亮。

图形的变换是通过动态扫描方式将许多不同的静态图片有序地显示出来,因为时间间隔较短,静态图片一点点改变,就形成了人眼所看到的动画了。

LED矩阵亮度的变换可以通过改变电路电流大小和点亮时间的占空比(PWM),来改变LED点亮个数。所谓的占空比是指在动态扫描点亮LED灯时,单位时间内亮与不亮的次数。为了避免出现闪烁效果,可以通过占空比来进行调节[5]。在单位时间内扫描点亮的次数越多,人的肉眼感觉会越亮。

3ZigBee的原理与控制

3.1ZigBee的设备分类与结构

ZigBee网络中有协调器、路由器、终端3种类型的设备,协调器是组织网络的管理者,ZigBee网络组建好以后,通常由协调器负责组建网络,并根据扫描所获取的信息等待路由器或者终端节点加入该网络,这里的发送和接收数据主要是由终端负责。协调器上接网关,下接路由器或终端,在整个网络中起到关键作用,主要负责解析控制命令,对终端进行有效的控制。

ZigBee的结构主要包括物理层、网络层、应用层。物理层的主要功能如下:激活或使射频收发器进入休眠状态,检测信道的能量,检测收到数据包的链路质量指示,评估空闲信道,发送和接收数据包[6]。网络层主要完成的任务为发送和接收网络层的数据包。

3.2ZigBee的命令格式

在程序中,通过拼装ZigBee的报文格式,来让ZigBee模块发送想要的控制数据。SBuff[0]- SBuff[11]是ZigBee命令的固定格式,SBuff[12]- SBuff[19]是控制LED,SBuff[20]是异或检校位从SBuff指针指向的内存中读取sizeof(buf)个字节放到文件serial_fd中。之所以用sizeof(buf),这样动态判定buf的大小,不至于从文件中取长度大于buf长度的字节数。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。通过变换12~19位字节的数据,可控制LED矩阵显示不同的效果。linux操作系统内部所提供的3个定时器,可以更好地控制LED灯明暗变换和闪烁效果。

4编写、编译、调试及运行

由于整个开发过程涉及两个平台,这里在宿主机上进行代码的编写,ZigBee传感器控制LED的函数功能表如图3所示,因为编译工具消耗的存储空间不少,而且需要很强的CPU运算能力,在ARM上是不可能进行本机编译的。交叉编译工具能够解决这个问题。首先打开硬件,通过文件描述符open函数打开所需要的硬件,涉及通信、进行波特率设置、奇偶校验位设置、串口的初始化等一系列操作,这里通过Linux平台下的gedit指令进行源程序的编写,同时编写Makefile文件,执行make指令进行编译,整个调试的过程就在执行make指令后进行。调试通过后,就可以在宿主机上运行可执行文件。这里宿主机和目标机进行通信时,必须要使用ifconfig指令进行IP地址的配置,宿主机和目标机的IP地址共用一个网关。在宿主机输入以下命令配置宿主机地址及其启动网络服务:

ifconfig eth1 192.168.1.2 netmask 255.255.255.0

service nfs start

整个过程全部结束后,会出现4个OK的提示,下一步就要在目标机上进行操作,在目标机输入以下命令进行挂载:

mount 192.168.1.8:/tftpboot/ mnt/ -o nolock

进入mnt文件夹 ls显示文件列表可以看到有可执行文件,说明挂载成功。

在这个ZigBee传感器控制LED的函数功能表(图3)中,writer_function是最关键的函数。

void writer_function(int signo)

{

int nwrite;

printf(“控制LED 矩阵 ”);

printf(“ ”);

unsigned char SBuff[21];

SBuff[0]=0x02;//帧头

SBuff[1]=0x12;//包长度,Byte2~n的字节数。

SBuff[2]=0xB9;//0x46B9(cmd控制命令,低字节在前)

SBuff[3]=0x46;

SBuff[4]=0xF1;//cmd END Point 命令段节点号

SBuff[5]=save_byte4;//两个字节短地址,低字节在前,网关上电时为0x0000

SBuff[6]=save_byte5;

SBuff[7]=0x01;//任务号,一般为1

SBuff[8]=0x07;//传感板类型号

SBuff[9]=0x04;//位选0x02数码管,0x01蜂鸣器,0x04LED矩阵

SBuff[10]=0x0;//数码管段选

SBuff[11]=0x0;//蜂鸣器段选

SBuff[12]=0x0c;//12~19LED控制

SBuff[13]=0x1e;

SBuff[14]=0x3e;

SBuff[15]=0x7c;

SBuff[16]=0x7c;

SBuff[17]=0x3e;

SBuff[18]=0x1e;

SBuff[19]=0x0c;

SBuff[20]=0x0;//异或检校位

SBuff[20]=XorVerifySend(SBuff);

nwrite=write(serial_fd,SBuff,sizeof(SBuff));

}

通过动态扫描的方式来显示一个心形,如图4所示。

图3 ZigBee传感器控制LED的函数功能表

图4 ZigBee传感器控制LED的显示心形图案

从图4中可以看到,第一行状态为0x0cfe(0000 1100);第二行状态为0x1efd(0001 1110);第三行状态为0x3efb(0011 1110);第四行状态为0x7cf7(0111 1100);第五行状态为0x7cef(0111 1100);第六行状态为0x3edf(0011 1110);第七行状态为0x1ebf(0001 1110);第八行状态为0x0c7f(0000 1100)。

在数据拼装时,把图形信息拼装进SBuff的12~19字节中。当ZigBee模块收到数据包时,第12~19的字节就会把LED引脚状态解读出来,控制LED矩阵显示出想要的图案。如果要显示其它图案同理类推。若要显示动态的效果,可以通过SBuff值的变化来实现功能。

5结语

传统LED显示屏存在很多局限性,特别是使用范围受到限制,通常为10米左右,使用价值很难体现出来。ZigBee控制的LED通过无线传感器网络可以解决范围受限制的问题,能够体现无线LED显示屏的使用价值。LED显示屏是由LED矩阵块组成,通过点亮发光二极管来实现显示的目的,显示的信息静如油画,动如电影,画面的立体感很强,在嵌入式平台下ZigBee传感器控制的LED设计广泛应用到各个领域,ZigBee网络的路由器突破了有线LED显示屏空间和地域的限制,解决了通信难题,LED显示屏的使用价值将得到很大的提升。

[参考文献]

[1]张颢.基于ZigBee无线传感器网络的室内环境检测系统[D].长沙:湖南大学,2013.

[2]廖之健.基于ZigBee无线传感网络远程机房环境监控系统的研究与实现[D].广东:广东工业大学,2011.

[3]邹思轶.嵌入式Linux设计与应用[M].北京:清华大学出版社,2012:15-36.

[4]陈祥,薛美盛,王俊.基于ZigBee协议的温室环境无线监控系统[J].中国科学技术大学学报,2014(1):39-41.

[5]雷霖,董华莉.基于ZigBee协议的煤矿瓦斯和温湿度监测节点设计[J].电子科技大学自动化工程学院报,2011(3): 32-34.

[6]王浩然,秦会斌.LED点阵屏显示单元的设计与驱动控制[M].上海:华东大学出版社,2010.

Design of the ZigBee Sensor to Control the LED Matrix Based on Embedded System

WANG Hua-ben, HU Jian-ming, LU Jian-yin

(College of Information Engineering, Anhui Xinhua University, Hefei Anhui 230088, China)

Abstract:In the platform of embedded system, the ZigBee technology is introduced into the design system of LED matrix, and a method for realizing LED display mode which is composed of ZigBee sensor is proposed. The design principle of the LED display mode, the Chinese character conversion into lattice is studied through the CVT-6410 experimental box. The control LED matrix display graphics, the LED matrix graphics transform and the control LED matrix luminance transformation are realized, and the conditions for the further application of LED display are realized.

Key words:ZigBee technology;LED matrix;embedded system;graphics transformation

[作者简介]王华本(1972- ),女,讲师,硕士,从事嵌入式与人工智能研究。

[基金项目]安徽高校省级自然科学研究重点项目“智慧旅游平台——物联网位置感知服务在旅游行业中的应用”(KJ2014A096);省级质量工程项目“计算机科学与技术特色专业”(20101139);校级质量工程项目“特色教材”《嵌入式系统》(2014tsjcx07)。

[收稿日期]2015-10-29

[中图分类号]TP399

[文献标识码]A

[文章编号]2095-7602(2016)02-0026-04

猜你喜欢
ZigBee技术嵌入式系统
多传感器数据融合技术在机房监控系统中的应用
基于ZigBee的舱内人员巡检系统的应用研究
办公自动化系统的设计
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究
基于WiFi 技术的家居环境监测系统的设计与研究
基于ZigBee的电能无线抄表系统的设计