LoginSignup
17
15

More than 5 years have passed since last update.

nfcpy 0.13.4でNFCのIDを読む

Last updated at Posted at 2017-11-20

Raspberry Pi 3でNFCのタグが読みたい

ということで、nfcpyをインストールしました。その他必要事項はググれば色々出るとおもいます。
0.10で大きな改変があったようですが、webに乗っている比較的新し目のコードを0.13で実行してもエラーになるので、ソースコード読んだりしながら試行錯誤した結果が下記のコードです。
結局、ぐぐると出て来るコードのIDmやUIDをidentifierに変えると動きました。

環境

Raspberry Pi 3 + RC-S380

コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import nfc
import binascii

def on_connect(tag):
    print tag
    print tag.type
    print binascii.hexlify(tag.identifier).upper()

def main():
    with nfc.ContactlessFrontend('usb') as clf:
        clf.connect(rdwr={'on-connect': on_connect})

if __name__ == '__main__':
    main()

結果

Xperia X Performance SOV33を読ませてみました。

Type4ATag MIU=255 FWT=0.038664
Type4Tag
08xxxxxx

SOS

Type3は毎回同じIDをはくのですが、Type4Aは毎回違うIDが出てきてIDの意味がないという状態です。
nfcpyだとこれ以上できそうにないんですが、解決策ご存じの方ご教示ください。

解決策

Type4に対する根本的な解決策ではないのですが、targetsで212Fと424Fを指定することによりType 3のFelicaの読み込みに限定できました。
212F,424Fは212Hz, 424HzのFelica用のプロトコルといったところでしょうか?

import nfc, nfc.clf
import binascii

def on_connect(tag):
    print tag
    print tag.type
    print binascii.hexlify(tag.identifier).upper()

def main():
    clf = nfc.ContactlessFrontend("usb")

    rdwr_options = {
        'targets': ['212F' , '424F'], #Felicaに限定
        'on-connect': on_connect,
    }

    clf.connect(rdwr=rdwr_options)


if __name__ == '__main__':
    main()

その結果

Type3Tag 'FeliCa Mobile 3.0' ID=0134XXXXXXXXXXXX PMM=0114XXXXXXXXXXXX SYS=FE00
Type3Tag
0134XXXXXXXXXXXX
17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15