ブログ

Armadillo-X1/IoT(G3/G3L):ICカードリーダ(Pasori(RC-S380))を使ってSuicaのデータを読む

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