1788621 ランダム
 ホーム | 日記 | プロフィール 【ログイン】

傀儡師の館.Python

PR

日記/記事の投稿

カレンダー

キーワードサーチ

▼キーワード検索

カテゴリ

バックナンバー

フリーページ

楽天プロフィール


kugutsushiさん

怠惰な人

フォローする


■ 趣味・関心キーワード
デジモノ 

サイド自由欄

設定されていません。
2014年02月23日
XML
カテゴリ:Raspberry Pi
電子工作系はちょっと横に置いておき、Raspberry Pi で NFC カードを読み取ってみる。使った NFC リーダーは、Sony の パソリ RC-S380/P。nfcpyを使ったら、簡単にカード情報を読み取ることができた。pynfc: Python bindings for libnfc は 2012年7月末から更新がないような感じなので、nfcpy を使うことにした。

nfcpy の公式ドキュメントnfcpy Example Programsを見ると便利なtagtool.py などの使い方も分かる。Using LibUSB for installing FeliCa NFC-Device on Windows 7 64bit とかは answers.lauchpad.net/nfcpy で見つかる。

nfcpy: Getting started を見ると、インストールの仕方が分かる。nfcpy のページも読んでおいた方が役に立つ。日本語情報で参考になるのは、nfcpyでお手軽NFC開発[1/2]nfcpyでお手軽NFC開発[2/2]あたり。

たとえば、sudo でプログラム動かすのやだしというのであれば、 /etc/udev/rules.d/nfcdev.rules にリーダーの情報を登録してあげればいいとかは、公式サイトの nfcpy のサイトを見ると分かる。私の場合、パソリ RC-S380/P を使っているので、idVendor=054c, idProduct=06c3 を含む情報を書き込んだ。dmesg コマンドで見ると、

usb 1-1.2: new full-speed USB device number 5 using dwc_otg
usb 1-1.2: New USB device found, idVendor=054c, idProduct=06c3
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=4
usb 1-1.2: Product: RC-S380/P
usb 1-1.2: Manufacturer: SONY
usb 1-1.2: SerialNumber: 5555555 # これは嘘シリアル

なので

SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="054c", \
ATTRS{idProduct}=="06c3", GROUP="plugdev" # Sony RC-S380/P


を書き込んだ。
Python module for near field communication: A major update for nfcpyを見ると、次のようにあるので、RC-S380 が使えるなら RC-S380/P でも大丈夫かなと、ちょっと idProduct を変えて試したわけ。

- The driver API needed to change in order to support tag emulation, as possible now with the RC-S380 reader.

これで、USB を引きぬいてから、再度つなぐと、sudo しなくてもプログラムが動かせるようになった。ちなみに、ユーザーは、plugdev グループに入れておく必要があるが(GROUP="plugdev" で指定している)、Raspberry Pi のデフォルトユーザーの pi は最初からそういう設定になっているので、nfcdev.rules に書き込むだけで OK だった。

インストールについては、python-usb を最初にインストールしておく。lsusb コマンドで、パソリが認識されているのを確認。

$ sudo apt-get install python-usb

その後、nfcpy をダウンロード

$ wget https://launchpad.net/nfcpy/0.9/0.9.1/+download/nfcpy-0.9.1.tar.gz
$ tar xvzf nfcpy-0.9.1.tar.gz

# または
$ sudo apt-get install bzr
$ cd <somedir>
$ bzr branch lp:nfcpy

ダウンロードしたら試してみる。


$ sudo sample/tagtool.py
[nfc.clf] searching for reader with path 'usb'
[nfc.clf] using SONY RC-S380/P at usb:001:004
[main] touch a tag
Type3Tag IDm=01010101ffffffff PMm=1001001001001000 SYS=0003
# IDm と PMm はデタラメ


インタプリタからも試してみる。ちゃんと認識している。

>>>import nfc
>>>clf = nfc.ContactlessFrontend('usb')
>>>print(clf)
SONY RC-S380/P on usb:001:004

リーダーをUSB デバイスとして決め打ちで指定するときには、

import nfc
clf = nfc.ContactlessFrontend('usb:054c:06c3')
print(clf)


のようにすればよい(前のコマンドを実行したあとで、うまく行かなかったら、clf.close()してから、決め打ちの方法を試してみればよいようだ。

ちなみに、sudo しないで Python を実行すると、リーダーが見つからないので、上述のように nfcdev.rules にリーダー情報を書き込んで使うか、毎回 sudo で実行する。

nfcdev.rules に書き込まず、sudo しないと次のようにリーダーが認識できないかった。

pi@rasb01 ~/src/nfcpy-0.9.1/examples $ python tagtool.py
[nfc.clf] searching for reader with path 'usb'
[nfc.clf] no reader found at 'usb'
[main] no contactless reader found


読んだだけではつまらないので、Raspberry Pi で LED チカチカしてみた で試した LED をチカリと光らせてみた(単にカードを読み込み終わったあとに、チカリと LED を点滅させるだけ)。

過去の関連記事


★確実正規★返金保証★サポート抜群【最安挑戦】【即納】ラズベリーパイ Raspberry Pi Type B 512MB【確実正規】



無料アクセス解析






最終更新日  2014年02月24日 04時01分16秒
コメント(2) | コメントを書く
[Raspberry Pi] カテゴリの最新記事


Powered By 楽天ブログは国内最大級の無料ブログサービスです。楽天・Infoseekと連動した豊富なコンテンツや簡単アフィリエイト機能、フォトアルバムも使えます。デザインも豊富・簡単カスタマイズが可能!

Copyright (c) 1997-2017 Rakuten, Inc. All Rights Reserved.