LoginSignup
43

More than 5 years have passed since last update.

raspberrypiでFeliCaのIDmを読み取る(pasori RC-S320版)

Last updated at Posted at 2016-09-24

FeliCaのIDm読み取りに当初はnfcpyの使用を考えていたが、手持ちのpasori RC-S320では対応していないことが判明したため、代わりにlibpafeを使用した。

2016/10/16追記:
pasori RC-S380でIDmを読み込みたい場合はこちら

環境

ハード:raspberrypi3
OS:raspbian
リーダ:pasori RC-S320

準備

  • ディレクトリ作成
$ mkdir pasori
$ cd pasori
  • raspberrypi3のUSBにpasoriを接続する。
  • 下記コマンドで認識されていることを確認する。
$ lsusb
Bus 001 Device 004: ID 054c:01bb Sony Corp. FeliCa S320 [PaSoRi]
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  • libusbのインストール
$ sudo apt-get install libusb-dev

libpafeのインストール

  • ダウンロードとコンパイル
$ git clone https://github.com/rfujita/libpafe.git 
$ cd libpafe
$ ./configure
$ make
$ sudo make install
  • インストール結果確認
    libpafe.so.0.0.8があることを確認する
$ cd /usr/local/lib
$ ls
libpafe.a   libpafe.so    libpafe.so.0.0.8  python2.7  site_ruby
libpafe.la  libpafe.so.0  pypy2.7           python3.4

動作確認

$ cd ~/pasori/libpafe-0.0.8
$ sudo ./tests/pasori_test
PaSoRi (RC-S320)
 firmware version 1.40
Echo test... success
EPROM test... success
RAM test... success
CPU test... success
Polling test... success

udevの設定

  • 60-libpafe.rulesを新規作成する
$ sudo nano /lib/udev/rules.d/60-libpafe.rules
  • 60-libpafe.rules編集内容
60-libpafe.rules
ACTION!="add", GOTO="pasori_rules_end"
SUBSYSTEM=="usb_device", GOTO="pasori_rules_start"
SUBSYSTEM!="usb", GOTO="pasori_rules_end"
LABEL="pasori_rules_start"

ATTRS{idVendor}=="054c", ATTRS{idProduct}=="006c", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="01bb", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="02e1", MODE="0664", GROUP="plugdev"

LABEL="pasori_rules_end"
$ udevadm control --reload-rules
root privileges required
$ sudo udevadm control --reload-rules
$ sudo reboot
  • reboot後sudoなしで実行できることを確認する。
$ ./pasori/libpafe-0.0.8/tests/pasori_test

FeliCaのIDmを読むPythonスクリプト

サンプルはこちらから引用させていただいてます。
引用元のままだとIDmが下4桁しか表示されないため16桁表示させるため一部手を入れさせていただいてます。

# -*- coding: utf-8 -*-

from __future__ import print_function
from ctypes import *

# libpafe.hの77行目で定義
FELICA_POLLING_ANY = 0xffff

if __name__ == '__main__':

    libpafe = cdll.LoadLibrary("/usr/local/lib/libpafe.so")

    libpafe.pasori_open.restype = c_void_p
    pasori = libpafe.pasori_open()

    libpafe.pasori_init(pasori)

    libpafe.felica_polling.restype = c_void_p
    felica = libpafe.felica_polling(pasori, FELICA_POLLING_ANY, 0, 0)

    idm = c_ulonglong() #←16桁受けとるために変更
    libpafe.felica_get_idm.restype = c_void_p
    libpafe.felica_get_idm(felica, byref(idm))

    # IDmは16進表記
    print("%016X" % idm.value) #←16桁表示させるために変更

    # READMEより、felica_polling()使用後はfree()を使う
    # なお、freeは自動的にライブラリに入っているもよう
    libpafe.free(felica)

    libpafe.pasori_close(pasori)

参考

Raspberry Pi + libpafe + Python + ctypesで、FeliCaのIDmを読む

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
  3. You can use dark theme
What you can do with signing up
43