KAIKETSU Developer's Diary

株式会社KAIKETSU エンジニアチームのブログです

Raspberry PiでNFCタグを読み込む

背景

出退勤システムが作りたかったのでNFCタグリーダをもってきた。

いろいろインストール

必要なものはPython2系とそのpipくらい。

$ sudo apt install python python-pip

nfcpyをpipで入れる

$ sudo pip install -U nfcpy

サンプルのリポジトリをクローンしてみる

$ git clone https://github.com/nfcpy/nfcpy.git
$ cd nfcpy

実行してみる

$ sudo python examples/tagtool.py show
No handlers could be found for logger "nfc.llcp.sec"
[nfc.clf] searching for reader on path usb
[nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:001:005
** waiting for a tag **
Type3Tag 'FeliCa Standard (RC-S???)' ID=**************** PMM=**************** SYS=0003

IDmだけ取れればいいので、サンプルを参考に何度も取れるように改良する。

# read_idm.py
import binascii
import nfc

class MyCardReader(object):
    def on_connect(self, tag):
        print "touched"
        self.idm = binascii.hexlify(tag.idm)
        return True

    def read_id(self):
        clf = nfc.ContactlessFrontend('usb')
        try:
            clf.connect(rdwr={'on-connect': self.on_connect})
        finally:
            clf.close()

if __name__ == '__main__':
    cr = MyCardReader()
    while True:
        print "touch card:"
        cr.read_id()
        print "released"
        print cr.idm

実行する

$ sudo read_idm.py
No handlers could be found for logger "nfc.llcp.sec"
touch card:
touched
released
0114************
touch card:
touched
released
0114************
touch card:

まとめ

なんとかWebアプリかなんかと連携していい感じに表示できるようにしたいところ。