at_kazutaka.bito
2017年12月19日 18時03分
Armadillo-X1/IoT(G3/G3L):ICカードリーダ(Pasori(RC-S380))を使ってSuicaのデータを読んでみました。
下記手順は、
raspberry piでSuicaの履歴の表示
Raspberry Pi 3にPaSoRiを接続してSuicaカードをダンプする
の方法(pythonのnfcpyを使って、NFCタグを読む)を、参考にしています。
1.必要なパッケージのインストール
Armadillo-X1/IoT(G3/G3L)をインターネットに接続可能なネットワークに接続します。
下記コマンドを実行して必要なパッケージ(pythonのUSB通信ライブラリ、NFCタグを読み書きのライブラリ等)をインストールします。
root@armadillo:~# apt-get update
root@armadillo:~# apt-get upgrade
root@armadillo:~# apt-get -y install python-pip python-usb
root@armadillo:~# pip install libusb1 pyserial
root@armadillo:~# apt-get install bzr
root@armadillo:~# bzr branch lp:nfcpy
2.Armadilloで、ICカードリーダ(Pasori(RC-S380))の認識を確認
ICカードリーダ(Pasori(RC-S380))をArmadilloのUSBコネクタに接続します。
下記の手順で、ICカードリーダ(Pasori(RC-S380))が認識されているかを確認できます。
root@armadillo:~# cd nfcpy ←nfcpyディレクトリに移動
root@armadillo:~/nfcpy# python ←python実行
Python 2.7.9 (default, Aug 13 2016, 17:56:53)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nfc ←"import nfc"と入力
>>> clf = nfc.ContactlessFrontend('usb') ←"clf = nfc.ContactlessFrontend('usb')"と入力
>>> print(clf) ←"print(clf)"と入力
SONY RC-S380/P on usb:001:002 ←"SONY RC-S380/P"と表示されることを確認。
>>> ←Ctrl+Dで終了
3.Suicaの履歴を読む
下記の内容のPythonのプログラムを作成します。
ここでは、nfcpyディレクトリの下に、suica.pyというファイル名で作成します。
suica.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import binascii
import nfc
service_code = 0x090f
def connected(tag):
print tag
if isinstance(tag, nfc.tag.tt3.Type3Tag):
try:
sc = nfc.tag.tt3.ServiceCode(service_code >> 6, service_code & 0x3f)
bc = nfc.tag.tt3.BlockCode(0, service=0)
print "block: %s" % binascii.hexlify(tag.read_without_encryption([sc], [bc]))
except Exception as e:
print "error: %s" % e
else:
print "error: tag isn't Type3Tag"
clf = nfc.ContactlessFrontend('usb')
clf.connect(rdwr={'on-connect': connected})
下記のように実行して、Pasori(RC-S380)にSuicaをかざすと、ID等の情報が表示されます。
root@armadillo:~/nfcpy# python suica.py
4.Suicaのデータのダンプを表示
下記の内容のPythonのプログラムを作成します。
ここでは、nfcpyディレクトリの下に、suica2.pyというファイル名で作成します。
suica2.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
sys.path.insert(1, os.path.split(sys.path[0])[0])
import binascii
import nfc
service_code = 0x090f
def connected(tag):
print tag
if isinstance(tag, nfc.tag.tt3.Type3Tag):
try:
print(' ' + '\n '.join(tag.dump()))
except Exception as e:
print "error: %s" % e
else:
print "error: tag isn't Type3Tag"
clf = nfc.ContactlessFrontend('usb')
clf.connect(rdwr={'on-connect': connected})
下記のように実行して、Pasori(RC-S380)にSuicaをかざすと、ダンプが表示されます。
root@armadillo:~/nfcpy# python suica2.py