はじめに

初投稿です。

プログラミング関連の知識はほぼ無い浅学な者ですが、気が向いたときに更新できれば、と思っております。よろしくお願いいたします。


nfcpyがPython3対応

さて、PythonでNFCを扱うとなると、nfcpyを用いるのが(多分)定番だと思います。

しかし、これまではPython2のみ対応と、普段Python3で書いている方々にとっては頭が痛かったのではないでしょうか。

私も先日NFCリーダライタ(SONY RC-S380)を購入し、Python2で簡易的な入退室管理システム等を構築していた所なのですが、どうやら最近になってPython3に対応したとの情報をキャッチ。

早速Python3にも導入していきます。

nfcpy


導入環境


  • 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.dllC:\Windows\System32にコピー


    • MS32\dll\libusb-1.0.dllC:\Windows\SysWOW64にコピー




  • 32ビット版Windowsの場合



    • MS32\dll\libusb-1.0.dllC:\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を読み取るサンプルを置いておきます。


NFCread.py

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で書ける様になるのは有難いですね、、、。