基于樹莓派平臺(tái)的電梯彩屏顯示系統(tǒng)設(shè)計(jì)
?、匍_發(fā)環(huán)境:Linux內(nèi)核2.4或更高;GCC版本3.3或更高;用于MIPS,其GCC版本3.4或更高。
本文引用地址:http://www.ex-cimer.com/article/249574.htm?、谡加么鎯?chǔ)空間:存儲(chǔ)空間取決于配置,壓縮后為1.7~4.1 MB;未壓縮為3.6—9.0MB。
?、塾布脚_(tái):易于載入任何支持帶C++編譯器和幀緩沖器驅(qū)動(dòng)Linux驅(qū)動(dòng)的處理器;支持ARM、x86、MIPS、PowerPC。
?、躌aspberry Pi(B型)滿足以上條件,故可以進(jìn)行Qt5的移植。
3.1.2 Qt5的移植準(zhǔn)備
在做Qt5移植之前首先做以下移植準(zhǔn)備:
?、俳⒁粋€(gè)文件夾/home/opt來存放編譯所需的源碼和文件。
?、谙螺dRaspbian Wheezy鏡像,本文采用2012-07-15-wheezy-raspbian.img。
?、巯螺d工具鏈,本文采用gcc-4.7-linaro-rpi-gnueabihf。
?、芟螺d交叉編譯工具,本文采用cross-compile-tools。
?、菹螺dQt5源碼。
?、尴螺dqtjsbackend庫的應(yīng)用補(bǔ)丁。
然后建立文件夾mnt/rasp-pi-rootfs,將Raspbian Wheezy鏡像掛載到此文件夾下,并進(jìn)入Qt5源碼文件夾執(zhí)行初始化代碼init-reposi tory。
3.1.3 Qt5的編譯
首先進(jìn)入cross-compile-tools文件夾執(zhí)行一個(gè)腳本fixQualifiedLibraryPaths來修改鏈接和庫路徑。
然后編譯qtbase,配置如下:
當(dāng)在鏡像中編譯安裝完所有的模塊之后,將其復(fù)制到SDcard。
3.1.4 安裝Qt Creator
從網(wǎng)站http://qt-project.org/wiki/Crcate#QtonPi_App_SDK上下載Qt Crcator安裝包,并在Linux系統(tǒng)下對(duì)其進(jìn)行安裝配置。由于Qt5需要Qtcreator2.6.0以上的版本作為支持,本文采用2.6.1版本。
3.2 外圍部件讀取程序
本系統(tǒng)通過讀取掛在I2C總線上的實(shí)時(shí)時(shí)鐘芯片來獲取時(shí)間信息,通過溫度傳感設(shè)備獲取溫度信息。本文以讀取實(shí)時(shí)時(shí)鐘芯片的數(shù)據(jù)為例,操作如下:
這些設(shè)備的操作通過C代碼來實(shí)現(xiàn),然后將其編譯成動(dòng)態(tài)鏈接庫的形式,供界面應(yīng)用程序調(diào)用。
3.3 界面應(yīng)用程序的實(shí)現(xiàn)
圖形界面開發(fā)是Qt/Embedded開發(fā)的一個(gè)重點(diǎn),本系統(tǒng)的界面結(jié)構(gòu)包括樓層信息區(qū)域、運(yùn)行方向區(qū)域、圖片顯示區(qū)域、溫度時(shí)間顯示區(qū)域、狀態(tài)顯示區(qū)域、本系統(tǒng)涉及到視圖的跳轉(zhuǎn)、數(shù)據(jù)的傳遞、控件的使用、布局和事件處理等等。其程序流程如圖4所示。
整個(gè)顯示界面通過MainWindow類實(shí)現(xiàn),該類繼承自QmainWindow,而各顯示區(qū)域均通過繼承QWidget類來實(shí)現(xiàn)。如圖3所示,通過定時(shí)器1每隔30 ms調(diào)用Main-Window的槽函數(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)需要顯示圖片時(shí),該類調(diào)用ImageView類的對(duì)象負(fù)責(zé)圖片顯示;當(dāng)系統(tǒng)需要顯示視頻時(shí),該類調(diào)用PlayerWidget類的對(duì)象負(fù)責(zé)處理視頻播放。ImageView類和PlayerWidget類也是繼承自Qwidget。ImageView類負(fù)責(zé)獲取SD卡上的圖片實(shí)例,將其顯示在正確的位置,并通過定時(shí)器2實(shí)現(xiàn)圖片的切換。PlayerWidget類負(fù)責(zé)啟動(dòng)MPlayer,并控制視頻顯示到正確的位置。
溫度時(shí)間顯示區(qū)域是在TimeView類和temperatureView類中實(shí)現(xiàn)。TimeView類的成員函數(shù)getCurrentTime()通過調(diào)用動(dòng)態(tài)鏈接庫的C函數(shù)getpcf8563Time(pcf8563_time*pTime)來讀取掛在I2C總線上的時(shí)鐘芯片的時(shí)鐘信息,并將其顯示在正確的區(qū)域上。
temperatureView類主要用于顯示溫度數(shù)據(jù),而真正獲取溫度數(shù)據(jù)的過程是在TemperatureHandler類中實(shí)現(xiàn)的。開辟一個(gè)新的線程,通過定時(shí)器3每隔500 ms在槽函數(shù)readData()中調(diào)用一次動(dòng)態(tài)鏈接庫的C函數(shù)therm_dsl8b20(long*date)來讀取溫度傳感器的數(shù)據(jù)。
temperatureThread=new QThread(this); //開辟新線程
connect(temptimer,SIGNAL(timeout()),this,SLOT(readData())); //讀取溫度
4 系統(tǒng)調(diào)試結(jié)果
根據(jù)模擬的NICE3000通信協(xié)議、外圍部件的操作及Qt5的圖形界面編程,實(shí)現(xiàn)了電梯彩屏顯示系統(tǒng),其硬件設(shè)備圖和調(diào)試結(jié)果圖如圖5、圖6所示。
結(jié)語
本文對(duì)基于Raspberry Pi并利用Qt5編程來實(shí)現(xiàn)的電梯彩屏顯示系統(tǒng)進(jìn)行了闡述。首先介紹了整個(gè)系統(tǒng)的構(gòu)架;接著在接口轉(zhuǎn)接板子系統(tǒng)中介紹了NICE3000通信協(xié)議,并對(duì)其進(jìn)行解析;然后在顯示板子系統(tǒng)中介紹了外圍部件的操作,以讀取實(shí)時(shí)時(shí)鐘芯片的數(shù)據(jù)為例;最后根據(jù)解析、讀取的數(shù)據(jù)利用Qt5編程實(shí)現(xiàn)了電梯彩屏顯示系統(tǒng)。本文對(duì)傳統(tǒng)的LED點(diǎn)陣列電梯顯示系統(tǒng)提供了有效的改進(jìn)方法,改變了其單調(diào)的顯示方式,成本低廉,更具商業(yè)價(jià)值。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux相關(guān)文章:linux教程
c++相關(guān)文章:c++教程
評(píng)論