王華本,胡建明,鹿建銀
(安徽新華學院信息工程學院,安徽合肥 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