基于嵌入式和RFID技術(shù)的電子門(mén)票系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘 要: 介紹了通過(guò)在ARM+μClinux+Web+SQLite平臺(tái)下擴(kuò)展CAN總線,并以RFID讀卡器作為控制節(jié)點(diǎn)而實(shí)現(xiàn)的電子門(mén)票系統(tǒng)。一方面可以方便持卡者查詢(xún)門(mén)票使用情況、場(chǎng)所路線以及館內(nèi)人流量,幫助其更好地選擇相關(guān)路線;另一方面有助于舉辦方實(shí)時(shí)了解各片區(qū)的人流情況及追蹤目標(biāo),以便做出調(diào)度和提高安防工作效率。
關(guān)鍵詞: RFID;CAN總線;ARM;Web Server;SQLite
由于RFID電子門(mén)票具有防偽性能好、可靠性高、適應(yīng)性強(qiáng)、成本低等特點(diǎn),已被普遍應(yīng)用于各種大型公共活動(dòng)中。本文提出一種經(jīng)濟(jì)型、基于嵌入式技術(shù)的RFID電子門(mén)票系統(tǒng)。
1 RFID的原理
射頻識(shí)別(RFID)利用射頻信號(hào)的空間耦合或反射的傳輸特性,對(duì)被識(shí)別物體自動(dòng)識(shí)別,是一種非接觸式自動(dòng)識(shí)別技術(shù)。RFID主要由電子標(biāo)簽(Tag)和閱讀器(Reader)兩部分組成。電子標(biāo)簽由耦合元件和芯片組成,其工作能量來(lái)源于閱讀器發(fā)出的射頻脈沖,通過(guò)無(wú)線電波與讀寫(xiě)設(shè)備進(jìn)行數(shù)據(jù)交換。閱讀器主要由無(wú)線收發(fā)模塊、天線、控制模塊和接口電路組成,其主要任務(wù)是控制射頻模塊向電子標(biāo)簽發(fā)射讀取信號(hào),并接收電子標(biāo)簽的應(yīng)答,對(duì)電子標(biāo)簽的標(biāo)識(shí)信息進(jìn)行解碼,將標(biāo)識(shí)信息及其他相關(guān)信息傳輸?shù)街鳈C(jī)以便處理。該系統(tǒng)選用低頻(125 kHz)RFID系統(tǒng),性能不受環(huán)境影響,價(jià)格低廉,因此適合大規(guī)模生產(chǎn)使用。
2 CAN總線技術(shù)[1]
CAN是由ISO定義的串行通信總線,具有高位速率、高抗電磁干擾性、高可靠性等特點(diǎn),而且能夠檢測(cè)到產(chǎn)生的任何錯(cuò)誤。CAN在微控制器之間互相通信或微控制器與遠(yuǎn)程的外圍器件互相通信的情況下是一個(gè)理想的解決方法。CAN相比于RS485采用了新技術(shù)及獨(dú)特的設(shè)計(jì),具有多主節(jié)點(diǎn)的網(wǎng)絡(luò)特性,總線利用率高,數(shù)據(jù)傳輸速度快,可擴(kuò)充性好,通信距離長(zhǎng),具有可靠的錯(cuò)誤處理和檢錯(cuò)機(jī)制,個(gè)別節(jié)點(diǎn)失效并不影響整個(gè)通信網(wǎng)絡(luò)的運(yùn)行,實(shí)時(shí)性好。因此在自動(dòng)化各個(gè)行業(yè),CAN取代RS485將是一種不可逆轉(zhuǎn)的趨勢(shì)。
3 ARM+μClinux平臺(tái)下實(shí)現(xiàn)動(dòng)態(tài)Web[2]
在μClinux環(huán)境下,httpd、thttpd和Boa是三個(gè)主要的Web服務(wù)器。這里選擇非常適合嵌入式系統(tǒng)的Boa Web服務(wù)器,它支持認(rèn)證、CGI等。Boa是一個(gè)單任務(wù)的http服務(wù)器,μClinux代碼已經(jīng)自帶了Boa的源碼,配置和修改源碼后,在配置內(nèi)核時(shí)把Boa選進(jìn)內(nèi)核實(shí)現(xiàn)入網(wǎng),通過(guò)瀏覽器就可以訪問(wèn)嵌入式網(wǎng)頁(yè)。
迄今,實(shí)現(xiàn)動(dòng)態(tài)Web頁(yè)面有CGI、ASP、PHP和JSP四種技術(shù)可供選擇,由于目前μClinux還不支持ASP、PHP等動(dòng)態(tài)Web頁(yè)面技術(shù),因此本設(shè)計(jì)選擇CGI。CGI提供Web服務(wù)器一個(gè)執(zhí)行外部程序的通道,這種服務(wù)端技術(shù)使得瀏覽器和服務(wù)器之間具有交互性。CGI程序接收Web瀏覽器發(fā)送給Web服務(wù)器的信息,進(jìn)行處理后執(zhí)行相應(yīng)的任務(wù)。本系統(tǒng)選擇與平臺(tái)無(wú)關(guān)的C語(yǔ)言編寫(xiě)CGI程序。
4 嵌入式數(shù)據(jù)庫(kù)SQLite及其在μClinux上的移植[3]
4.1 嵌入式數(shù)據(jù)庫(kù)SQLite簡(jiǎn)介
嵌入式數(shù)據(jù)庫(kù)SQLite較其他大型數(shù)據(jù)庫(kù)的特點(diǎn)是程序直接調(diào)用相應(yīng)的API實(shí)現(xiàn)對(duì)數(shù)據(jù)的存取操作,無(wú)需獨(dú)立運(yùn)行的數(shù)據(jù)庫(kù)引擎。SQLite不具有外部依賴(lài)性,完全獨(dú)立,并且提供了對(duì)SQL92標(biāo)準(zhǔn)的大多數(shù)支持:支持多表和索引、事務(wù)、視圖、觸發(fā)和一系列的用戶(hù)接口及驅(qū)動(dòng)。在嵌入式系統(tǒng)中移植SQLite數(shù)據(jù)庫(kù)成為一種很好的解決方案。
4.2 SQLite開(kāi)發(fā)技術(shù)
SQLite本身提供了C語(yǔ)言的API接口,使得對(duì)數(shù)據(jù)庫(kù)的操作十分簡(jiǎn)單,主要是對(duì)3個(gè)API函數(shù)的調(diào)用。
(1)打開(kāi)數(shù)據(jù)庫(kù)
int sqlite3_open(const char*filename,sqlite3**ppDb);
sqlite3_open()用于打開(kāi)指定的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)文件名稱(chēng)由filename參數(shù)指定,并通過(guò)ppDb參數(shù)返回合法的數(shù)據(jù)庫(kù)句柄。
(2)執(zhí)行數(shù)據(jù)庫(kù)
int sqlite3_exec(sqlite3*,const char *sql,sqlite_callback, void*,char**errmsg);
第一個(gè)參數(shù)sqlite3*是前面open函數(shù)得到的指針。第二個(gè)參數(shù)const char*sql是一條SQL語(yǔ)句或多條SQL語(yǔ)句,語(yǔ)句間必須用“;”號(hào)隔開(kāi),以