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