Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
41
Help us understand the problem. What is going on with this article?
@t114

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

More than 3 years have passed since last update.

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を読む

41
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
t114
基本的に自分用の備忘録メモとして使っているため、細かいところはご容赦ください。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
41
Help us understand the problem. What is going on with this article?