楊永明,徐海霞
(1.西安建筑科技大學(xué) 理學(xué)院,陜西 西安 710055;2.寧夏醫(yī)科大學(xué) 圖書館,寧夏 銀川 750004)
高效、方便、人性化的檢索方式是數(shù)字圖書館為用戶提供優(yōu)質(zhì)信息服務(wù)的必要保障。在數(shù)字圖書館的基礎(chǔ)上,近年來出現(xiàn)了一種新型的智慧圖書館,即在智能技術(shù)基礎(chǔ)上,以各種新技術(shù)、新服務(wù)理念以及新管理模式為輔助,所建立的不受時(shí)間和空間限制的新型圖書館模式。智慧圖書館將利用物聯(lián)網(wǎng)技術(shù)達(dá)到智慧化服務(wù)和管理的目的,當(dāng)然在這個(gè)萬物互聯(lián)的時(shí)代,還需要通過云計(jì)算和智慧化的一些設(shè)備來改造現(xiàn)有的傳統(tǒng)圖書館。其中當(dāng)屬RFID技術(shù)應(yīng)用最為廣泛,它改變了傳統(tǒng)圖書館的運(yùn)營服務(wù)模式,大大提高了圖書館管理人員的工作效率,極大地減少了工作量。圖書館的館藏量日益增大,如若按照以往傳統(tǒng)圖書館的管理方式,只有更加智能的信息系統(tǒng)才能在減輕管理人員負(fù)擔(dān)的同時(shí),為讀者提供更加綜合的信息服務(wù)。
RFID定位技術(shù)的基本原理是:通過一組固定式讀寫器讀取目標(biāo)RFID標(biāo)簽的特征信息(如身份ID、接收信號強(qiáng)度等),同樣可以采用近鄰法、多邊定位法、接收信號強(qiáng)度等方法確定RFID電子標(biāo)簽所在位置。RFID室內(nèi)定位系統(tǒng)的基本結(jié)構(gòu)通常由RFID電子標(biāo)簽、讀寫器、中間件及計(jì)算機(jī)數(shù)據(jù)庫組成。該系統(tǒng)通過參考標(biāo)簽和待定標(biāo)簽的信號強(qiáng)度RSSI的分析計(jì)算,利用“最近鄰居”算法和經(jīng)驗(yàn)公式得出定位標(biāo)簽的坐標(biāo)。
RFID定位技術(shù)的優(yōu)點(diǎn):RFID電子標(biāo)簽的成本較低,可以大規(guī)模部署;RFID提供有源和無源兩種方案,無源方案沒有供電的問題,有源方案可以用紐扣電池持續(xù)數(shù)年地待機(jī),極大地降低功耗;RFID基站設(shè)備相對豐富,大功率設(shè)備和小功率的讀寫器產(chǎn)品比較多,項(xiàng)目實(shí)施更方便,也更便于維護(hù),適合各種場合的組網(wǎng)。
隨著圖書館藏書量和建筑面積的逐漸增大,傳統(tǒng)的圖書館管理方式已經(jīng)不再適用。鑒于此,本文主要研究如何在用Java語言編寫的圖書管理系統(tǒng)中加入RFID進(jìn)行讀者的身份識別?;赗FID技術(shù)實(shí)現(xiàn)系統(tǒng)的登錄,即不刷卡或者沒有卡的無關(guān)人員并沒有該系統(tǒng)的使用權(quán)限。如果沒有RFID技術(shù)的應(yīng)用,無關(guān)人員只須注冊就能實(shí)現(xiàn)該系統(tǒng)的登錄,這顯然是不規(guī)范的。該技術(shù)的應(yīng)用,使得新用戶在注冊的同時(shí),需要獲得圖書館辦理的身份卡才能成為真正的用戶,這大大提高了圖書館的管理效率。
Arduino UNO是一款基于ATMEGA328P微控制器設(shè)計(jì)的Arduino開發(fā)板,它有14個(gè)數(shù)字輸入/輸出引腳、6個(gè)模擬輸入引腳、16 MHz石英晶振、USB接口、電源接口,支持在線串行編程以及復(fù)位按鍵。Arduino UNO開發(fā)板是Arduino系列中最經(jīng)典的開發(fā)板,而且它的編譯較為簡單,適合新手入門使用,只需要將開發(fā)板與電腦通過USB接口連接就可以通過開發(fā)軟件Arduino IDE進(jìn)行編譯開發(fā)。
RFID-RC522模塊是采用MF RC522原裝芯片設(shè)計(jì)讀卡電路,使用方便,成本低廉,適用于設(shè)備開發(fā)、讀卡器開發(fā)等高級應(yīng)用以及進(jìn)行射頻卡終端設(shè)計(jì)/生產(chǎn)。該模塊可直接裝入各種讀卡器模具。模塊采用電壓為3.3 V,通過SPI接口簡單的幾條線就可以直接與用戶的任何CPU主板相連接進(jìn)行通信,可以保證模塊穩(wěn)定可靠地工作,并且讀卡距離遠(yuǎn)。模塊中的SDA引腳是用于選擇設(shè)備的引腳,SCK引腳用來接收時(shí)鐘信號,MOSI引腳是模塊的串口外圍接口,MISO引腳是串口數(shù)據(jù)輸出口,IRQ引腳是中段警告引腳,GND為接地引腳,RST引腳是復(fù)位和斷點(diǎn)輸入引腳,3.3 V是模塊的VCC引腳,該模塊只能在3.3 V的電壓下工作。
Eclipse是一種可擴(kuò)展的開放源代碼集成開發(fā)環(huán)境(IDE),是一款非常受歡迎的Java開發(fā)工具。該系統(tǒng)之所以選擇以Eclipse為開發(fā)環(huán)境,是因?yàn)樵搼?yīng)用完美適配Java Swing圖形管理界面,具有豐富的GUI插件,使得編程更加方便。在設(shè)計(jì)過程中能夠簡化操作。
MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就提高了速度并增加了靈活性。MySQL使用更加容易,復(fù)雜程度較低。最重要的是,在Java連接數(shù)據(jù)庫的過程中適配性更高。
完整的RFID系統(tǒng)由數(shù)據(jù)管理系統(tǒng)、閱讀器、電子標(biāo)簽三部分組成。數(shù)據(jù)管理系統(tǒng)通過網(wǎng)絡(luò)向閱讀器發(fā)出指令,閱讀器接收指令后通過天線發(fā)送射頻信息,射頻能量形成電磁場,其內(nèi)的電子標(biāo)簽被觸發(fā)并向閱讀器發(fā)送或修改存儲在內(nèi)的數(shù)據(jù),閱讀器通過解調(diào)和解碼后反饋信息給數(shù)據(jù)管理系統(tǒng)。在工作狀態(tài)下,讀寫器經(jīng)由射頻天線向標(biāo)簽發(fā)射一定頻率的信號,并接收返回信號,經(jīng)過簡單處理后把這些信號發(fā)送到后臺網(wǎng)絡(luò)。電子標(biāo)簽也叫射頻標(biāo)簽、感應(yīng)標(biāo)簽,主要用于存儲數(shù)據(jù),由天線和芯片組成,其中芯片又由控制器和存儲器構(gòu)成。電子標(biāo)簽是RFID系統(tǒng)中的關(guān)鍵組件,每個(gè)標(biāo)簽都擁有獨(dú)一無二的電子編碼。
本設(shè)計(jì)是基于RFID設(shè)計(jì)的自主借閱系統(tǒng),在該實(shí)驗(yàn)中最重要的是如何在一個(gè)普通的圖書管理系統(tǒng)中加入RFID技術(shù)。MF RC522是一款非接觸式讀寫卡芯片,能夠?qū)崿F(xiàn)本系統(tǒng)所需要的RFID功能。但是該芯片并不能直接將讀取到的信號發(fā)送至計(jì)算機(jī)串口,所以本系統(tǒng)還需要使用到Arduino開發(fā)板。本文選用的是Arduino UNO開發(fā)板。通過RC522芯片讀取卡片ID,將讀取到的信號傳輸給Arduino UNO,再經(jīng)由UNO打印至計(jì)算機(jī)串口,實(shí)現(xiàn)身份識別的功能。RC522與UNO的接線方式如圖1所示。
圖1 硬件連線方式
硬件連接好后,將UNO通過USB線連接至電腦,打開Arduino軟件,下載MF RC522外部庫。通過外部庫的實(shí)例,編寫需要燒錄至開發(fā)板的程序。
首先添加頭文件,并對RST_PIN和SS_PIN定義引腳。運(yùn)用void setup()函數(shù)進(jìn)行初始化設(shè)置,設(shè)置串口的波特率為9 600 b/s,此設(shè)置其實(shí)不是固定的,只要與之后的Java串口通信中寫入的參數(shù)一致即可,否則系統(tǒng)會發(fā)生無法讀取的現(xiàn)象。使用loop()函數(shù),檢查MF RC522是否讀取到卡片的信息。然后將讀取到的卡片信息用Serial.print方法打印至串口。最后將編譯好的程序燒錄至UNO開發(fā)板,端口選擇為UNO所使用的端口。
Java具有串口通信的功能,可以讀取到串口的數(shù)據(jù),再將串口的數(shù)據(jù)與創(chuàng)立的數(shù)據(jù)庫進(jìn)行對比,這樣就能起到身份識別的作用。打開Arduino自帶的串口監(jiān)視器,完成刷卡操作,觀察串口監(jiān)視是否有數(shù)據(jù)傳輸,如果有,說明硬件部分RFID功能設(shè)計(jì)成功。
為了在自助借閱系統(tǒng)中加入RFID功能,首先需要打開電腦的串口,這樣才能通過串口收發(fā)數(shù)據(jù)。因此,創(chuàng)建一個(gè)OpenerAndCloser類,以查看計(jì)算機(jī)可用的串口。波特率設(shè)置為9 600 b/s,數(shù)據(jù)位設(shè)置為8,停止位為1。RxTx第三方類庫提供了豐富的對串口進(jìn)行操作的方法,在編寫Java串口通信部分的代碼時(shí),最常用的便是其中的CommPortIdentifier類。CommPortIdentifier類能夠管理和設(shè)置電腦可用的串口,是RxTx中的一個(gè)核心類。因?yàn)樾枰谐霰镜仉娔X可用的所有串口,所以用到這個(gè)類。其次,為了使該系統(tǒng)能成功接收到串口的數(shù)據(jù),需要對串口的參數(shù)進(jìn)行設(shè)置,即波特率為9 600 b/s,數(shù)據(jù)位為8,停止位為1。在RxTx第三方類庫中,提供了一個(gè)方法,為setSerialPortParams,能夠?qū)Υ趨?shù)進(jìn)行設(shè)置。此參數(shù)設(shè)置并不是固定的,只要在之后的模擬軟件中,與該系統(tǒng)寫入的參數(shù)一致即可,否則會發(fā)生無法讀取的現(xiàn)象。最后,為了避免本地串口被其他設(shè)備占用而導(dǎo)致該系統(tǒng)出現(xiàn)異常、發(fā)生崩潰的情況出現(xiàn),需要在編寫程序代碼的時(shí)候拋出該異常。在RxTx第三方類庫中,將此種異常定義為PortInUseException,使用try-catch語句進(jìn)行異常捕獲,并將該異常拋出。
為了能夠成功接收到串口發(fā)出的數(shù)據(jù),并將其與現(xiàn)有數(shù)據(jù)庫中的用戶和管理員數(shù)據(jù)進(jìn)行比對,需要再創(chuàng)建一個(gè)Com4EventListener類方法,用于監(jiān)聽串口的數(shù)據(jù)流輸入,以便在之后登錄操作時(shí)調(diào)用。在獲取串口數(shù)據(jù)之前,需要先打開使用的串口,并拋出串口被其他設(shè)備占用的異常。為了獲取串口的輸入流,需要用到Java自帶的IO包。在Java串口通信中,主要用到了IO包中的InputStream類,對串口的輸入流進(jìn)行操作。首先,定義一個(gè)變量為從串口獲取到的輸入流,并對該輸入流進(jìn)行讀取。此時(shí),就需要用到InputStream類中的read方法,讀取串口的輸入流。為了避免程序使用過程中,發(fā)生IO錯誤,導(dǎo)致系統(tǒng)異常,需要在編寫代碼的過程中拋出該異常,避免程序出現(xiàn)錯誤;同時(shí)對打開的端口添加事件監(jiān)聽來監(jiān)聽端口發(fā)生的變化,這樣才能獲取串口的輸入流。在RxTx第三方類庫中,提供了一個(gè)名為SerialPort的類,其中的addEventListener方法能夠?qū)Υ谔砑邮录O(jiān)聽。因?yàn)樘砑邮录O(jiān)聽的目的是為了獲取串口的輸入流,所以監(jiān)聽事件類型應(yīng)為是否有數(shù)據(jù)達(dá)到,這樣才能讀取串口的數(shù)據(jù)。在SerialPort類中,使用notifyOnDataAvailable方法,將監(jiān)聽的事件類型定義為是否有數(shù)據(jù)到達(dá)串口。最后,將后端接收到的輸入流與數(shù)據(jù)庫中的用戶ID進(jìn)行對比,并在控制臺輸出該用戶的用戶名,以方便之后對系統(tǒng)進(jìn)行測試時(shí)找出系統(tǒng)的邏輯錯誤。
將設(shè)計(jì)好的硬件設(shè)備通過USB接口連接至電腦。打開Eclipse,運(yùn)行編寫的圖書管理系統(tǒng),點(diǎn)擊“請刷卡”按鈕,之后完成刷卡操作,如圖2所示??梢钥闯?,原本不可編輯的用戶名文本框出現(xiàn)用戶名“cgd”的原因是:完成刷卡操作之后,UNO將RC522識別的卡片ID發(fā)送至端口,程序后端在數(shù)據(jù)庫中查找ID為64482076的數(shù)據(jù),并將其用戶名返回給文本框,用戶名文本框則自動出現(xiàn)了該用戶對應(yīng)的用戶名。
圖2 圖書管理系統(tǒng)登錄界面
圖3所示的Eclipse控制臺視圖清晰地展示了上述過程。點(diǎn)擊“請刷卡”按鈕后,系統(tǒng)接收到串口發(fā)送的數(shù)據(jù),在已經(jīng)創(chuàng)建的t_user數(shù)據(jù)表中找到ID=64482076的數(shù)據(jù),并將用戶名返回,成功模擬了刷卡登錄這一功能。
圖3 Eclipse控制臺視圖
由于硬件和軟件的結(jié)合,離不開串口通信,軟件需要讀取并識別硬件發(fā)送的數(shù)據(jù)。本文選擇了目前最為流行的Java語言,因?yàn)樗哂心軌蛲瓿纱谕ㄐ诺奶攸c(diǎn);同時(shí)采用的Eclipse是一個(gè)開源的軟件,有很多簡化設(shè)計(jì)過程的插件可用。本文的創(chuàng)新點(diǎn)在于在普通圖書管理系統(tǒng)的基礎(chǔ)上加入RFID技術(shù),達(dá)到刷卡登錄的目的,即不通過鍵盤鍵入用戶和管理員的用戶名。RFID射頻識別系統(tǒng)由閱讀器和電子標(biāo)簽組成。對比于條形碼,它的適用范圍更廣。隨著時(shí)代的發(fā)展以及科技的進(jìn)步,圖書館不再需要人力看守管理,讀者也不需要自己前往圖書館就能進(jìn)行借還書。RFID將助力于無人值守自助借閱圖書館的實(shí)現(xiàn)。