王華本,胡建明,鹿建銀
(安徽新華學(xué)院信息工程學(xué)院,安徽合肥 230088)
?
基于嵌入式系統(tǒng)ZigBee傳感器控制LED矩陣的設(shè)計(jì)與實(shí)現(xiàn)
王華本,胡建明,鹿建銀
(安徽新華學(xué)院信息工程學(xué)院,安徽合肥 230088)
[摘要]本文在嵌入式系統(tǒng)的平臺(tái)下,將ZigBee技術(shù)引入到LED矩陣的設(shè)計(jì)系統(tǒng)中,提出一種由 ZigBee傳感器構(gòu)成的LED顯示模式的具體實(shí)現(xiàn)方法。在CVT-6410實(shí)驗(yàn)箱上研究了LED顯示模式、漢字字符轉(zhuǎn)換成點(diǎn)陣的設(shè)計(jì)原理,實(shí)現(xiàn)了控制LED矩陣顯示圖形、控制LED矩陣圖形變換和控制LED矩陣亮度變換,為L(zhǎng)ED顯示屏的進(jìn)一步應(yīng)用創(chuàng)造了條件。
[關(guān)鍵詞]ZigBee技術(shù);LED矩陣;嵌入式系統(tǒng);圖形變換
無(wú)線LED顯示屏的優(yōu)勢(shì)是改變了傳統(tǒng)的LED顯示屏需外來(lái)傳遞信息的顯示方式,使用ZigBee技術(shù)可以隨時(shí)隨地改變信息并在LED顯示屏上顯示所要的結(jié)果,使得LED顯示屏的使用范圍得到擴(kuò)展。無(wú)線LED顯示屏采用無(wú)線遠(yuǎn)程控制方式,可實(shí)現(xiàn)近距離控制,具有良好的發(fā)展前景。
1Linux的設(shè)備文件
Linux將外部設(shè)備看作一個(gè)文件來(lái)管理,用戶使用外部設(shè)備就像使用普通文件一樣。按照存取方式的不同,可以分為兩種[1]:字符設(shè)備、塊設(shè)備,按照是否對(duì)應(yīng)物理實(shí)體,也可以分為兩種:物理設(shè)備、虛擬設(shè)備。設(shè)備文件存放在/dev目錄下,使用設(shè)備的主設(shè)備號(hào)和次設(shè)備號(hào)來(lái)區(qū)分指定的外部設(shè)備。主設(shè)備號(hào)說(shuō)明設(shè)備類型,次設(shè)備號(hào)說(shuō)明具體指哪一個(gè)設(shè)備。
應(yīng)用程序通過(guò)open、read、write等命令完成對(duì)設(shè)備的訪問(wèn)。當(dāng)應(yīng)用程序調(diào)用設(shè)備文件時(shí),程序就會(huì)去找它對(duì)應(yīng)的設(shè)備文件,在文件內(nèi)會(huì)對(duì)設(shè)備進(jìn)行初始化。在設(shè)備文件中外部設(shè)備的硬件地址會(huì)被映射成一個(gè)虛擬地址,在LED矩陣的設(shè)備文件中使用的就是虛擬地址0xF600,在內(nèi)核的文件中有一個(gè)地址的映射表,它將物理地址0x38000000映射成虛擬地址0xF6000000,所以設(shè)備文件最終還是依托于物理硬件。這里涉及初始化函數(shù)、接口函數(shù)、退出函數(shù),同時(shí)字符設(shè)備還會(huì)提供一個(gè)對(duì)設(shè)備進(jìn)行操作的函數(shù)static struct file_operations dev_fops,在函數(shù)中提供了一個(gè)mled_ioctl接口,根據(jù)這個(gè)mled_ioctl接口會(huì)對(duì)對(duì)應(yīng)的物理地址進(jìn)行操作,在設(shè)備文件中外部設(shè)備的硬件地址會(huì)被映射成一個(gè)虛擬地址,在LED矩陣的設(shè)備文件中使用的就是虛擬地址,在內(nèi)核的里面有一個(gè)地址的映射表,通過(guò)源文件里面關(guān)鍵的核心語(yǔ)句,實(shí)現(xiàn)地址的映射。
.virtual=0xF6000000,
.pfn=__phys_to_pfn(S3C64XX_PA_XM0CSN5),//片選5,0x38000000
.length=0x10000,
.type=MT_DEVICE,
2LED矩陣的工作原理
LED的電路結(jié)構(gòu)如圖1所示,從硬件圖中可以知道此時(shí)LED共陽(yáng)極的8*8點(diǎn)陣,列連接的是發(fā)光二極管的陽(yáng)極,行所連接的發(fā)光二極管的陰極,發(fā)光二極管核心的組成部分是PN結(jié),LED發(fā)光的原理是當(dāng)PN結(jié)加正向電壓時(shí),外接電源的正極接發(fā)光二極管的陽(yáng)極,外接電源的負(fù)極接發(fā)光二極管的陰極,大量的電子將移向P區(qū),在P區(qū)里電子填入空穴中,然后就會(huì)以光子的形式發(fā)出能量[2]。
從圖1中可以看出,8*8共陽(yáng)極的LED,不管顯示圖形還是文字,都是控制LED器件在對(duì)應(yīng)發(fā)光二極管所組成的文字或圖形位置的地方發(fā)光,當(dāng)圖形或文字對(duì)應(yīng)的地方都發(fā)光,其它地方不發(fā)光就可以得到想要的顯示結(jié)果,在嵌入式系統(tǒng)下控制LED列、行的16進(jìn)制代碼如圖2所示。
圖1 LED矩陣的硬件原理圖
圖2 控制LED列、行的16進(jìn)制代碼
同時(shí)控制各個(gè)對(duì)應(yīng)位置的LED發(fā)光的方法稱為靜態(tài)顯示。每個(gè)8*8的點(diǎn)陣共有64個(gè)發(fā)光二極管,但是如果采用鎖存器來(lái)擴(kuò)展端口,對(duì)一個(gè)很大的LED矩陣來(lái)說(shuō)靜態(tài)顯示就不合理了,因?yàn)闆](méi)有那么多的I/O口去控制。在這里使用的僅僅是8*8的點(diǎn)陣,而在實(shí)際使用中,幾乎都是大或超大的顯示屏,顯示采用動(dòng)態(tài)掃描的方式取代靜態(tài)顯示[3]。LED以動(dòng)態(tài)掃描的方式逐行或逐列輪流點(diǎn)亮,這種方法可以讓I/O口進(jìn)行復(fù)用。
在嵌入式系統(tǒng)中,LED點(diǎn)陣顯示主要是通過(guò)調(diào)用接口函數(shù)來(lái)實(shí)現(xiàn)顯示的功能,在LED點(diǎn)陣顯示圖形和文字的時(shí)候,需要將應(yīng)用中的LED單獨(dú)放置并根據(jù)需要點(diǎn)亮。這里的主函數(shù)主要是調(diào)用ioctl函數(shù),static long mled_ioctl(struct file *filp, unsigned int cmd, unsigned long arg),這個(gè)函數(shù)在matrix驅(qū)動(dòng)程序時(shí)會(huì)詳細(xì)地定義ioctl函數(shù)的功能,ioctl 定義了3個(gè)參數(shù),分別表示文件描述符,命令字,LED對(duì)應(yīng)的列、行的16進(jìn)制代碼編碼。譬如ioctl(fd,1,0x1efd);//0001 1110 1111 1101,這里的0x1efd表示前列后行,從圖1硬件原理圖中可以知道,8*8點(diǎn)列的LED是共陽(yáng)極的,列數(shù)據(jù)為高,行數(shù)據(jù)為低時(shí)對(duì)應(yīng)發(fā)光二極管點(diǎn)亮。
圖形的變換是通過(guò)動(dòng)態(tài)掃描方式將許多不同的靜態(tài)圖片有序地顯示出來(lái),因?yàn)闀r(shí)間間隔較短,靜態(tài)圖片一點(diǎn)點(diǎn)改變,就形成了人眼所看到的動(dòng)畫了。
LED矩陣亮度的變換可以通過(guò)改變電路電流大小和點(diǎn)亮?xí)r間的占空比(PWM),來(lái)改變LED點(diǎn)亮個(gè)數(shù)。所謂的占空比是指在動(dòng)態(tài)掃描點(diǎn)亮LED燈時(shí),單位時(shí)間內(nèi)亮與不亮的次數(shù)。為了避免出現(xiàn)閃爍效果,可以通過(guò)占空比來(lái)進(jìn)行調(diào)節(jié)[5]。在單位時(shí)間內(nèi)掃描點(diǎn)亮的次數(shù)越多,人的肉眼感覺(jué)會(huì)越亮。
3ZigBee的原理與控制
3.1ZigBee的設(shè)備分類與結(jié)構(gòu)
ZigBee網(wǎng)絡(luò)中有協(xié)調(diào)器、路由器、終端3種類型的設(shè)備,協(xié)調(diào)器是組織網(wǎng)絡(luò)的管理者,ZigBee網(wǎng)絡(luò)組建好以后,通常由協(xié)調(diào)器負(fù)責(zé)組建網(wǎng)絡(luò),并根據(jù)掃描所獲取的信息等待路由器或者終端節(jié)點(diǎn)加入該網(wǎng)絡(luò),這里的發(fā)送和接收數(shù)據(jù)主要是由終端負(fù)責(zé)。協(xié)調(diào)器上接網(wǎng)關(guān),下接路由器或終端,在整個(gè)網(wǎng)絡(luò)中起到關(guān)鍵作用,主要負(fù)責(zé)解析控制命令,對(duì)終端進(jìn)行有效的控制。
ZigBee的結(jié)構(gòu)主要包括物理層、網(wǎng)絡(luò)層、應(yīng)用層。物理層的主要功能如下:激活或使射頻收發(fā)器進(jìn)入休眠狀態(tài),檢測(cè)信道的能量,檢測(cè)收到數(shù)據(jù)包的鏈路質(zhì)量指示,評(píng)估空閑信道,發(fā)送和接收數(shù)據(jù)包[6]。網(wǎng)絡(luò)層主要完成的任務(wù)為發(fā)送和接收網(wǎng)絡(luò)層的數(shù)據(jù)包。
3.2ZigBee的命令格式
在程序中,通過(guò)拼裝ZigBee的報(bào)文格式,來(lái)讓ZigBee模塊發(fā)送想要的控制數(shù)據(jù)。SBuff[0]- SBuff[11]是ZigBee命令的固定格式,SBuff[12]- SBuff[19]是控制LED,SBuff[20]是異或檢校位從SBuff指針指向的內(nèi)存中讀取sizeof(buf)個(gè)字節(jié)放到文件serial_fd中。之所以用sizeof(buf),這樣動(dòng)態(tài)判定buf的大小,不至于從文件中取長(zhǎng)度大于buf長(zhǎng)度的字節(jié)數(shù)。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中,而文件讀寫位置則無(wú)法預(yù)期。通過(guò)變換12~19位字節(jié)的數(shù)據(jù),可控制LED矩陣顯示不同的效果。linux操作系統(tǒng)內(nèi)部所提供的3個(gè)定時(shí)器,可以更好地控制LED燈明暗變換和閃爍效果。
4編寫、編譯、調(diào)試及運(yùn)行
由于整個(gè)開發(fā)過(guò)程涉及兩個(gè)平臺(tái),這里在宿主機(jī)上進(jìn)行代碼的編寫,ZigBee傳感器控制LED的函數(shù)功能表如圖3所示,因?yàn)榫幾g工具消耗的存儲(chǔ)空間不少,而且需要很強(qiáng)的CPU運(yùn)算能力,在ARM上是不可能進(jìn)行本機(jī)編譯的。交叉編譯工具能夠解決這個(gè)問(wèn)題。首先打開硬件,通過(guò)文件描述符open函數(shù)打開所需要的硬件,涉及通信、進(jìn)行波特率設(shè)置、奇偶校驗(yàn)位設(shè)置、串口的初始化等一系列操作,這里通過(guò)Linux平臺(tái)下的gedit指令進(jìn)行源程序的編寫,同時(shí)編寫Makefile文件,執(zhí)行make指令進(jìn)行編譯,整個(gè)調(diào)試的過(guò)程就在執(zhí)行make指令后進(jìn)行。調(diào)試通過(guò)后,就可以在宿主機(jī)上運(yùn)行可執(zhí)行文件。這里宿主機(jī)和目標(biāo)機(jī)進(jìn)行通信時(shí),必須要使用ifconfig指令進(jìn)行IP地址的配置,宿主機(jī)和目標(biāo)機(jī)的IP地址共用一個(gè)網(wǎng)關(guān)。在宿主機(jī)輸入以下命令配置宿主機(jī)地址及其啟動(dòng)網(wǎng)絡(luò)服務(wù):
ifconfig eth1 192.168.1.2 netmask 255.255.255.0
service nfs start
整個(gè)過(guò)程全部結(jié)束后,會(huì)出現(xiàn)4個(gè)OK的提示,下一步就要在目標(biāo)機(jī)上進(jìn)行操作,在目標(biāo)機(jī)輸入以下命令進(jìn)行掛載:
mount 192.168.1.8:/tftpboot/ mnt/ -o nolock
進(jìn)入mnt文件夾 ls顯示文件列表可以看到有可執(zhí)行文件,說(shuō)明掛載成功。
在這個(gè)ZigBee傳感器控制LED的函數(shù)功能表(圖3)中,writer_function是最關(guān)鍵的函數(shù)。
void writer_function(int signo)
{
int nwrite;
printf(“控制LED 矩陣 ”);
printf(“ ”);
unsigned char SBuff[21];
SBuff[0]=0x02;//幀頭
SBuff[1]=0x12;//包長(zhǎng)度,Byte2~n的字節(jié)數(shù)。
SBuff[2]=0xB9;//0x46B9(cmd控制命令,低字節(jié)在前)
SBuff[3]=0x46;
SBuff[4]=0xF1;//cmd END Point 命令段節(jié)點(diǎn)號(hào)
SBuff[5]=save_byte4;//兩個(gè)字節(jié)短地址,低字節(jié)在前,網(wǎng)關(guān)上電時(shí)為0x0000
SBuff[6]=save_byte5;
SBuff[7]=0x01;//任務(wù)號(hào),一般為1
SBuff[8]=0x07;//傳感板類型號(hào)
SBuff[9]=0x04;//位選0x02數(shù)碼管,0x01蜂鳴器,0x04LED矩陣
SBuff[10]=0x0;//數(shù)碼管段選
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));
}
通過(guò)動(dòng)態(tài)掃描的方式來(lái)顯示一個(gè)心形,如圖4所示。
圖3 ZigBee傳感器控制LED的函數(shù)功能表
圖4 ZigBee傳感器控制LED的顯示心形圖案
從圖4中可以看到,第一行狀態(tài)為0x0cfe(0000 1100);第二行狀態(tài)為0x1efd(0001 1110);第三行狀態(tài)為0x3efb(0011 1110);第四行狀態(tài)為0x7cf7(0111 1100);第五行狀態(tài)為0x7cef(0111 1100);第六行狀態(tài)為0x3edf(0011 1110);第七行狀態(tài)為0x1ebf(0001 1110);第八行狀態(tài)為0x0c7f(0000 1100)。
在數(shù)據(jù)拼裝時(shí),把圖形信息拼裝進(jìn)SBuff的12~19字節(jié)中。當(dāng)ZigBee模塊收到數(shù)據(jù)包時(shí),第12~19的字節(jié)就會(huì)把LED引腳狀態(tài)解讀出來(lái),控制LED矩陣顯示出想要的圖案。如果要顯示其它圖案同理類推。若要顯示動(dòng)態(tài)的效果,可以通過(guò)SBuff值的變化來(lái)實(shí)現(xiàn)功能。
5結(jié)語(yǔ)
傳統(tǒng)LED顯示屏存在很多局限性,特別是使用范圍受到限制,通常為10米左右,使用價(jià)值很難體現(xiàn)出來(lái)。ZigBee控制的LED通過(guò)無(wú)線傳感器網(wǎng)絡(luò)可以解決范圍受限制的問(wèn)題,能夠體現(xiàn)無(wú)線LED顯示屏的使用價(jià)值。LED顯示屏是由LED矩陣塊組成,通過(guò)點(diǎn)亮發(fā)光二極管來(lái)實(shí)現(xiàn)顯示的目的,顯示的信息靜如油畫,動(dòng)如電影,畫面的立體感很強(qiáng),在嵌入式平臺(tái)下ZigBee傳感器控制的LED設(shè)計(jì)廣泛應(yīng)用到各個(gè)領(lǐng)域,ZigBee網(wǎng)絡(luò)的路由器突破了有線LED顯示屏空間和地域的限制,解決了通信難題,LED顯示屏的使用價(jià)值將得到很大的提升。
[參考文獻(xiàn)]
[1]張顥.基于ZigBee無(wú)線傳感器網(wǎng)絡(luò)的室內(nèi)環(huán)境檢測(cè)系統(tǒng)[D].長(zhǎng)沙:湖南大學(xué),2013.
[2]廖之健.基于ZigBee無(wú)線傳感網(wǎng)絡(luò)遠(yuǎn)程機(jī)房環(huán)境監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn)[D].廣東:廣東工業(yè)大學(xué),2011.
[3]鄒思軼.嵌入式Linux設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2012:15-36.
[4]陳祥,薛美盛,王俊.基于ZigBee協(xié)議的溫室環(huán)境無(wú)線監(jiān)控系統(tǒng)[J].中國(guó)科學(xué)技術(shù)大學(xué)學(xué)報(bào),2014(1):39-41.
[5]雷霖,董華莉.基于ZigBee協(xié)議的煤礦瓦斯和溫濕度監(jiān)測(cè)節(jié)點(diǎn)設(shè)計(jì)[J].電子科技大學(xué)自動(dòng)化工程學(xué)院報(bào),2011(3): 32-34.
[6]王浩然,秦會(huì)斌.LED點(diǎn)陣屏顯示單元的設(shè)計(jì)與驅(qū)動(dòng)控制[M].上海:華東大學(xué)出版社,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
[作者簡(jiǎn)介]王華本(1972- ),女,講師,碩士,從事嵌入式與人工智能研究。
[基金項(xiàng)目]安徽高校省級(jí)自然科學(xué)研究重點(diǎn)項(xiàng)目“智慧旅游平臺(tái)——物聯(lián)網(wǎng)位置感知服務(wù)在旅游行業(yè)中的應(yīng)用”(KJ2014A096);省級(jí)質(zhì)量工程項(xiàng)目“計(jì)算機(jī)科學(xué)與技術(shù)特色專業(yè)”(20101139);校級(jí)質(zhì)量工程項(xiàng)目“特色教材”《嵌入式系統(tǒng)》(2014tsjcx07)。
[收稿日期]2015-10-29
[中圖分類號(hào)]TP399
[文獻(xiàn)標(biāo)識(shí)碼]A
[文章編號(hào)]2095-7602(2016)02-0026-04