はじめに
初投稿です。
プログラミング関連の知識はほぼ無い浅学な者ですが、気が向いたときに更新できれば、と思っております。よろしくお願いいたします。
nfcpyがPython3対応
さて、PythonでNFCを扱うとなると、nfcpyを用いるのが(多分)定番だと思います。
しかし、これまではPython2のみ対応と、普段Python3で書いている方々にとっては頭が痛かったのではないでしょうか。
私も先日NFCリーダライタ(SONY RC-S380)を購入し、Python2で簡易的な入退室管理システム等を構築していた所なのですが、どうやら最近になってPython3に対応したとの情報をキャッチ。
早速Python3にも導入していきます。
導入環境
- Windows 10 Home 64-bit
- Python 3.7.3
- nfcpy 1.0.1
- SONY RC-S380
下準備
ただリーダを刺してコードを書いただけでは動きませんので、下準備をしていきます。すでに導入済みの方は適宜読み飛ばしてください。
1.libusbの導入
まずはlibusbを導入していきます。
このページからDownloadsをクリック、githubに飛ばされるのでそこからダウンロードします。
(今回はlibusb-1.0.22.7z
を使用)
解凍したら次の操作をします。
-
64ビット版Windowsの場合
-
MS64\dll\libusb-1.0.dll
をC:\Windows\System32
にコピー -
MS32\dll\libusb-1.0.dll
をC:\Windows\SysWOW64
にコピー
-
-
32ビット版Windowsの場合
-
MS32\dll\libusb-1.0.dll
をC:\Windows\System32
にコピー
-
2.ドライバの適用
次にこのページからZadigをインストールします。
(今回はZadig 2.4
を使用)
RC-S380を刺し、一旦ドライバが自動適用されるまで待ちます。
私の環境では自動適用されないうちにセットアップを進めたら上手くいきませんでした。
適用されたのを確認してZadigを起動、リストボックスからRC-S380を選択します。
(ない場合はOptions -> List All Devices
)
Driverの欄はWinUSB
を選択。
Replace Driver
をクリックして待ちます。
完了したら下準備は終了。
nfcpyの導入
nfcpyをインストールしていきます。
nfcpyはpipでインストール可能です。(ここでlibusb1
も同時にインストールされるようです)
> pip install nfcpy
インストールが完了したらPythonを起動して正常にインポートできるか確認。
>>> import nfc
動作確認
今回は読取対象をSuicaに限定してみます。
こうすることでApple Pay等、エキスプレス設定のバーチャルカードでも一発で読めます。
その他の文法も基本的にPython2のnfcpyと相違ないようなので、各自お調べください。
Suicaのidmを読み取るサンプルを置いておきます。
import nfc
import binascii
suica=nfc.clf.RemoteTarget("212F")
suica.sensf_req=bytearray.fromhex("0000030000")
while True:
with nfc.ContactlessFrontend("usb") as clf:
target=clf.sense(suica,iterations=3,interval=1.0)
while target:
tag=nfc.tag.activate(clf,target)
tag.sys=3
idm=binascii.hexlify(tag.idm)
print(idm.decode())
break
カードが置かれている間、idmを出力し続けます。
終わりに
ということで、ついにPython3にnfcpyが来た、という話でした。
いやぁ、Python3で書ける様になるのは有難いですね、、、。