Ameba Arduino: [RTL8195] NFC – 存取NFC tag 的內容


材料準備

  • Ameba x 1
  • 具備NFC功能的手機 x 1

範例說明

具備NFC功能的Android手機可以寫入資料到Ameba的NFC Tag,並且存回Flash Memory裡面。等到下次開機時,再從Flash讀出來,更新回Ameba的NFC Tag裡
Google Play上面可以搜尋到不少NFC應用程式:
https://play.google.com/store/apps/details?id=com.wakdev.wdnfc
https://play.google.com/store/apps/details?id=com.nxp.taginfolite
這些應用程式可以讀NFC Tag的NDEF內容,也可以自己包裝NDEF內容再寫回Tag,這個範例將會操作讀寫Tag的部份。
打開範例程式, “File” -> “Examples” -> “AmebaNFC” -> “StoreTagContent”, 編譯並上傳至Ameba, 完成之後按下Reset按鈕。

這裡以 NFC Tools 為例, 打開Application,切換上方的頁籤到READ頁面並靠近Ameba,感應到之後,會出現Tag的資料,拉到最底下會看到text/plain的訊息是 “Hello World”
1

此時我們切換頁籤到WRITE,點選 “Add a record” -> “Text”, 然後輸入 “new msg”, 按下OK, 然後按下Write, 此時手機會提示你靠近Tag, 我們將手機靠近Ameba的NFC Tag
2

感應並寫入之後, 手機會出現完成訊息
3

接著我們再將上方的頁籤切回READ並感應Ameba NFC Tag,看看剛剛是否成功寫入
4

會看到訊息已經變成 “new msg”,此時我們可以按Ameba的Reset按鈕,再拿手機去讀Ameba的NFC Tag,會看到訊息仍然是 “new msg”,代表這訊息在斷電之後仍然存在。

程式碼說明

這個範例裡結合了Flash Memory API與NFC API
首先我們先從Flash Memory讀內容出來,並檢查內容是否正確。檢查的方式是計算NFC UID的checksum是否正確。
如果不正確,也就是第一次使用的情況,我們呼叫 NfcTag.appendRtdText("Hello World!") 來新增純文字的NDEF訊息。
接著呼叫 NfcTag.begin() 啟動 NFC Tag
我們在程式碼裡記錄上一次NFC Tag被修改的時間,如果發現這次修改的時間與上次不一樣,就 NFC Tag的buffer複製到 Flash Memory的buffer裡,再呼叫 FlashMemory.update() 寫回到Flash Memory裡。
下次開機時,UID的checksum就會是正確的,我們將Flash Memory的buffer複製到NFC Tag的buffer裡,並用這個內容啟動NFC Tag