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


材料准备

  • Ameba x 1
  • 具备NFC功能的手机 x 1

范例说明

具备NFC功能的Andr​​oid手机可以写入资料到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