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枚”]
エラーになったコードは
誤:print ‘sleep ‘ + TIME_wait + ‘ seconds’
正:print ‘sleep ‘ + str(TIME_wait) + ‘ seconds’
ですね。