サイトアイコン KOKENSHAの技術ブログ

RaspberryPiで!SONYのPaSoRi(RC-S380)で(NFC)Felica情報を読み取る!

これずっとやりたかったです!

目次

RaspberryPiで!SONYのPaSoRi(RC-S380)で(NFC)Felica情報を読み取る!

今回使うライブラリーは

nfcpyのpython2のライブラリーですので、Python3では未検証です。興味のある方はpython3も検証してみてください。

nfcpyのgithubはこちらです。

https://github.com/nfcpy/nfcpy

ハードウェア

Raspberry Pi 3B

今回はRaspberryPi 3Bを使います。もちろん、PCの環境(python2が入っていれば)も実行可能です。

Raspberry Pi Zeroももちろん動くはずです。

SONY PaSoRi

あとはSONY PaSoRiのカードリーダー/ライターCR-S380ももちろん今回の主役ですので、買っといてください!笑

カード

実験用のsuicaカード、パスモカード、あるいは、無地のICカード

白無地ですから

本当に白いです。笑。自分で使うときは区別するために、ラベリングが必須ですね。

環境の用意

pythonのインストール

まずは、pythonを用意してください。

python2が入っていない場合はpython2をいれてください。

(pythonがデフォルトに入っています。)

gitは入っていない場合は、gitもいれておいてください。

sudo apt-get install git

あとでgitを使って、nfcpyのgitをcloneして、サンプルを実行する時に使います。

pipのインストール

次は、

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

次は

sudo python get-pip.py

sudoを忘れずに

次は

プログラムの準備

sudo pip install nfcpy

次は次のプログラムを用意してください。

サンプルコードの実行

nfcpyのソースコードをRaspberryPi 3Bにcloneします!

git clone https://github.com/nfcpy/nfcpy.git

それから、examplesフォルダに行きます。

そこで

sudo python tagtool.py

を実行してください。

Suica等のNFCタグをタッチすると、正確にICカードの情報を取り出せます。

Suicaに限らずPasmoやNanacoやマイナンバーカード等、色んなNFCタグをタッチしてみるのが楽しいです。

大成功ですね!笑。

IDmを取り出す

次は、こちらの記事のプログラムを実行してみます!

@undo0530さんありがとうございます!

https://qiita.com/undo0530/items/89540a03252e2d8f291b

@undo0530さんのプログラムはこちらです。

suica.py

# -*- coding: utf-8 -*-
import binascii
import nfc
import time
from threading import Thread, Timer

# Suica待ち受けの1サイクル秒
TIME_cycle = 1.0
# Suica待ち受けの反応インターバル秒
TIME_interval = 0.2
# タッチされてから次の待ち受けを開始するまで無効化する秒
TIME_wait = 3

# NFC接続リクエストのための準備
# 212F(FeliCa)で設定
target_req_suica = nfc.clf.RemoteTarget("212F")
# 0003(Suica)
target_req_suica.sensf_req = bytearray.fromhex("0000030000")

print 'Suica waiting...'
while True:
    # USBに接続されたNFCリーダに接続してインスタンス化
    clf = nfc.ContactlessFrontend('usb')
    # Suica待ち受け開始
    # clf.sense( [リモートターゲット], [検索回数], [検索の間隔] )
    target_res = clf.sense(target_req_suica, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)
    if target_res != None:

        #tag = nfc.tag.tt3.Type3Tag(clf, target_res)
        #なんか仕様変わったっぽい?↓なら動いた
        tag = nfc.tag.activate_tt3(clf, target_res)
        tag.sys = 3

        #IDmを取り出す
        idm = binascii.hexlify(tag.idm)
        print 'Suica detected. idm = ' + idm
        #---------------------------------------------------------------
        # このした一行だけ、@undo0530 さんのプログラム実行時エラーになったため、コメントアウトしました
        # print 'sleep ' + TIME_wait + ' seconds'
        #---------------------------------------------------------------
        time.sleep(TIME_wait)
    #end if
    clf.close()
#end while

実行

sudo python suica.py

idmを取れました!

2枚目も、三枚目も続けてタッチすることができます!

ぜひ試してみてください!

@undo0530さんありがとうございます!みなさん、ぜひ@undo0530さんのページをチェックしてみてください!

まとめ

ほぼ、nfcpyを入れれば、仕事が終わりのイメージでした!笑

とても簡単に試すことができました!

 

これで、入退室管理や、カードでのID確認、会員管理、カードキーの実装などなど色々できそうですね!

これから、カードをかざすことで、何か(サーボ)を動かす実験を作ってみたいですね!

[amazonjs asin=”B00948CGAG” locale=”JP” title=”ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380″]

[amazonjs asin=”B01NAHBSUD” locale=”JP” title=”Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品”]

[amazonjs asin=”B009VT0MNG” locale=”JP” title=”Felicaカード白無地(felica lite-s・フェリカライトS・RC-S966)icカード 10枚”]

モバイルバージョンを終了