3238252 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2024.03
2024.02
2024.01
2023.12
2023.11
2023.10
2023.09
2023.08
2023.07
2023.06

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
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【確実正規】



無料アクセス解析





お気に入りの記事を「いいね!」で応援しよう

Last updated  2014.02.24 04:01:16
コメント(4) | コメントを書く
[Raspberry Pi] カテゴリの最新記事



© Rakuten Group, Inc.