賴江,李英祥,何琪,蘇凱
(成都信息工程學(xué)院 通信工程學(xué)院,成都 610225)
?
基于Raspberry Pi的電梯彩屏顯示系統(tǒng)設(shè)計(jì)*
賴江,李英祥,何琪,蘇凱
(成都信息工程學(xué)院 通信工程學(xué)院,成都 610225)
本文針對多媒體彩屏電梯顯示的需求,在ARM內(nèi)核樹莓派平臺和單片機(jī)接口板雙處理器架構(gòu)的硬件支持下,利用485/CAN總線傳輸技術(shù)、Linux應(yīng)用編程、Qt5用戶界面編程,提出并實(shí)現(xiàn)了一種雙處理器架構(gòu)的電梯彩屏顯示系統(tǒng)。此彩屏顯示系統(tǒng)與傳統(tǒng)顯示系統(tǒng)相比,界面更美觀,功能更豐富,且具有低成本、高穩(wěn)定性等特點(diǎn)。實(shí)際測試結(jié)果表明,此電梯彩屏顯示系統(tǒng)設(shè)計(jì)的可行性和有效性。
電梯;雙處理器架構(gòu);Qt5;樹莓派
近年來,隨著高層建筑數(shù)量的與日俱增,電梯的需求量也在增加?,F(xiàn)階段我們廣泛使用的電梯都是基于LED點(diǎn)陣列的顯示系統(tǒng),顯示狀態(tài)信息比較簡單,顯示方式比較單調(diào)。此外,現(xiàn)在的一些電梯里的廣告機(jī),雖然改善了電梯轎內(nèi)的乘坐環(huán)境,良好的廣告效果也給商家?guī)砹瞬恍〉慕?jīng)濟(jì)效益。但是這種顯示裝置沒有和電梯控制系統(tǒng)融為一體,只是單純的視頻播放而已。
為了使顯示和電梯控制系統(tǒng)相融合,打造舒適的乘坐環(huán)境,針對現(xiàn)有的電梯系統(tǒng)提出一種由單片機(jī)完成不同廠商適配、由ARM/X86統(tǒng)一顯示的雙核處理方法。該方法中ARM/X86處理器專注于統(tǒng)一通用格式電梯狀態(tài)信息解碼、樓層圖片切換或視頻播放,從而提高整個系統(tǒng)的實(shí)時性與可靠性。針對不同廠商的電梯通信協(xié)議,只需要更改單片機(jī)的編解碼程序便可使整個系統(tǒng)重新工作[1-8]。
Raspberry Pi(中文名為“樹莓派”)是一款由英國的樹莓派基金會所開發(fā),以低價硬件及自由軟件為學(xué)生計(jì)算機(jī)編程教育而設(shè)計(jì)的卡片式電腦。其配備一枚700 MHz博通出產(chǎn)的ARM架構(gòu)BCM2835處理器,256 MB內(nèi)存(B型已升級到512 MB內(nèi)存)的微型電腦主板[2]。Raspberry Pi以SD卡為內(nèi)存硬盤,主板周圍有兩個USB接口和一個網(wǎng)口,可連接鍵盤、鼠標(biāo)和網(wǎng)線,同時擁有視頻模擬信號的電視輸出接口和HDMI高清視頻輸出接口。以上部件全部整合在一張僅比信用卡稍大的主板上,具備所有PC的基本功能。其操作系統(tǒng)采用開源的Linux系統(tǒng),比如Debian、ArchLinux,自帶的Iceweasel、KOffice等軟件能夠滿足基本的網(wǎng)絡(luò)瀏覽、文字處理以及計(jì)算機(jī)學(xué)習(xí)的需要[2,5]。
Qt是一個1991年由奇趣科技開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。Qt具有優(yōu)良的跨平臺特性,Qt支持下列操作系統(tǒng):Microsoft Windows 95/98、Microsoft Windows NT、Linux、 Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、FreeBSD、BSD/OS,SCO、AIX、OS390、QNX等等[3-4]。
1.1 系統(tǒng)框架
本系統(tǒng)的硬件部分主要由接口轉(zhuǎn)接板和顯示板組成,系統(tǒng)框圖如圖1所示。
圖1 系統(tǒng)框圖
1.2 子系統(tǒng)功能介紹
1.2.1 接口轉(zhuǎn)接板
接收RS-485/CAN總線上的電梯通信協(xié)議,并完成協(xié)議的解析;承載溫度傳感設(shè)備和掛在I2C總線上的時鐘電路,供顯示板讀取溫度和時間信息,完成用戶按鍵的檢測與編碼。
1.2.2 顯示板
接收接口轉(zhuǎn)接板譯碼后的電梯數(shù)據(jù);讀取溫度和時間信息;實(shí)現(xiàn)界面應(yīng)用程序。
接口轉(zhuǎn)接板子系統(tǒng)硬件主要包括ATmega8單片機(jī)、DS18B20溫度傳感器、PCF8563時鐘芯片、MAX485芯片等。其接口轉(zhuǎn)接板框圖如圖2所示。
圖2 接口轉(zhuǎn)接板框圖
電梯的通信協(xié)議有多種,本文以NICE3000通信協(xié)議為例實(shí)現(xiàn)本系統(tǒng)。
2.1 NICE3000通信協(xié)議的通信設(shè)定
通信方式:RS-485標(biāo)準(zhǔn)、異步、半雙工。
數(shù)據(jù)格式:1位起始位、8位數(shù)據(jù)位、1位停止位、無校驗(yàn)位。
通信波特率:9 600 bps。
通信地址定義:廣播地址為0,外接節(jié)點(diǎn)地址為1~31(外招板撥碼開關(guān)確定),地址同時也表示外招所在樓層;顯示板只是接收顯示,地址設(shè)定為0(撥碼),無需通信回復(fù)。
數(shù)據(jù)校驗(yàn):采用兩位異或校驗(yàn)。
數(shù)據(jù)幀分類:共有兩種形式,其中廣播幀用于外招顯示內(nèi)容的信息,不需要返回幀,另外還有一種是普通幀,主要完成主控制板與外招之間的控制信息交換。
2.2 幀格式
數(shù)據(jù)幀采用固定長度,5個字節(jié),結(jié)構(gòu)為幀頭、用戶數(shù)據(jù)、幀尾。
幀頭:包括1個字節(jié)地址,即主控制板發(fā)送給外招的標(biāo)識,從機(jī)(外招)根據(jù)幀頭判斷本機(jī)是否響應(yīng)當(dāng)前通信。如果地址是廣播地址,則從機(jī)接收信息,但是不用返回。
用戶數(shù)據(jù)包括:數(shù)據(jù)2個字節(jié),根據(jù)發(fā)送方向(主到從或是從到主)以及幀形式定義不同的用戶數(shù)據(jù)。
幀尾:包括2個字節(jié)校驗(yàn)數(shù)據(jù),先發(fā)低位,后發(fā)高位。
電梯系統(tǒng)接收到的數(shù)據(jù)幀不能直接顯示,需要根據(jù)數(shù)據(jù)幀格式,對數(shù)據(jù)進(jìn)行校驗(yàn),然后解析,最后提取有用的數(shù)據(jù)給顯示系統(tǒng)進(jìn)行顯示。本系統(tǒng)的操作如下:
rd = read(fd, rbuf, sizeof(rbuf)); //接收串口數(shù)據(jù)
if(yihuo_value(rbuf, 4) == rbuf[4]); //數(shù)據(jù)校驗(yàn)
num[0] = rbuf[1] & 0x01; //方向解析
num[1] = (rbuf[1]>>1) & 0x03; //狀態(tài)解析
num[2] = (rbuf[1]>>3) & 0x01; //是否超載
num[3] = rbuf[2] & 0x1f; //樓層高位解析
num[4] = rbuf[3] & 0x1f; //樓層低位解析
對于彩屏電梯顯示系統(tǒng)而言,液晶屏的顯示效果對客戶的影響是至關(guān)重要的。因此,應(yīng)用層的程序開發(fā)相當(dāng)重要。考慮到圖形界面控件的豐富程度、漂亮程度以及開源免費(fèi)的持續(xù)升級等因素,選擇了QTE/Qt5圖形開發(fā)平臺。顯示板子系統(tǒng)的架構(gòu)如圖3所示。
圖3 子系統(tǒng)架構(gòu)圖
3.1 Qt的移植
3.1.1 Qt的移植條件
Qt for Embedded Linux是用于嵌入式Linux所支持設(shè)備的領(lǐng)先應(yīng)用程序架構(gòu)。Qt可以在任何支持Linux的平臺上運(yùn)行,創(chuàng)建具有獨(dú)特用戶體驗(yàn)的具備高效內(nèi)存效率的設(shè)備和應(yīng)用程序[3]。Qt的移植需要滿足以下幾個基本條件:
① 開發(fā)環(huán)境:Linux內(nèi)核2.4或更高;GCC版本3.3或更高;用于MIPS,其GCC版本3.4或更高。
② 占用存儲空間:存儲空間取決于配置,壓縮后為1.7~4.1 MB;未壓縮為3.6~9.0 MB。
③ 硬件平臺:易于載入任何支持帶C++編譯器和幀緩沖器驅(qū)動Linux驅(qū)動的處理器;支持ARM、x86、MIPS、PowerPC。
④ Raspberry Pi(B型)滿足以上條件,故可以進(jìn)行Qt5的移植。
3.1.2 Qt5的移植準(zhǔn)備
在做Qt5移植之前首先做以下移植準(zhǔn)備:
① 建立一個文件夾/home/opt來存放編譯所需的源碼和文件。
② 下載Raspbian Wheezy鏡像,本文采用2012-07-15-wheezy-raspbian.img。
③ 下載工具鏈,本文采用gcc-4.7-linaro-rpi-gnueabihf。
④ 下載交叉編譯工具,本文采用cross-compile-tools。
⑤ 下載Qt5源碼。
⑥ 下載qtjsbackend庫的應(yīng)用補(bǔ)丁。
然后建立文件夾mnt/rasp-pi-rootfs,將Raspbian Wheezy鏡像掛載到此文件夾下,并進(jìn)入Qt5源碼文件夾執(zhí)行初始化代碼init-repository。
圖4 程序流程圖
3.1.3 Qt5的編譯
首先進(jìn)入cross-compile-tools文件夾執(zhí)行一個腳本fixQualifiedLibraryPaths來修改鏈接和庫路徑。
然后編譯qtbase,配置如下:
./configure-opengl es2 device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs-opensource -confirm-license -optimized-qmake -reduce-relocations -reduce-exports -release -make libs -prefix/usr/local/qt5pi
接著再編譯其他模塊如qtimageformats、qtsvg、qtjsbackend、qtscript、qtxmlpatterns、qtdeclarative、qtsensors、qt3d、qtgraphicaleffects、qtjsondb、qtlocation、qtdocgallery等。
當(dāng)在鏡像中編譯安裝完所有的模塊之后,將其復(fù)制到SDcard。
3.1.4 安裝Qt Creator
從網(wǎng)站http://qt-project.org/wiki/Create#QtonPi_App_SDK上下載Qt Creator安裝包,并在Linux系統(tǒng)下對其進(jìn)行安裝配置。由于Qt5需要Qtcreator2.6.0以上的版本作為支持,本文采用2.6.1版本。
3.2 外圍部件讀取程序
本系統(tǒng)通過讀取掛在I2C總線上的實(shí)時時鐘芯片來獲取時間信息,通過溫度傳感設(shè)備獲取溫度信息。本文以讀取實(shí)時時鐘芯片的數(shù)據(jù)為例,操作如下:
fd = open('/dev/i2c-1', O_RDWR); //打開I2C總線設(shè)備
ret = ioctl(fd,I2C_TENBIT,0); //設(shè)置數(shù)據(jù)的讀寫格式
ret = ioctl(fd, I2C_SLAVE_FORCE, I2C_ADDR);
//設(shè)置I2C總線上時鐘芯片地址
pTime->Second = BCD_to_HEC((TimeBuff[pcf8563_SEC - 2] & 0x7f));
pTime->Minute = BCD_to_HEC((TimeBuff[pcf8563_MIN - 2] & 0x7f));
pTime->Hour = BCD_to_HEC((TimeBuff[pcf8563_HR - 2] & 0x3f));
這些設(shè)備的操作通過C代碼來實(shí)現(xiàn),然后將其編譯成動態(tài)鏈接庫的形式,供界面應(yīng)用程序調(diào)用。
3.3 界面應(yīng)用程序的實(shí)現(xiàn)
圖形界面開發(fā)是Qt/Embedded開發(fā)的一個重點(diǎn),本系統(tǒng)的界面結(jié)構(gòu)包括樓層信息區(qū)域、運(yùn)行方向區(qū)域、圖片顯示區(qū)域、溫度時間顯示區(qū)域、狀態(tài)顯示區(qū)域、本系統(tǒng)涉及到視圖的跳轉(zhuǎn)、數(shù)據(jù)的傳遞、控件的使用、布局和事件處理等等。其程序流程如圖4所示。
整個顯示界面通過MainWindow類實(shí)現(xiàn),該類繼承自QmainWindow,而各顯示區(qū)域均通過繼承QWidget類來實(shí)現(xiàn)。如圖3所示,通過定時器1每隔30 ms調(diào)用MainWindow的槽函數(shù)checkLiftStstus()來獲取由C函數(shù)open_uart485(int data[])解析的串口數(shù)據(jù)。
connect(timer, SIGNAL(timeout()), this, SLOT(checkLiftStatus())); //獲取電梯信息
將解析后的信息傳遞給樓層信息區(qū)域,運(yùn)行方向區(qū)域,狀態(tài)顯示區(qū)域分別進(jìn)行顯示。
indicatorDirection(data[0]); //方向信息
indicatorState(data[1]); //狀態(tài)信息
liftCurrentFloorNum(data[2]); //樓層信息
圖片視頻顯示區(qū)域是在類ShowController中實(shí)現(xiàn)的,當(dāng)系統(tǒng)需要顯示圖片時,該類調(diào)用ImageView類的對象負(fù)責(zé)圖片顯示;當(dāng)系統(tǒng)需要顯示視頻時,該類調(diào)用PlayerWidget類的對象負(fù)責(zé)處理視頻播放。ImageView類和PlayerWidget類也是繼承自Qwidget。ImageView類負(fù)責(zé)獲取SD卡上的圖片實(shí)例,將其顯示在正確的位置,并通過定時器2實(shí)現(xiàn)圖片的切換。PlayerWidget類負(fù)責(zé)啟動MPlayer,并控制視頻顯示到正確的位置。
溫度時間顯示區(qū)域是在TimeView類和temperatureView類中實(shí)現(xiàn)。TimeView類的成員函數(shù)getCurrentTime()通過調(diào)用動態(tài)鏈接庫的C函數(shù)getpcf8563Time(pcf8563_time *pTime)來讀取掛在I2C總線上的時鐘芯片的時鐘信息,并將其顯示在正確的區(qū)域上。
temperatureView類主要用于顯示溫度數(shù)據(jù),而真正獲取溫度數(shù)據(jù)的過程是在TemperatureHandler類中實(shí)現(xiàn)的。開辟一個新的線程,通過定時器3每隔500 ms在槽函數(shù)readData()中調(diào)用一次動態(tài)鏈接庫的C函數(shù)therm_ds18b20(long *date)來讀取溫度傳感器的數(shù)據(jù)。
temperatureThread=new QThread(this); //開辟新線程
connect(temptimer,SIGNAL(timeout()),this,SLOT(readData())); //讀取溫度
根據(jù)模擬的NICE3000通信協(xié)議、外圍部件的操作及Qt5的圖形界面編程,實(shí)現(xiàn)了電梯彩屏顯示系統(tǒng),其硬件設(shè)備圖和調(diào)試結(jié)果圖如圖5、圖6所示。
圖 5 硬件設(shè)備圖
圖6 調(diào)試結(jié)果
本文對基于Raspberry Pi并利用Qt5編程來實(shí)現(xiàn)的電梯彩屏顯示系統(tǒng)進(jìn)行了闡述。首先介紹了整個系統(tǒng)的構(gòu)架;接著在接口轉(zhuǎn)接板子系統(tǒng)中介紹了NICE3000通信協(xié)議,并對其進(jìn)行解析;然后在顯示板子系統(tǒng)中介紹了外圍部件的操作,以讀取實(shí)時時鐘芯片的數(shù)據(jù)為例;
[1] 楊漢祥,鐘惠芳,邱志城. LED顯示屏的應(yīng)用——電梯屏[J]. 贛南師范學(xué)院學(xué)報,2003(6).
[2] Broadcom.BCM2835 Media Processor,2011.
[3] 陳鯤,陳云秋,劉信新. 基于Qt/Embedded的嵌入式Linux應(yīng)用程序的設(shè)計(jì)[J]. 計(jì)算機(jī)與數(shù)字工程,2009(1).
[4] 王浩南, 劉益成. 基于嵌入式Linux系統(tǒng)下的Qt開發(fā)[J]. 電腦開發(fā)與應(yīng)用,2010(1).
[5] Silicon.Raspberry Pi Cheat Sheet,2012.
[6] 張先淼, 劉新偉,金天均,等. 高可靠電梯通信系統(tǒng)的研究[J]. 機(jī)電工程,2007(10).
[7] 許曉榮,章堅(jiān)武. 嵌入式Linux下LCD界面應(yīng)用程序開發(fā)[J]. 液晶與顯示,2006,21(3).
[8] 邱曉明. 嵌入式多媒體電梯信息顯示系統(tǒng)設(shè)計(jì)[D].上海:上海交通大學(xué),2009.
Elevator Colorful Display System Based on Raspberry Pi
Lai Jiang, Li Yingxiang, He Qi, Su Kai
(School of Communication Engineering,Chengdu University of Information Technology,Chengdu 610225,China)
Aiming at the problem of multimedia color display of elevator, under the support of ARM core platform Raspberry Piand microcontroller interface board, the design proposes and implementes a dual-processor architecture color display system which uses 485/CAN bus transmission technology, Linux application programming and Qt5 user interface programming. Compared with traditional display system, the color display system interface is more beautiful, more feature-rich and has a low cost, high stability and other characteristics. The actual test results show that this elevator color display system is feasible and effective.
elevator; dual-processor architecture; Qt5; Raspberry Pi
省部級—四川省教育廳項(xiàng)目(11ZA113)。
TN91
A
迪娜
2013-12-20)