2016/11/05

[py][nfc]nfcpyでRC-S380を動かす(Windows10)

数週間pythonを触ったので、そろそろnfcpyもわかるようになってきたんじゃなかろうか。

nfcpy/nfcpy: A Python module to read/write NFC tags or communicate with another NFC device.

いつの間にかgithubになってるし、READMEを読んだところではpipでインストールできるらしい。
ドキュメントはこちららしい。

Python module for near field communication — nfcpy latest documentation

 

過去に動かしたことはあるのだが、もうすっかり記憶にないので、ちょうどよいだろう。
うちの環境は、こう。

  • Windows10 Pro 64bit
  • PaSoRi RC-S380/P

PaSoRiのドライバはインストールされている。
が、たぶんそれは切り離すことになるだろうね。


Overview — nfcpy latest documentation

pythonは2.6以降。でも、3は対応していないとのこと。
それと、libusbを使うようで、そのpythonライブラリがpython-libusb1らしい。
libusbは、APIが0.x系と1.x系があったので、その1.x系ということだろう。
pyserialはPaSoRiでは不要なのだけど、無しでもよいのかな?

 

Getting started — nfcpy latest documentation

pythonは既にインストールしているので、それを使う。
幸い、pipの場所もPATHに追加しているようで、コマンドプロンプトから"where pip"で見えた。

> pip install libusb1

これで、v1.5.3がインストールされたようだった。
これだけだとWindowsではlibusbがないので、そっちは自前でインストールする。

説明ではいろいろ書かれているけど、たぶんこういう手順だろう。

  1. zadigを使って、PaSoRiをWinUSBドライバで扱うように変更する
  2. libusbをインストールする

zadigでドライバを差し替えられるのだが、libusbKやlibusb-win32という名前に引きつけられず、WinSUBを選ぶ。

image

デバイスマネージャでは、こう見えるようになる。

image

 

libusbは、ここから、「Downloads」をクリックするとsourceforgeに飛んでダウンロードされる。
このサイト、ずっと「libusbX」とばかり思っていたのだが、Xに見えていたのは単にケーブルがクロスしている画像だったのか?
いや、libusbxというサイトもあるな。まあいいや。

使うのはDLLファイルだけのようで、私は64bit環境なので、MS64\dll\libusb-1.0.dllになるだろう。
c:\Windows\System32にコピーするよう書かれているが、DLLってPATHのどこかに置けばよいのではなかったっけ。
まあ、試してダメだったらコピーしよう。


次は、bzrで最新版を取ってくるよう書かれているが、これはgithub版でいいや。
pipで取ってこれると書いてあったから、それでよいのかも。
最新のリリース版は、v0.11.1で、これが2016年4月29日。
うーん、半年以上経っているからgithubの最新版を使うことにしよう。

 

以前から気になっていたのだが、こういうライブラリには「setup.py」というファイルがだいたいついている。
これは何だろうか?
説明によると、配布する際の情報を書くようだった。
ということは、このファイルがあればPYTHONPATHなどに書かなくてもよいようにインストールできるのだろうか?

> python setup.py install

なんか、だーっと流れた。
「python27\lib\site-packages」に置いたというようなメッセージが出たので見に行くと、nfcpy-latest-py2.7.eggというファイルがあった。
eggって、卵?
まあ、いいや。


そして、もうexmaplesを動かす。
ここでは、examples/tagtool.pyというコマンドを動かすようだ。
なんとなく、タグを読むサンプルのような気がするので、PaSoRiの上にMIFARE Ultralightのカードを置いておく。

さっきのlibusb-1.0.dllは、うちではC:\Winappliというフォルダの中に置いているので、そこにパスを通す。

>set PATH=%PATH%;c:\Winappli

そして、実行。

>python examples/tagtool.py show
[nfc.clf] searching for reader on path usb
[nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:002:015
** waiting for a tag **
Type2Tag 'NXP NTAG203' ID=04079672B92981
NDEF Capabilities:
  readable  = yes
  writeable = yes
  capacity  = 142 byte
  message   = 0 byte

 

へー、これだけで動くんだ。
pynfcもだけど、汎用のUSBアクセスができるlibusbの力は偉大ですな。

 

もしかしたら、Ubuntu on Windowsでも動くのでは?と思ったが、今のところUSB機器をサポートしていないらしい。
http://stackoverflow.com/questions/38954691/is-usb-supported-on-bash-on-ubuntu-on-windows-10

実際、ダメだった。
今後のアップデートでストレージは使えるようになるかもしれないけど、libusbはどうなるか微妙なところだと思う。
好みの環境を作るのは難しいねぇ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。