Raspberry Pi 3 と Sony の RC-S380 というカードリーダーの組み合わせで FeliCa カードを読みたいのだが、けっこう同じことをしている人は多くてネット上に情報はたくさんある。
そこで、「RaspberryPiで!SONYのPaSoRi(RC-S380)で(NFC)Felica情報を読み取る!(KOKENSHAの技術ブログ)」という記事など参考に一応セットアップしてみたのだが、最後にサンプルプログラムを実行すると、
pi@raspberrypi:~/test/pasori/nfcpy/examples $ sudo python tagtool.pyThis script requires Python 3
と、「Python 3 のプログラムやで」と怒られる。
今回の OS(Raspbian GNU/Linux 10)には、Python 2.7.16 と Python 3.7.3 が共存している。
そこで「じゃあ」と、Python 3 で実行すると、
pi@raspberrypi:~/test/pasori/nfcpy/examples $ sudo python3 tagtool.pyTraceback (most recent call last):File "tagtool.py", line 29, in <module>import ndefModuleNotFoundError: No module named 'ndef'
ndef モジュールが無いと怒られる。
どうすりゃいいの???(^^;
しばし考えたが、ndef モジュールを Python 3 用にセットアップするのが一番近道だと思ったので、以下のとおり対応。
・RC-S380 が認識されているか確認(ま、念の為)
pi@raspberrypi:~ $ lsusb|grep SonyBus 001 Device 004: ID 054c:06c3 Sony Corp. RC-S380
・nfcpyは導入されているか?(一緒に導入される libusb1 を見てみる)
pi@raspberrypi:~ $ pip3 list|grep usbpi@raspberrypi:~ $ pip list|grep usblibusb1 1.7.1
Python 2.7.16 の方には入っているのに、Python 3.7.3 の方には入ってない。Python 3.7.3 の pip(Python のサードパーティー製パッケージを管理するためのツール)を使ってインストールが必要。ちなみに、Python 3.7.3 用の pip は pip3 という名でインストールされている。
・Python 3.7.3 の方にも nfcpy を導入
pi@raspberrypi:~ $ sudo pip3 install nfcpyLooking in indexes: https://pypi.org/simple, https://www.piwheels.org/simpleCollecting nfcpyCache entry deserialization failed, entry ignoredCache entry deserialization failed, entry ignoredDownloading https://files.pythonhosted.org/packages/7e/ed/3b3a00ada844f8a9229c8a79f460a1a13e870b767a1eb0ee0caf99740e9d/nfcpy-1.0.3-py3-none-any.whl (186kB)100% |████████████████████████████████| 194kB 794kB/sRequirement already satisfied: pyserial in /usr/lib/python3/dist-packages (from nfcpy) (3.4)Collecting libusb1 (from nfcpy)Cache entry deserialization failed, entry ignoredCache entry deserialization failed, entry ignoredRetrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /simple/libusb1/Downloading https://www.piwheels.org/simple/libusb1/libusb1-1.7.1-py3-none-any.whl (59kB)100% |████████████████████████████████| 61kB 96kB/sCollecting pydes (from nfcpy)Cache entry deserialization failed, entry ignoredCache entry deserialization failed, entry ignoredCache entry deserialization failed, entry ignoredDownloading https://www.piwheels.org/simple/pydes/pyDes-2.0.1-py2.py3-none-any.whlCollecting ndeflib (from nfcpy)Cache entry deserialization failed, entry ignoredCache entry deserialization failed, entry ignoredCache entry deserialization failed, entry ignoredDownloading https://files.pythonhosted.org/packages/c9/80/bbc9a4818cd74807f914d225611cd724d8c0e56237b952a9a4aa6d583f5c/ndeflib-0.3.3-py2.py3-none-any.whl (56kB)100% |████████████████████████████████| 61kB 792kB/sInstalling collected packages: libusb1, pydes, ndeflib, nfcpySuccessfully installed libusb1-1.7.1 ndeflib-0.3.3 nfcpy-1.0.3 pydes-2.0.1
なんか、やたらと「Cache entry deserialization failed, entry ignored」と出てるが???最後は Successfully installed で終わってるんで良さ気。
・ちゃんと導入されたか見てみる
pi@raspberrypi:~/test/pasori $ pip3 list|grep usblibusb1 1.7.1pi@raspberrypi:~/test/pasori $ pip3 list|grep nfnfcpy 1.0.3
大丈夫そう。
で、FeliCa カードを読むサンプルプログラムを実行してみる。
pi@raspberrypi:~/test/pasori/nfcpy/examples $ sudo python3 tagtool.py[nfc.clf] searching for reader on path usb[nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:001:004** waiting for a tag **Type3Tag 'FeliCa Lite-S (RC-S966)' ID=012E4CD257C6A091 PMM=00F1000000014300 SYS=88B4
お。ちゃんと、FeliCa カード読んで ID も捕まえてるやん。OK、OK。
コメントする