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