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