Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。
Raspberry Pi にRaspbianを入れて、SONY非接触型カードリーダーRC-S380を使えるところまでご紹介します。
次にDisplay-O-Tron HATを繋いで結果を表示させるようにします。何に使うのかはまだ思案中・・・。
今回の環境
用意した物は以下です。
- Raspberry Pi Zero WH
- SONY非接触ICカードリーダー/ライター PaSoRi RC-S380
- OSOYOO(オソヨー) 電子工作キット (改良版)
- サンワサプライ NFCタグ(10枚入り)




- Display-O-Tron HAT → 壊れた?ためLCDへ変更
- USB電源アダプター
- USB変換ケーブル(100円ショップ)
3B+などが余っていなかったので、余っていたZeroWにしました。また、これまた利用していなかったDisplay-O-Tron HATのLCDディスプレイを結果表示などに利用します。
非接触型のカードリーダーはRaspbianでの利用実績からSONY RC-S380にしました。約2,500円前後で購入可能です。
Display-O-Tron HATはPimoroniで購入可能~~です。~~でした。

追記 実はZero系で認識しなくなったか、故障したのかHAT自体が認識しませんでした。
そのためLCDキャラクタディスプレイに変更することにしました。pHATで表示は行いません。

nfcpyのインストール
NFCを読み書きできるアプリケーションとして、nfcpyがあります。先ずはこれのインストールから始めます。
インストール方法は2通りあります。
- pipコマンドでのインストール
- gitHubからダウンロードしてインストール
真っ新な状態で行うため、pip環境もなく、gitコマンドも使えないため、どちらにしてもpipかgitのインストールから始めないとなりません。
結果的にgitHubにあるサンプルファイルを使いたいので、今回はgitHubから導入します。
https://github.com/nfcpy/nfcpy
・使いたいサンプルファイル

gitのインストール
git cloneするために先ずはgitをインストールします。
sudo apt-get install git
これでgitコマンドが使えます。続けてgitからファイルを持ってきます。
git clone
git clone https://github.com/nfcpy/nfcpy.git
管理者権限は(sudo)は要りません。必要なファイルがコピーされます。
インストール
ダウンロードできたnfcpyディレクトリにセットアップファイルがあります。
sudo python ~/nfcpy/setup.py install
——もしくは、ホームから移動して実行
cd nfcpy
sudo python setup.py install

これで完了です。
■Pi 5は8GBモデルがオススメ
カードリーダーの認識
USBにカードリーダーのS380を接続します。
次のコマンドで認識されているのか確認します。
python -m nfc
エラーが出ると思います。

python -m nfc
No handlers could be found for logger "nfc.llcp.sec"
This is the 0.13.5 version of nfcpy run in Python 2.7.13
on Linux-4.14.79+-armv6l-with-debian-9.4
I'm now searching your system for contactless devices
** found usb:054c:06c3 at usb:001:002 but access is denied
-- the device is owned by 'root' but you are 'pi'
-- also members of the 'root' group would be permitted
-- you could use 'sudo' but this is not recommended
-- better assign the device to the 'plugdev' group
sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
sudo udevadm control -R # then re-attach device
I'm not trying serial devices because you haven't told me
-- add the option '--search-tty' to have me looking
-- but beware that this may break other serial devs
Sorry, but I couldn't find any contactless device
カードリーダーは見つかるもののアクセル権限がrootだからpiではアクセスできませんと表示されました。以下のコマンドで’plugdev’のグループに所属させるように促されます。
とても親切ですね!
sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"0000\", ATTRS{idProduct}==\"0000\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'(IDなどは個別に違いますので、0000にしてあります。実行したターミナルから全部をコピーしてください)
sudo udevadm control -R # then re-attach device
言われた通りに2行をコピペして実行してください。自分のターミナルからコピーしてくださいね。
一旦再起動してその後に実行すると以下のような実行結果になっていると思います。

今度はSONY RC-S380/Pと出ています。また、エラーもありません。
これで認識もOKです。
読み取りテスト
ここまでで読み取るアプリケーションのnfcpyの準備ができ、カードリーダーS380も認識されました。実際に読み取りテストをします。
サンプルファイルにあるpython tagtool.pyを実行してみます。
場所はこちら。
cd ~/nfcpy/examples/
実行すると ** waiting for a tag ** と出て止まりますので、その後にNFCタグをかざしてください。
python tagtool.py

Type2Tagで、IDも表示されました。
これで成功です。
エラーの場合
「This script requires Python 3」というエラーが出て出来なかった場合は、Python3で実行しないとなりませんから、
python3 tagtool.py
それでもエラー・・・
Traceback (most recent call last):
File "tagtool.py", line 29, in <module>
import ndef
ModuleNotFoundError: No module named 'ndef'
ndefがない?!
これは最初にpipでインストールしましたが、pip3でインストールしないとならないためです。(イイ加減にPythonは3で統一してくれ・・・)
sudo pip3 install nfcpy
これでOKです。
waonも試してみました。

使ってみて
他のサイトでも非接触型カードリーダーを色々な使い方がされています。
ここでは準備としてインストールとテスト読み込みまでご紹介しました。この後、LCDディスプレイを手軽に利用したいと思ったDisplay-O-Tron HATに文字や色で出力させ、システムのスイッチャーとして使ってみたいと思います。
NFCタグに振られているIDによって条件を変えるプログラムだけで可能です。
Pythonで読み取られたIDによってSHELLコマンドを実行するだけでもOKです。
次はDisplay-O-Tron HATに表示する部分だけご紹介したいと思います。
LCDキャラクタディスプレイに変更しました。
NFCとLCDを連携できました。





