李俊杰 馮韜 奚志遠 何異 耿磊
摘 要:目前,“停車難”已成為困擾我國諸多城市的嚴重問題。興建智能立體車庫是解決這一難題行之有效的辦法。作為用戶和智能立體車庫進行交流的最直接方式,人機交互界面的設計顯得特別重要。本文在Linux系統(tǒng)下采用Qt語言對人機交互界面進行設計,利用信號與槽機制簡單地實現(xiàn)界面之間的跳轉(zhuǎn),結(jié)合多線程技術實現(xiàn)串口通信和語音提示,同時引入了數(shù)據(jù)庫存儲車庫日常運行時的數(shù)據(jù)與信息。本次設計的交互系統(tǒng)界面簡潔美觀,操作方便,可以直接移植到Linux嵌入式系統(tǒng)中運行使用。
關鍵詞:智能立體車庫 人機交互界面 Qt Linux
中圖分類號:TP273 文獻標識碼:A 文章編號:1672-3791(2016)02(c)-0000-00
0 引言
截止2015年底,我國的機動車數(shù)量達到2.79億輛,機動車駕駛?cè)藬?shù)達3.27億,給城市交通帶來了諸多的問題。為解決停車難的問題,機械式立體車庫應運而生。在立體式車庫的設計中,人機交互界面占有重要的地位,它是用戶體驗車庫的主要方式,其展示結(jié)果將直接影響到用戶體驗。
目前,我國大多數(shù)機械式立體車庫的人機交互界面的設計都過于簡單,或是直接采用機械式操作和非接觸式刷卡存取車。隨著大數(shù)據(jù)時代的到來,這些設計方式不利于對車庫用戶信息的日常管理,滿足不了現(xiàn)代科技飛速發(fā)展帶來的種種需求。針對以上問題,本文采用Qt語言實現(xiàn)了人機交互界面的設計。管理員和用戶均可以通過此界面對各自的信息進行管理,隨時查看自己車位的使用狀況。在出現(xiàn)緊急情況時,管理員可以通過該界面第一時間與用戶取得聯(lián)系。在使用的過程中,系統(tǒng)會以語音的形式引導使用者更好的操作該軟件系統(tǒng)。本設計還支持手機移動端的操作,以短信的形式,通過GSM模塊發(fā)送特定的內(nèi)容到該軟件系統(tǒng),該系統(tǒng)就可以向下位機發(fā)送相應的數(shù)據(jù)進行存取車操作。
1 軟件總體框架
本軟件實現(xiàn)的功能主要是創(chuàng)建多個操作界面,并根據(jù)不同功能完成各個界面之間的跳轉(zhuǎn);在對界面進行操作時,通過配置串口、GPRS/GSM完成和下位機、手機APP的通信;搭建數(shù)據(jù)庫,對管理員、用戶和車位的信息進行存儲,在數(shù)據(jù)的錄入中,可以隨時調(diào)用軟鍵盤進行輸入[1];軟件在運行時還可支持中文的顯示,并在操作車庫的同時進行語音提示,使車庫的使用更加便捷。本軟件的總體框架圖如圖1所示。
2 軟件整體工作流程
軟件在啟動時,應先對數(shù)據(jù)庫、車位信息、串口等進行初始化。運行的過程中,始終對下位機串口、手機APP串口和軟件自身界面進行監(jiān)控。當有數(shù)據(jù)傳入,即刻將收到的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)進行對比驗證,驗證成功方可進入系統(tǒng)。進入系統(tǒng)后,若操作車位,則向下位機發(fā)送數(shù)據(jù);若聯(lián)系用戶,則向手機APP發(fā)送數(shù)據(jù);若操作數(shù)據(jù)庫,則在對比驗證成功后對數(shù)據(jù)庫進行更新。具體流程圖如圖2所示。
3 軟件功能實現(xiàn)分析
3.1 界面切換
本文中采用了大量的信號(signals)和槽(slots),它們是Qt中的典型機制[2]。在本文中的具體使用方法如下:
Connect(發(fā)送者sender,信號函數(shù)SIGNAL,接受者reciever,槽函數(shù)SLOT)信號與槽主要對按下(QPushButton)事件進行捕捉,實現(xiàn)界面與界面之間的調(diào)轉(zhuǎn)切換,完成該按鍵按下時相應的數(shù)據(jù)操作。圖3為軟件界面的調(diào)用框圖。
3.2 串口通信
串口通信是本文實現(xiàn)的重點,它是連接下位機和手機APP的通信橋梁。在Qt語言中,提供了第三方類Posix_QextSerialPort對串口進行操作[3],Posix_QextSerialPort類打開串口及對串口進行初始化的主要代碼如下所示:
uartCom = new Posix_QextSerialPort("/dev/ttySAC0", QextSerialBase::Polling);
uartCom->open(QIODevice::ReadWrite);
uartCom->setBaudRate(BAUD115200);
uartCom->setDataBits(DATA_8);
uartCom->setParity(PAR_NONE);
uartCom->setStopBits(STOP_1);
其中,uartCom為Posix_QextSerialPort的類對象,通過構(gòu)造函數(shù)操作Linux系統(tǒng)/dev/路徑下串口0的驅(qū)動程序ttySAC0。在Linux系統(tǒng)中,Posix_QextSerialPort對串口的操作只能采取輪詢方式Polling,即定義一個定時器,每隔一段時間對串口進行掃描,查看是否有數(shù)據(jù)的操作。在以讀寫方式打開串口后,定義串口的通信方式。本文使用的串口0和串口1的通信方式均約定為:波特率115200,8個數(shù)據(jù)位,無奇偶校驗,1個停止位。利用Posix_QextSerialPort類提供的write(const char *)函數(shù)和readAll()函數(shù)完成對串口數(shù)據(jù)的寫入與讀取。
3.3 GPRS/GSM短信接收
上位機與手機APP的通信主要通過串口控制GPRS/GSM模塊完成[4]。GPRS/GSM模塊內(nèi)置了TCP/IP協(xié)議,只需往該模塊中寫入AT指令即可實現(xiàn)收發(fā)短信和撥打電話的功能。表1為本文中用到的基本AT指令。
在通過串口往GPRS/GSM模塊寫入AT指令時,需要在寫入的字符串后面加上“\r”,Linux系統(tǒng)中“\r”為回車標志。收到手機APP端發(fā)送的短信后,要提取發(fā)送者的號碼以及發(fā)送的信息內(nèi)容與數(shù)據(jù)庫中的內(nèi)容進行比對,才能正確的將相應的命令發(fā)送到下位機。經(jīng)過多次測試,接收到短信時串口會收到并讀取帶有“+CMTI”字符串的數(shù)據(jù),每次讀取到的短信數(shù)據(jù)中,發(fā)送者的手機號碼在“+86”(移動卡)或“"86”(聯(lián)通卡)字符串后面,收到的短信內(nèi)容位于“+32"”后面。根據(jù)這些數(shù)據(jù),就可以將字符串中的號碼和內(nèi)容截取出來。
3.4 數(shù)據(jù)庫搭建
Qt中支持多種數(shù)據(jù)庫語言,本文選用最基礎的sql語言搭建存儲管理員、用戶和車位具體信息的數(shù)據(jù)庫[5]。本文調(diào)用QSqlDatabase的addDatabase函數(shù)創(chuàng)建了名為database.db的sql數(shù)據(jù)庫,并通過QSqlQuery對象的exec()在數(shù)據(jù)庫中創(chuàng)建了兩個表格(userinfo和managerinfo)分別存放用戶信息、管理員信息和車位信息,其中用戶信息和車位信息如表2所示。
在上位機軟件的編寫過程中,會多次對數(shù)據(jù)庫進行操作,比如密碼驗證、密碼修改、添加刪除用戶、車位選擇界面的顯示等。
3.5 數(shù)據(jù)共享
在程序的編寫過程中,經(jīng)常出現(xiàn)多個類調(diào)用同一個對象的情況,為此,本文使用定義全局變量的方法來實現(xiàn)數(shù)據(jù)的共享,其中定義的全局變量如表3所示。
其中,user為停車位選擇界面類的對象,在用戶操作界面和管理員操作界面都要調(diào)用該對象,將其定義為全局變量,方便引用;gprsCom為操作GPRS/GSM模塊的串口類對象,在歡迎界面、聯(lián)系用戶界面都使用同一串口,故定義為全局變量;uartCom為與下位機通信串口的類對象,在歡迎界面、管理員操作界面、用戶操作界面都會使用該串口發(fā)數(shù)據(jù),定義為全局變量;closeParkingFlag為bool型變量,當其值為true時,任何界面都可以調(diào)用它來關閉本界面。
3.6 語音提示
為了使人機交互界面更加人性化,本文加入了語音提示功能。在Linux系統(tǒng)中,madplay是一款通過命令行控制的音樂播放軟件,只需將madplay移植入Linux系統(tǒng)中即可。完成madplay的移植后,需要單獨創(chuàng)建一個線程來播放語音,否則會導致系統(tǒng)界面運行崩潰。在程序中用system()寫入命令就可以實現(xiàn)語音播放功能。如下所示:
system("madplay /music/addok.mp3");
3.7 中文顯示
QT/E-4.7.1支持中文顯示[6],格式為wenquanyi,在main函數(shù)中定義QFont的對象,使用該對象的setFamily()函數(shù)設置此格式,具體代碼為:
QFont font;
font.setFamily(("wenquanyi"));
a.setFont(font);
4 系統(tǒng)測試
把編譯好的可執(zhí)行文件移植到嵌入式系統(tǒng)中[7],上電開機。設計的軟件系統(tǒng)界面運行流暢,語音提示清晰,支持中文顯示。進入管理員或用戶操作界面,輸入密碼進行驗證,密碼錯誤報警提示,密碼一致則正確跳轉(zhuǎn);對車庫用戶進行管里,在信息表中可以看到數(shù)據(jù)庫運行正常。用USB轉(zhuǎn)串口線與電腦連接模擬與下位機的通信,存取車時均發(fā)送了正確數(shù)據(jù);進入聯(lián)系用戶界面,成功給數(shù)據(jù)庫中的用戶撥打電話和發(fā)送短信,用手機給軟件系統(tǒng)發(fā)送數(shù)據(jù),成功接收并向下位機(電腦)發(fā)送了相應數(shù)據(jù)。經(jīng)過多次測試,整個軟件系統(tǒng)運行穩(wěn)定,效率高,使用方便。
5 結(jié)束語
本文采用Qt實現(xiàn)了友好的智能立體車庫人機交互界面,可方便地移植到Linux嵌入式系統(tǒng)中使用;引入數(shù)據(jù)庫存儲車庫的數(shù)據(jù)信息,符合現(xiàn)代社會的大數(shù)據(jù)發(fā)展趨勢;通過觸摸屏完成存取車的操作,操作過程中伴有語音提示,更加貼近人們的日常生活。
參考文獻
[1] 謝芬,潘麗,劉守印.基才QT/E的嵌入式Linux系統(tǒng)的軟鍵盤實現(xiàn) [J].電子設計工程,2012,20(5):177-179.
[2] 丁林松,黃麗琴.Qt4圖形設計與嵌入式開發(fā)[M].北京:人民郵電出版社,2009:78-489.
[3] 陳靜.基于Ubuntu13.04系統(tǒng)下QT串口通信設計 [J].電子世界,2014(18):244-244.
[4] 白潔.基于ARM的嵌入式GPRS通訊系統(tǒng)的設計與實現(xiàn) [J].高校實驗室工作研究,2013(44):44-46
[5] 梁隆愷,韓改寧,王曉妮.嵌入式Qt下的數(shù)據(jù)庫程序設計與開發(fā)[J].辦公自動化,綜合版,2014(11):58-61.
[6] 周繼芹,薛天宇.基于嵌入式Linux和Qtopia平臺中文環(huán)境的實現(xiàn) [J]網(wǎng)絡新媒體技術,2008, 29(2):80-83.
[7] 陳敬,向偉.基于嵌入式Linux的QT/Embedded移植與應用開發(fā) [J].電腦與信息技術,2013, 21(1):57-59.