デバイス名が恥ずかしいくらい間違っていたので修正しました(2021.12.31)
名古屋の大須にある佐古前装備
さんにいって、
以下を買ってみました。
佐古前装備
さんは秋葉原 ジャンクショップ「神田装備」
の系列店となるそうです。オールドPC好きやジャンカーならおすすめです。
店内に入るには予約が必要なので注意、また営業時間内でも夕方にはビルが閉まってしまうので地下からはいるということだけ注意です。
予約ページはこのエントリの終りにいれておきました。
今回購入した、後継機種のRC-S380
(現行機種)は以前から使用しているのですが、古い世代のものは規格が少し違っているということもあったりして使用したことはありませんでした。今回はダメ元ではありましたが使えるかどうかを試してみたいと思います。
結論
結論早すぎるだろw。RaspberryPi
から使用できるかを試したのですが、先に結論を書いておきたいと思います。
nfcpy
からは使用できないっぽいlibpafe
を使えば使用可能
なぜ、結論からかいたかというとnfcpy
の公式情報ではRC-S330
には対応していると書いてあるのですが実際は動かないようです。
デバイスとしては認識はしてくれます。(これがあったのでいろいろ試しましたが、結局理由分からず)
対応デバイス一覧
デバイスの情報
●対応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-S320とRC-S330の間で大きく仕様変更がありましたが、Windows10でもサポートされているようです。
今回使用した環境
- 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に関しては上記の設定で問題なく動作しますので、やり方自体は問題ないように思われます。
libnfc
とlibpafe
を使用しての動作テスト
もう一つのやり方を試してみます。現行のデバイスでは使用できないのですが、RC-S320
やRC-S330
ではlibnfc
とlibpafe
を使用することでFeliCa
の内容を読みだすことができるようです。そこで、こちらの導入を行ってみます。
手順としては以下のような流れになります。
- libnfcのインストール
- libpafeのインストール
- ライブラリ(SharedObject)のロード設定
libnfcのインストール
以下を参考にインストールを行っていきます。
$ 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のインストール
以下を参考にインストールを行っていきます。
$ 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
おわりに
佐古前装備
さんにいってRC-S330
を購入してRaspberryPi
で使えるか試してみたよっていうお話でした。在庫があればもう少し購入してもいいかも。SonyさんからWindows10用のドライバ・アプリの提供はあるようなので、そちらの実験をしても良かったのかもしれませんが、プログラミング大変そうなのでRaspberryPiまでの検証でとどめたいと思います。
割と時間があるときにはお店に行ってみていますが、故障品を修理できるほどの能力はないので、たまにこういうものを購入して実験してみようと思っています。
ちなみに佐古前装備
さんは入店は予約が必要なので、興味のある方は以下から予約して来店してください。