sony パソリRC-S320をLinux上でpythonを使ってSuicaのIDmを読み取ってみた

スポンサーリンク

はじめに

秋葉原ハードオフの2号店のジャンクコーナーからICカードを読み取るやつを買ってきました。ほんとはジャンク品を買うつもりはなかったんですが、紫外線LEDを買うだけだったんですがジャンクコーナ0に吸い寄せられてしまう...... goo.gl

製品名はSonyRC-S320で、発売当初は2000円前後ぐらいはしたんでは。ハードオフでは110円で販売されてました。すこし汚れがあって汚いけど、あとで分解して洗浄してやるってことで動作確認してみる。

f:id:shangtian:20220213103507j:plain

目次

環境

バイスの認識

まずは認識するかlsusbで確認してみる。

$ lsusb

f:id:shangtian:20220213104422p:plain

普通に認識している。これはつかえそうな予感

libpafeのインストール

ICカード読み取り器はpythonのライブラリnfcpyを使ってやる記事がたくさん出回っているけれど、残念ながら、このライブラリはRC-S320は対応していないよう。 そこで今回はlibpafeというライブラリを使ってpythonからコントロールしてみる。

libpafeのライブラリのgitは以下のページ

github.com

まずはダウンロードしていくぞ。

$ git clone https://github.com/rfujita/libpafe.git

ダウンロードしたら階層をダウンロードしたファイルに移動して./configure以下のコマンドを実行していく。make installコマンドはsudoで実行しないとエラーになるので注意。ここで詰まりました。

$ cd libpafe
$ ./configure
$ make
$ sudo make install

libpafeでRC-S320が認識されれるかテスト

libpafeのライブラリでちゃんとRC-320が認識されているかテストしてみる。階層を以下testsまで移動して./pasori_testを実行してみる。

$cd /libpafe/tests
$ ./pasori_test

ちゃんと認識していますね。 f:id:shangtian:20220213104452p:plain

suica のID読み取り

それじゃあpythonSuicaIDmを読み取ってみる。コードは以下の記事のそのまま実行しました。助かった〜

qiita.com

from __future__ import print_function
from ctypes import *

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()
    libpafe.felica_get_idm.restype = c_void_p
    libpafe.felica_get_idm(felica, byref(idm))

    print("IDm", "%016X" % idm.value)

    libpafe.free(felica)

    libpafe.pasori_close(pasori)

そいじゃあ、実行してみると

$ python3 simple.py

IDmがしっかりよみとれたぞ!Suica以外にもEdyとか学生証もやってみたけど上手くよみとれました。 今度は残高とか表示させてみるか。 f:id:shangtian:20220213110340p:plain

参考文献

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

PythonでSuicaの残高を取得する(libpafe使用) - Qiita

GitHub - rfujita/libpafe