nfc rfid - epaper.gotop.com.twepaper.gotop.com.tw/pdf/a408.pdf · 第二章. nfc 與rfid....

12
第二章 NFC RFID 在今時今日,RFIDRadio Frequency Identification無線射頻辨識已經變成日常生活 中毫不稀奇的事物了,從輕輕碰一下就能小額付費的卡片,交通儲值卡(例如捷運悠遊 卡),付費道路使用的 E-ZPass 裝置,一直到可管理庫存與威懾竊賊、固定在貨物商品 上的標籤,一般民眾在一週內通常至少都會碰到 RFID 好幾次,但卻從未想過這項技術 的能力和可以拿來做些什麼。 過去幾年來,有個與 RFID 相關聯的新詞彙逐漸浮上台面,那就是 NFCNear Field Communication近距離無線通訊,如果你問問身旁稍懂技術的朋友這是什麼東西, 大概會聽到「喔,類似於 RFID,但不一樣」,呃,太棒了,可以告訴我哪裡不同嗎? RFID NFC 常被混為一談,但兩者並非同一件事情;雖然 NFC 讀取器可以讀取和 寫入某些 RFID 標籤(tag),但比起 RFIDNFC 擁有更大的能力,連帶地其用途也更 廣。你可以把 NFC 想像成 RFID 延伸擴充後的產物,以眾多 RFID 標準中的幾個為基 礎,建立出一套更普遍適用的資料交換平台。 本書的目標是從實務方向引領你進入 NFC 的世界並瞭解它的能力,跟著每一章的範 例,你將會為具備 NFC 功能的 Android 裝置與 Arduino 微控制器,打造幾支 NFC 應用 軟體,還會學習 RFID NFC 這兩套技術有哪部分重疊,以及 NFC 可以做些什麼。 RFID 是什麼? 請想像一下現在是夜晚,你正坐在陽台,開啟陽台的燈光後,當鄰居步行經過靠近你 家時,你就可以看得見他,因為光線會從他身上反射到你的眼睛,而這便是「被動式 RFID」的運作模式,從被動式 RFID 讀取器發射出去的射頻訊號抵達標籤(tag),而標 籤吸收能量並「反射」回它的辨識資訊。 11

Upload: truongdien

Post on 06-Feb-2018

252 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

第二章

NFC與 RFID

在今時今日,RFID(Radio Frequency Identification,無線射頻辨識)已經變成日常生活

中毫不稀奇的事物了,從輕輕碰一下就能小額付費的卡片,交通儲值卡(例如捷運悠遊

卡),付費道路使用的 E-ZPass裝置,一直到可管理庫存與威懾竊賊、固定在貨物商品上的標籤,一般民眾在一週內通常至少都會碰到 RFID好幾次,但卻從未想過這項技術的能力和可以拿來做些什麼。

過去幾年來,有個與 RFID 相關聯的新詞彙逐漸浮上台面,那就是 NFC(Near Field

Communication,近距離無線通訊),如果你問問身旁稍懂技術的朋友這是什麼東西,

大概會聽到「喔,類似於 RFID,但不一樣」,呃,太棒了,可以告訴我哪裡不同嗎?RFID與 NFC常被混為一談,但兩者並非同一件事情;雖然 NFC 讀取器可以讀取和寫入某些 RFID標籤(tag),但比起 RFID,NFC擁有更大的能力,連帶地其用途也更廣。你可以把 NFC想像成 RFID延伸擴充後的產物,以眾多 RFID標準中的幾個為基礎,建立出一套更普遍適用的資料交換平台。

本書的目標是從實務方向引領你進入 NFC的世界並瞭解它的能力,跟著每一章的範例,你將會為具備 NFC功能的 Android裝置與 Arduino微控制器,打造幾支 NFC應用軟體,還會學習 RFID與 NFC這兩套技術有哪部分重疊,以及 NFC可以做些什麼。

RFID是什麼?請想像一下現在是夜晚,你正坐在陽台,開啟陽台的燈光後,當鄰居步行經過靠近你

家時,你就可以看得見他,因為光線會從他身上反射到你的眼睛,而這便是「被動式

RFID」的運作模式,從被動式 RFID讀取器發射出去的射頻訊號抵達標籤(tag),而標籤吸收能量並「反射」回它的辨識資訊。

11

Page 2: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

12 | 第二章

現在,請再想像一下若你開啟陽台燈光,而在家裡的鄰居看見燈光發出的光線後,也打

開他的陽台燈,這麼一來,你就能看到鄰居從他的陽台向你打招呼,而這便是「主動式

RFID」的運作模式,它的訊號傳送距離較長,因為接收方也擁有自己的電力來源,

所以可以自己產生射頻訊號,不必仰賴從發射方吸收而來的能量。

RFID非常類似於上述的兩個陽台,你跟鄰居彼此能夠看到對方的臉,但藉由此種方式並不能得知對方更多的消息,並沒有互相交換任何有意義的資訊,RFID也不是項通訊技術,相反的,RFID設計之初的宗旨是為了「辨識」之用,RFID標籤可含有少量的資料,而你可透過 RFID讀取器裝置來讀寫標籤裡那少量的資料,不過請記得,這裡所說的資料量相當少,大概就是一千個位元組左右而已,甚至可能更少。

NFC是什麼?現在請想像一下有另外一位鄰居走路經過你家,當你看見她時便邀請她走進陽台聊聊

天,她接受你的邀請跟你坐在一起,互相開玩笑並交換生活趣事,進一步發展關係,你

跟她彼此互相說話和聆聽,其過程可能長達數分鐘,而這就是 NFC的運作模式。

NFC的設計以 RFID為基礎加以延伸,讓交流雙方可進行更複雜的資料交換行為。你仍可以使用 NFC讀取器來讀取 RFID標籤、寫入 RFID標籤裡那有限的記憶體,透過NFC,就能以一套標準格式寫入資料到某些類型的 RFID標籤,不論該標籤的類型為何;也可以與其他台 NFC裝置進行雙向(或稱雙工)的資料交換傳輸,NFC裝置能夠互相交換資料得知彼此的功能、置換記錄、還可以透過別的管道,啟動長時間的傳輸 連線。

譬如說把一台具備 NFC功能的手機貼近 NFC立體音響設備,它們就可以互相辨識對方、得知兩者都擁有WiFi能力,交換認證資料後透過WiFi進行傳輸,接著手機端就可以經由 WiFi串流音訊到音響設備,播放音樂。那麼,為什麼手機不直接經由 NFC連線串流音訊資料呢?理由有兩個,第一:NFC連線只該用來進行短距離的傳輸,一般來說小於 10公分(或更近);第二:比起 WiFi、藍牙以及其他無線通訊技術來說,NFC的傳輸速度非常慢,NFC的設計並不適合用來進行長時間的高速傳輸,而該用來交換簡短信息、認證資料(帳號、密碼)、辨識兩端的關係。請回頭想想剛剛的陽台例子,你應

該使用 NFC資料交換來營造第一印象,若想要進一步深談,則應該邀請鄰居到你家裡喝杯茶,而那該交由WiFi、藍牙或其他無線通訊技術負責。

12

Page 3: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

16 | 第二章

是相對等的 NDEF訊息的話,裡頭可能含有一個簡單文字記錄描述將舉辦宴會、一個聰明型佈告記錄含有宴會的地址、以及一個 URI記錄指出可到網站上獲取進一步的詳情。

NFC架構若想進一步瞭解 NFC,最好能在腦袋裡建立起描述 NFC架構的心智模型,其中有好幾層需要仔細考量,最底端的是實體層,也就是負責 CPU與射頻控制電路之間的溝通,中間部分包含了資料封包化與傳輸層,最上面則是你的應用程式,圖 2-1顯示 NFC協定架構中的各個層級。

你的程式

NDEF記錄

NDEF訊息

使用介面

記錄格式

訊息格式

軟體

簡易 NDEF資料交換協定(SNEP)

邏輯連結控制協定(LLCP)

指令協定

資料封包化規格

標籤/ 點對點對等式

硬體控制器(PN532、SCL3711等)

射頻規格 (13.56 MHz)射頻控制器

裝置間通訊

電腦、嵌入式 系統、微控制器

硬體

圖 2-1 NFC協定層級架構

在實體層裡,NFC遵循 RFID的射頻規格 ISO-14443-2,定義了頻率為 13.56 MHz的低功耗射頻;再上一層則是 ISO-14443-3,描述射頻傳送資料位元組的封包化。任何你可能使用的射頻裝置都是獨立的電子硬體零件,可能位在手機或平板電腦之內,或是以獨

立模組的形式附加在微控制器或個人電腦之上,射頻裝置透過一或多種裝置間序列傳輸

協定標準跟主處理器進行溝通:UART(Universal Asynchronous Receive-Transmit,通用

非同步接收傳送介面)、SPI(Serial Peripheral Interface,序列周邊介面)、I2C(Inter-

Integrated Circuit communication,整合電路內部通訊介面)或 USB(Universal Serial

16

Page 4: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

20 | 第二章

Broadcom(博通)與三星,其生產的裝置設備紛紛不再支援 Mifare Classic;若你手上擁有較新的裝置或 Android手機,當試著讀取 Mifare Classic標籤時大概會得到不可預期的結果,舉例而言,Nexus 4可把 Mifare Classic視為一般標籤進行讀取,但三星的S4(Google版)則會顯示錯誤,指出它無法讀取該標籤。如果可行的話,我們建議讀者選用符合 NFC論壇標準類型之一的標籤,在之後的章節篇幅裡,我們將視情況給予更明確的建議。

若你接觸 NFC的原因是想要在嵌入式硬體專案上使用 NFC,諸如 Arduino、Raspberry Pi或 BeagleBone Black(第 7章與第 9章將會有更多內容),那麼你應該購買 NFC論壇標籤與 Mifare Classic標籤,兩者都要,這些平台的程式庫都是先從 Mifare Classic開始支援,而且在本書撰寫期間,這些平台尚未能處理所有的 NFC論壇標籤類型。我們已經為 Arduino的 NDEF程式庫加入讀取 Mifare Ultralight(NFC Type 2)的能力,第 9章介紹的 libfreefare程式庫也開始部分支援 Ultralight與 DESFire(NFC Type 2與 Type 4)。

雖然我們期盼著這些程式庫將來都能支援所有的 NFC論壇標籤類型,但那一天尚未到來。對正在發展中的技術而言,總是會遭受這種痛苦,不過各種跡象都指出,產業界正

朝著標準標籤類型邁進。

表 2-1 裝置與標籤類型相容表

裝置 Type 1Type 2 (Mifare Ultralight)

Type 3 (Sony Felica)

Type4 (Mifare DESFire)

Mifare Classic

Samsung Galaxy S 是 是 是 是 是

Google Nexus S 是 是 是 是 是

Google Galaxy Nexus 是 是 是 是 是

Google Nexus 7第 1版 是 是 是 是 是

Google Nexus 7第 2版 是 是 是 是 否

Google Nexus 4(手機) 是 是 是 是 否

Google Nexus 10(平板) 是 是 是 是 否

Samsung Galaxy S4(平板) 是 是 是 是 否

Samsung Galaxy SIII 是 是 是 是 是

Adafruit NFC擴充版 否 部分 否 否 是

Seeed Studio NFC擴充版(Arduino) 否 部分 否 否 是

USB介面 NFC外插卡(libnfc) 否 部分 否 部分 是

20

Page 5: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

學習 PhoneGap與 PhoneGap-NFC程式庫 | 33

沒辦法在 Android 4.2版(或更新)找到開發人員選項嗎?請開啟「設定

(Settings)」並往下捲動到「關於裝置(About Device)」,若是 Nexus

7的話則是「關於平板(About Tablet)」,重複點按「建置(Build)」數

字好幾次,這可以啟用開發人員選項,然後回到前一個畫面,找到「開發

人員選項(Developer Options)」並開啟,其中特別應開啟的功能是在充

電時「保持清醒(Stay Awake)」以及「USB除錯(USB Debugging)」

的選項;若你的 Android裝置設有密碼,當在開發程式時或許可關閉,較

為方便,否則每當你上傳新版本的應用軟體後,還需要再次解鎖。

最後,請拿起手機並啟動 Hello應用軟體,應可看見如圖 3-1的畫面,一但可正常運行基本的「Hello, World!」後,請試著修改 index.html,讓它的畫面看起來更炫更潮,該檔

位於 www目錄裡,請加入按鈕、圖片、以及其他任何你想加入 HTML網頁的東西,存檔後再次執行,看看在手機上顯示的結果。

圖 3-1 以 PhoneGap建立的 Hello, World!應用軟體

Page 6: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

學習 PhoneGap與 PhoneGap-NFC程式庫 | 41

你也可以使用 Android除錯監視視窗(Android Debug Monitor)觀察所有正在進行中的事情,這是一套具有圖形介面的除錯軟體,位於 Android SDK的 tools子目

錄底下,因為先前已把此目錄加入執行路徑,所以輸入以下指令便可啟動:

Linux或 Mac OS X

$ monitor &

Windows

> start monitor

「&」可把除錯監控視窗放到背景執行,啟動後就會回到你的終端機介面;若使用Windows,該批次檔會在背景中啟動除錯監視視窗。你能以「Web Console」或任何你想使用的關鍵字來過濾 logcat的輸出訊息,也能看到其他輸出日誌的狀態,其中還有個效能監視器、檔案管理員等等,圖 3-3顯示這套除錯軟體的介面。

圖 3-3 Android除錯監控視窗

若裝置有連接網路,也可在 http://debug.phonegap.com找到 JavaScript主控台,只需要在該頁面的輸入欄位裡放入獨一無二的名字,例如「kramnitz」,然後在你的index.html檔裡匯入腳本檔的連結網址,下一次執行軟體時,就可以在 http://debug.

phonegap.com/client/#kramnitz看到你的 JavaScript主控台,非常便利且感到熟悉,但這種方式需要能連上網路。

40

Page 7: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

學習 PhoneGap與 PhoneGap-NFC程式庫 | 47

專案原始碼管理

一旦專案能跑能動之後,你大概就會想要存放進 Git或其他原始碼控管系統,但其中有些檔案並不需要放進去,包括建置出來的檔案、二進位檔案、等等,另

外,在放入控管系統之前,最好也能刪除專案目錄裡的 platforms/android/local.

properties、或是編寫 .gitignore忽略掉該檔,若你按照第 28頁「安裝 Node.js與npm」在登入腳本檔裡設定 PATH環境變數,那就永遠不需要 local.properties檔,若

沒有,那麼當從遠端佇藏庫更新專案時,你將需要:

$ cd projectDirectory$ android update project -p platforms/android/

以下列出可以安全忽略掉的東西,若使用 Git,可直接把底下這幾行加入 .gitignore檔:

platforms/android/local.propertiesplatforms/android/binplatforms/android/genplatforms/android/assets/www

只要 RFID標籤相容於你的 NFC讀取器,就能運作正常,包括所有相容於 ISO-14443A的標籤,包括 Philips/NXP 的 Mifare 標籤、Sony FeliCa 標籤、NXP DESFire。我們尚未讀寫標籤,只是讀出標籤的 UID而已。以這個範例程式的功能而言,標籤相容性問題不太嚴重,等到我們開始寫入 NDEF記錄到標籤時,相容性問題才會造成困擾;你會發現這個範例也能讀取 Mifare Classic標籤的 UID,即便照理說這些裝置應該不相容於Mifare Classic。

嘿,已經證明你的 Android裝置的讀取器可正常運作,撰寫程式後便可讀取標籤,下一章則將開始學習如何使用 NFC資料交換格式(NFC Data Exchange Format,NDEF)來讀取和寫入標籤。

疑難排除

若範例應用軟體無法讀取任一個你準備的標籤,請檢查以下這些項目:

你的裝置具備 NFC功能嗎?請到裝置的「設定」並點擊「更多 ...」,若沒看到 NFC,那就表示你運氣不好,若有的話,請確認啟動 NFC功能。當裝置貼近標籤時,你應該會聽到一段確認曲調,若標籤成功讀取,曲調以高音收尾,若讀取失敗則以低音收尾。當 NFC功能被關

45

46

Page 8: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

52 | 第四章

NDEF記錄 NDEF記錄 NDEF記錄

記錄表頭 記錄表頭 記錄表頭記錄承載資料 記錄承載資料記錄承載資料

記錄 1: 聯絡人姓名

記錄 2: 聯絡人電話號碼

記錄 3: 聯絡人住址

NDEF訊息 (長度不定)

NDEF記錄 (長度不定)

圖 4-1  NDEF訊息的結構可由幾個記錄組成,此圖秀出典型的範例:電話簿裡的一筆項目,其中包含三個記錄(姓名、電話號碼、住址)

NDEF記錄含有承載資料、以及描述如何解釋承載資料的後設資料,每個記錄的承載資料屬於數種不同資料類型之一,記錄的表頭則含有後設資料,描述該記錄位於訊息內的

什麼地方、後面跟著記錄的類型與 ID;表頭後面跟著承載資料,請見圖 4-2,完整秀出一個 NDEF記錄中每個位元、每個位元組代表的意義。

NDEF訊息 (長度不定)

NDEF記錄 (不定)

記錄表頭 (長度 6-9位元組)

訊息旗標 (長度 1位元組)

NDEF記錄

記錄表頭 記錄承載資料

NDEF記錄 NDEF記錄

不定

不定

不定

不定

TNF + 旗標

1位元組

1位元 1位元 1位元 1位元 3位元

1位元組 1位元組 1位元組 1位元組 1位元組 1位元組

類型長度

訊息開始 訊息結束 分塊旗標 短記錄 ID長度

1位元 (布林)

類型名稱格式

承載資料 長度

承載資料 長度

承載資料 長度

承載資料 長度

ID長度 承載資料類型 承載資料 ID

圖 4-2 NDEF訊息的結構,詳細列出表頭裡每個位元組代表的意義

從圖 4-2可看出,NDEF記錄中含有類型名稱格式(Type Name Format,TNF)、承載資料類型、承載資料 ID、以及承載資料本身,在 NDEF記錄中最重要的部份便是承載資料了,它就是我們想要傳送的東西;TNF負責告訴你如何解釋承載資料類型,承載資料類型會是某個 NFC特定的類型、MIME媒體類型、或是告訴你如何解釋承載資料的URI;若以另一種方式來形容的話,TNF扮演的角色負責描述承載資料類型,然後再由承載資料類型描述如何解讀承載資料;承載資料 ID屬於選用性欄位,其作用是讓多個承載資料關聯在一起、或是互相參照引用。

50

Page 9: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

介紹 NDEF | 59

額外資訊

若想得知 NDEF訊息結構進一步的資訊,包括自己撰寫 NDEF格式解析引擎時非常便利的測試集合,請到 NFC論壇網站查詢規格文件。

NDEF實務體驗為了親眼看看 NDEF實際運作的情形,我們可以先試試市面上已有的應用軟體,為此,此節將會下載幾套應用軟體到你的 Android裝置裡,然後試著使用它們讀寫標籤,並且比較有何差異。

眾多受歡迎的標籤寫入器應用軟體當中,最常見的任務之一是 Foursquare簽到功能,當你拿著格式化且寫入此功能的標籤,貼近裝置後便可自動連接社群媒體應用軟體

Foursquare,並在某集合地點簽到,然而,每套應用軟體處理此任務的方式皆不太一樣,差異處將顯現在執行結果。

閱讀本節時,你需要準備:

• 具備 NFC功能的 Android手機

• 五個 NFC標籤

• 以下列出的應用軟體(可以直接從電腦上或其他裝置上的 Google Play安裝到你的裝置裡)

另外,我們也假定你已讀過第 3章,已經安裝該章範例所有需要的軟體。

為了能在多個裝置間取得最佳結果,請使用符合 NFC論壇制定的標籤類

型,Mifare Classic將無法相容於較新的裝置,至於哪種標籤可相容於哪

些裝置,請見第 19頁「裝置與標籤類型之間的相容性」,還請不要使用

Type 2(Mifare Ultralight)的標籤,因為它們的記憶體容量無法滿足本章

節所需。

我們將使用以下這些應用軟體並比較差異:

• Trigger,由 TagStand開發

• NFC TagWriter,由 NXP開發

• NFC Writer,也是由 TagStand開發

57

Page 10: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

62 | 第四章

AppLauncher NFC開啟應用軟體,選擇 Foursquare,把手機貼近標籤,應用軟體就會寫入標籤。

一旦你成功寫入五個標籤後,請試試看,關閉所有應用軟體並把手機貼近標籤,其回應

該當如表 4-1所示。

接著,請開啟 NXP TagInfo,把手機貼近標籤讓應用軟體讀取標籤,選擇 NDEF後,你就可以觀看任何標籤的 NDEF細節資訊(如表 4-1所示)。

表 4-1 各應用軟體的輸出

應用軟體 記錄 TNF 記錄類型 承載資料 動作

NFC Task Launcher

1 MIME x/nfctl enZ:Foursquare;c: 4a917563f964a520401a20e3

試著啟動應用軟體,

若成功便會把 URL交給 Foursquare

2 外部 android.com:pkg com.jwsoft.nfcactionlauncher

TagStand Writer

1 已知 U http://m.foursquare.com/venue/ 4a917563f964a520401a20e3

啟動 Foursquare並前往集合地點簽到畫面

NXP TagWriter

1 已知 Sp 啟動 Foursquare並前往集合地點簽到畫面

1.1 U http://m.foursquare.com/venue/ 4a917563f964a520401a20e3

1.2 T Foursquare check-in

Samsung TecTiles

1 已知 U tectile://www/samsung.com/ tectiles

試著啟動 TecTiles應用軟體

2 已知 T ·enTask···· Foursquare·com.joelapenna⋯a

App Launcher NFC

1 外部 android.com:pkg com.joelapenna.foursquared 只啟動 Foursquare

註 a: Samsung TecTiles 訊息含有無法印出的字元,實際的字元並不重要且被換成位於中間的點,末端也被截斷換成省略符號。若想觀看完整的位元組串流,可從 TecTiles 寫入標籤後,以 NXP TagInfo 讀取。

如你所見,每套應用軟體處理事情的方式都不太一樣,然而歸納後可得到四種基本的 方式:

• 啟動 Foursquare應用軟體,讓使用者完成後續動作(App Launcher NFC)

• 傳送 URI,讓作業系統負責其餘事項(TagStand Writer)

59

60

Page 11: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

86 | 第五章

圖 5-1  NDEF讀取器應用軟體讀取標籤後顯示結果的畫面:一般已格式化為 NDEF的標籤、可格式化為 NDEF的空白標籤、MIME類型是「text/plain」的文字標籤

讀取 NDEF訊息現在,我們手上的程式已經能夠讀取任何類型的相容標籤,接下來繼續擴充,讓它在

讀取標籤後能顯示 NDEF訊息的細節資訊。還請各位讀者記得,NDEF訊息由一或多個 NDEF記錄組成,而若是個聰明型佈告記錄時,其內容本身又是個 NDEF訊息,為此,我們將需要一支 showMessage()函式,由 showTag()呼叫,以及一支 showRecord()函式,將會由 showMessage()呼叫;若碰到聰明型佈告記錄時,就需要再次呼叫showMessage()。你待會看到程式碼時就會明白,此處正是適合運用遞迴的地方。圖 5-2秀出整套應用軟體運作時的流程圖。

首先在 showTag()函式裡加入一個 if述句,判斷標籤是否含有 NDEF訊息,若有就傳給showMessage()函式。

showTag: function(tag) { //顯示標籤的細節資訊: app.display("Tag ID: " + nfc.bytesToHexString(tag.id)); app.display("Tag Type: " + tag.type); app.display("Max Size: " + tag.maxSize + " bytes"); app.display("Is Writable: " + tag.isWritable); app.display("Can Make Read Only: " + tag.canMakeReadOnly);

82

83

Page 12: NFC RFID - epaper.gotop.com.twepaper.gotop.com.tw/pdf/A408.pdf · 第二章. NFC 與RFID. 在今時今日, RFID ( Radio Frequency Identification ,無線射頻辨識)已經變成日常生活

聆聽 NDEF訊息 | 91

交由作業系統的標籤分派系統處理。接下來將實際示範,寫一支小小的應用軟體來讀取

文字訊息,但會忽略掉其他訊息;此範例使用 MimeTypeListener來達成目的。

先以 cordova create指令建立新專案:

$ cordova create ~/MimeReader com.example.mimereader MimeReader ❶$ cd ~/MimeReader ❷$ cordova platform add android$ cordova plugin add https://github.com/chariotsolutions/phonegap-nfc

❶ Windows使用者應輸入 %userprofile%\MimeReader而非 ~/MimeReader

❷ Windows使用者應輸入 /d %userprofile%\MimeReader而非 ~/MimeReader

然後請再次從之前的 NFC讀取器應用軟體複製 index.html與 index.js這兩支檔案:

$ cp ~/NfcReader/www/index.html ~/MimeReader/www/.$ cp ~/NfcReader/www/js/index.js ~/MimeReader/www/js/.

index.html頁面檔的內容幾乎一樣(只修改呈現的部份而已):

<!DOCTYPE html>

<html> <head> <title>NFC MIME Reader</title> </head> <body> <div class="app"> <p>This app reads plain-text NFC tags.</p> Try tags with <ul> <li>TNF 03 with type "text/plain"</li> <li>TNF 01 with RTD "T"</li> </ul> <div id="messageDiv"></div> </div> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="js/index.js"></script> <script type="text/javascript"> app.initialize(); </script> </body></html>