PaSoRi RC-S330をRaspberryPiから使用する

バイス名が恥ずかしいくらい間違っていたので修正しました(2021.12.31)

名古屋の大須にある佐古前装備さんにいって、

f:id:ueponx:20211209141716p:plain

以下を買ってみました。

f:id:ueponx:20211209234351j:plain

www.sony.jp

佐古前装備さんは秋葉原 ジャンクショップ「神田装備」の系列店となるそうです。オールドPC好きやジャンカーならおすすめです。 店内に入るには予約が必要なので注意、また営業時間内でも夕方にはビルが閉まってしまうので地下からはいるということだけ注意です。 予約ページはこのエントリの終りにいれておきました。

今回購入した、後継機種のRC-S380(現行機種)は以前から使用しているのですが、古い世代のものは規格が少し違っているということもあったりして使用したことはありませんでした。今回はダメ元ではありましたが使えるかどうかを試してみたいと思います。

結論

結論早すぎるだろw。RaspberryPiから使用できるかを試したのですが、先に結論を書いておきたいと思います。

RC-S330

  • nfcpyからは使用できないっぽい
  • libpafeを使えば使用可能

なぜ、結論からかいたかというとnfcpyの公式情報ではRC-S330には対応していると書いてあるのですが実際は動かないようです。 デバイスとしては認識はしてくれます。(これがあったのでいろいろ試しましたが、結局理由分からず)

対応デバイス一覧

nfcpy.readthedocs.io

バイスの情報

●対応OS
Windows(R) 7 Starter 32ビット(x86)/ Home Basic 32ビット(x86),64ビット(x64)/ Premium 32ビット(x86),64ビット(x64)/ Professional 32ビット(x86),64ビット(x64)/ Enterprise 32ビット(x86),64ビット(x64)/ Ultimate 32ビット(x86),64ビット(x64)

※ Windows7でご利用いただくには、最新版のFeliCaポートソフトウェアおよびオリジナルソフトウェアが必要です。詳しくはFelicaポート/パソリサポートページ(www.sony.co.jp/Products/felica/pcrw/)をご覧ください

Windows Vista(R) Home Basic SP1,SP2 32ビット(x86),64ビット(x64)/ Home Premium SP1,SP2 32ビット(x86),64ビット(x64)/ Business SP1,SP2 32ビット(x86),64ビット(x64)/ Enterprise SP1,SP2 32ビット(x86),64ビット(x64)/ Ultimate SP1,SP2 32ビット(x86),64ビット(x64)

Windows(R) XP Home Edition SP3/ Professional SP3 32ビット(x86)/ Media Center Edition 2005(UR2) SP3

●対応ブラウザ
Internet Explorer 6.0 SP3/ 7.0/ 8.0

●PLAYSTATION(R)3

※ 対応システムソフトウェアのバージョンについては、http://www.sony.co.jp/Products/felica/pcrw/をご確認ください

PaSoRiシリーズのデバイスの違いは以下のページにあります。RC-S320RC-S330の間で大きく仕様変更がありましたが、Windows10でもサポートされているようです。

www.sony.co.jp

今回使用した環境

  • RaspberryPi 3B
  • RaspberryPi OS
  • Python3(3.7.3)
  • pip3(18.1)
$ uname -a
Linux raspberrypi 5.10.17-v7+ #1414 SMP Fri Apr 30 13:18:35 BST 2021 armv7l GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

バイスの認識

バイスはUSBポートに挿せば自動で認識してくれます。 認識はdmesgコマンドやlsusbコマンドで認識の確認が可能です。

$ dmesg
(略)
[  343.832253] usb 1-1.2: USB disconnect, device number 4
[  370.241601] usb 1-1.2: new full-speed USB device number 6 using dwc_otg
[  370.519654] usb 1-1.2: New USB device found, idVendor=054c, idProduct=02e1, bcdDevice= 1.30
[  370.519687] usb 1-1.2: New USB device strings: Mfr=1, Product=0, SerialNumber=0
[  370.519708] usb 1-1.2: Manufacturer: Sony

$ lsusb
Bus 001 Device 006: ID 054c:02e1 Sony Corp. FeliCa S330 [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. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

バイス名もちゃんとでてきます。この表示がでなかったら、ハードの故障ですね。

nfcpyを利用しての動作テスト(動作しませんでしたので興味のない方は読み飛ばしてください)

# nfcpyモジュールのインストール
$ pip3 install nfcpy

# 認識状態の確認 
$ python3 -m nfc

# 実行後に表示される以下のコマンドを実行する
$ sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"02e1\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
$ sudo udevadm control -R

# 再起動
$ sudo reboot

# 認識状態の確認 
$ python3 -m nfc

ドキュメント通りであればこれで、OKのはずなのですが動作しません。接続されたシリアルポート関係のエラーが出てうまくいっていないようです。シリアルデバイスの自動認識をやめて、シリアルデバイスの指定をしましたが、動作しません。

公式ドキュメントでもRC-S330は対応しているとかいてあるのですが…。 ちなみに現在現行で販売しているRC-S380に関しては上記の設定で問題なく動作しますので、やり方自体は問題ないように思われます。

libnfclibpafeを使用しての動作テスト

もう一つのやり方を試してみます。現行のデバイスでは使用できないのですが、RC-S320RC-S330ではlibnfclibpafeを使用することでFeliCaの内容を読みだすことができるようです。そこで、こちらの導入を行ってみます。

手順としては以下のような流れになります。

  • libnfcのインストール
  • libpafeのインストール
  • ライブラリ(SharedObject)のロード設定

libnfcのインストール

以下を参考にインストールを行っていきます。

github.com

$ sudo apt install libusb-dev
$ sudo apt install libpcsclite-dev
$ wget https://github.com/nfc-tools/libnfc/releases/download/libnfc-1.8.0/libnfc-1.8.0.tar.bz2
$ tar jxvf libnfc-1.8.0.tar.bz2 
$ cd libnfc-1.8.0/
$ ./configure
$ make
$ sudo make install

インストールが終わったら以下のファイルを編集して

$ sudo vim /etc/modprobe.d/raspi-blacklist.conf 

以下の2行を追記していきます。

/etc/modprobe.d/raspi-blacklist.conf

blacklist pn533
blacklist nfc

libpafeのインストール

以下を参考にインストールを行っていきます。

hito.music.coocan.jp

$ wget http://hito.music.coocan.jp/pasori/libpafe-0.0.8.tar.gz
$ tar zxvf libpafe-0.0.8.tar.gz 
$ cd libpafe-0.0.8/
$ ./configure 
$ make
$ sudo make install

ライブラリ(SharedObject)のロード設定

インストールが終わって以下のように実行しても動作しません。

# デバイス認識のテスト
$ sudo pasori_test 

今回はライブラリ(Shared Object=>WindowsでいうDLLのようなもの)をインストールしたので、ロードできるパスなどに存在しないと実行できないのです。今回インストールしたライブラリは/usr/local/libにインストールされていますので、それを実行時にロードできる場所として設定をする必要があります。

# 実行ファイルからロードされるライブラリのパスを表示
$ ldd /usr/local/bin/pasori_test 

実行するとlibpafe.so.0の項目だけが設定されていないことがわかります。そのため、以下の処理を行ってライブラリパスを追加していきます。

# ライブラリパスを追加
$ sudo vim /etc/ld.so.conf.d/usr-local-lib.conf

ファイルを作成して、以下の1行を追記します。

/etc/ld.so.conf.d/usr-local-lib.conf

/usr/local/lib

その後、ライブラリパスの設定を再読み込みするために以下のような処理を行います。

# ライブラリパスの設定を再読み込み
$ sudo ldconfig -v

# ライブラリのパス再確認。ここで設定値が反映できていればOK
$ ldd /usr/local/bin/pasori_test 
        linux-vdso.so.1 (0x7ec8b000)
        /usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so => /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so (0x76ef4000)
        libpafe.so.0 => /usr/local/lib/libpafe.so.0 (0x76ecc000)
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76d7e000)
        libusb-1.0.so.0 => /lib/arm-linux-gnueabihf/libusb-1.0.so.0 (0x76d59000)
        /lib/ld-linux-armhf.so.3 (0x76f09000)
        libudev.so.1 => /lib/arm-linux-gnueabihf/libudev.so.1 (0x76d29000)
        libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76cff000)
        librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x76ce8000)

上記のようにlibpafe.so.0 => /usr/local/lib/libpafe.so.0 (0x76ecc000)などと値が履いていればOKです。あとはデバイスの認識、Felicaの情報が取得できれば成功です。

# デバイス認識のテスト
$ sudo pasori_test 

# FeliCaカードの情報取得
$ sudo felica_dump 

f:id:ueponx:20211210001718p:plain

おわりに

佐古前装備さんにいってRC-S330を購入してRaspberryPiで使えるか試してみたよっていうお話でした。在庫があればもう少し購入してもいいかも。SonyさんからWindows10用のドライバ・アプリの提供はあるようなので、そちらの実験をしても良かったのかもしれませんが、プログラミング大変そうなのでRaspberryPiまでの検証でとどめたいと思います。

f:id:ueponx:20211210002723p:plain

割と時間があるときにはお店に行ってみていますが、故障品を修理できるほどの能力はないので、たまにこういうものを購入して実験してみようと思っています。

ちなみに佐古前装備さんは入店は予約が必要なので、興味のある方は以下から予約して来店してください。

airrsv.net