#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