search
LoginSignup
68

More than 5 years have passed since last update.

posted at

updated at

Raspberry piで、PaSoRi USB Felica Reader(RC-S380)を使用する

Raspberry piとFelica Readerを接続して利用する方法は、Googleで検索すると色々とヒットするようです。
libusb,libpafeをC言語から利用する方法も調べてみたのですが、情報的に古いためライブラリは昔のバージョンでないとコンパイルエラーが発生するなど、ちょっと情報を補完する必要がありそうです。
検索ワードを変更しつつ調べてみると、情報的に新しく簡単な方法として、python-usbを使用する方法を見つけました。
ドライバは、パッケージを1つ入れれば良いみたいなので、すごく簡単です。

$sudo apt-get install python-usb

実際に、カードを読み書きするコードは、nfcpyというpythoonのスクリプトになります。

$ 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

スクリプトをダウンロードしてから解凍しtagtool.pyというスクリプトを実行すれば、カードIDが読まれます。

$ sudo nfcpy-0.9.1/examples/tagtool.py

tagtool.pyは、通常モードでは、1回読み取りを行うとプログラムが終了します。
繰り返し読むには、-lオプションを付けて起動します。
tagtool.pyは、root権限で実行しないとエラーになりますが
/etc/udev/rules.d/nfcdev.rulesファイルを作成し次のようなテキストを書き込むとユーザー権限でも実行可能になります。(一度USBを挿抜する必要がある)
詰めて記入したらダメだったので、改行も含めて同じように記入してください。

SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="054c", \

  ATTRS{idProduct}=="06c3", GROUP="plugdev" # Sony RC-S380/P

pythonで、制御を書く自信が無かったので、自作したプログラムへはパイプを利用して情報を渡すようにしました。

./tagtool.py -l | grep -o "IDm=[0-9a-f]*" | diligence.exe

しかし実際に試してみるとループモードで実行すると標準出力にカードIDが出力されてこないようです。単発モードではパイプで情報が来るようです。
しかたがないので、bashのスクリプトでループするようにしました。

diligence.sh
while :
do
    ./tagtool.py | grep -o "IDm=[0-9a-f]*" | diligence.exe
done

自作プログラムは、monoで作られているため拡張子が、exeになっています。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
68