今回はpasoriを接続してICカードにidmと呼ばれるカード毎に固有の番号が付与されているので、pasoriでその番号を読み出して鍵を開けるためのしきい値として用います。
pasoriの接続確認
まずはpasoriがラズパイで認識しているか確認していきます。
pasoriをラズパイのUSBに挿し、ターミナルを起動後に
lsusbを入力してEnter。そうするとRC-S380と表示されているので認識されていることがわかります。
nfcpyのインストール
nfcpyというライブラリが公開されているのでインストールします。ターミナルを開いて下記のコードを入力するとインストールしてくれます。
sudo pip3 install nfcpy
終わったらGithubで公開されいるサンプルコードを利用して動作確認していきます。
同じくターミナルで
git clone https://github.com/nfcpy/nfcpy.git
ダウンロードが終わったら下記をコピペ
cd nfcpy sudo python3 examples/tagtool.py show
リーダーが待機状態となるので交通系ICカードをかざすと色々表示されますが、赤枠部分がIDがIDmです。
この状態だとsudoをつけないとプログラムが実行した際にラズパイがpasoriを認識することができずエラーとなって止まってしまいます。
ターミナルを開いて下記を入力
sudo nano /etc/udev/rules.d/nfcdev.rules
以下の1行をコピペして「ctrl+o」→「Enter」→「ctrl+x」
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06c3", GROUP="plugdev" # Sony RC-S380/P
書き込みが終わったら再起動します。これでsudoなしでも実行できるようになります。
追記(22/02/22)
以前同じことをやったときは特に問題なくsudoなしで実行できていたのですが、改めてやったら何故かうまくいきませんでした。
最悪ターミナル上からsudo有でプログラムを実行してやれば動くので特段支障はありません。
pythonで指定したICカードのみ動作させる
pythonでプログラムの動作確認を行っていきます。
import binascii, nfc, time from threading import Thread, Timer idm1 = b"xxxxxxxxxxxxxxxx" #交通系ICカード1 idm2 = b"yyyyyyyyyyyyyyy" #交通系ICカード2 #ICカード待受の1サイクル秒 TIME_cycle = 1.0 #ICカード待受の反応インターバル秒 TIME_interval = 0.2 #タッチされてから次を開始するまでの無効化する秒 TIME_wait = 3 #NFC接続リクエストのための準備 #212F(Felica)で設定 target_req_ic = nfc.clf.RemoteTarget("212F") #0003(IC cart) target_req_ic.sensf_req = bytearray.fromhex("0000030000") print('ICカードをタッチしてください...') while True: #USB接続されたカードリーダーをインスタンス化 clf = nfc.ContactlessFrontend('usb') #ICカード待受開始 target_res = clf.sense(target_req_ic, iterations=int(TIME_cycle//TIME_interval)+1, interval=TIME_interval) if not target_res is None: tag = nfc.tag.activate_tt3(clf, target_res) tag.sys = 3 #IDmを取り出す idm = binascii.hexlify(tag.idm) print(idm) #特定のIDmだった場合のアクション if idm == idm1 or idm == idm2: print("OK") else: print("NG") clf.close() #end while
今回はIf文と呼ばれる条件式を用いて、以下の青枠が条件式でそれに対して正だった場合に緑枠の動作(OKと表示)、そうでなかった場合に赤枠の動作(NGと表示)が行われるようになっています。プログラム上の「idm」はタッチされたICカードのidmなので、「idm1」と「idm2」は鍵として使いたいidm入れてやると指定したICカードのみOKと表示される仕組みが完成します。
今後は緑色の動作内容を変更してICカードが一致した場合にSesameを解錠する動作内容に変更していきます。
次回:いよいよSesame登場