ラズパイでPaSoRi(パソリ)を使ってNFCカード読み取り

ラズパイでPaSoRi(パソリ)を使ってNFCカード読み取り

Pythonでnfcpyパッケージを使えばラズパイでもNFCカードの読み取りができる。
前に挑戦した時はrootでしかも無理やりシステム側にnfcpyをインストールしてた。色々調べたら一般ユーザーでも使えるようになった。そのメモ書き。

使ったもの

  • ラズベリーパイ3
    • OSバージョンはTrixie
    • Lite版でもどちらでも良い。
    • ラズパイ4などでもできるはず
  •  ソニー パソリ RC-S380/P
    • 他のパソリで動くか不明。

まずはPython仮想環境を構築

cd ~
python3 -m venv --system-site-packages ~/python-env

仮想環境に入ってnfcpyをpipでインストール

source python-env/bin/activate
pip install nfcpy

下記コマンドを実行してnfcpyからパソリが見えているか確認。

python3 -m nfc

実行結果。パソリにアクセスする権限がないので一般ユーザーでもアクセスできるようにudevのルールを追加しろとか言ってくる。

(python-env) tanakei@pi3:~ $ python3 -m nfc
This is the 1.0.4 version of nfcpy run in Python 3.13.5
on Linux-6.12.47+rpt-rpi-v8-aarch64-with-glibc2.41
I'm now searching your system for contactless devices
** found usb:054c:06c3 at usb:001:004 but access is denied
-- the device is owned by 'root' but you are 'tanakei'
-- 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

自分の環境だと usb:054c:06c3とか usb001:004だけど、ユーザーごとに違うかも。
とりあえず指示のとおり下記コマンドを実行してルールのファイルを作成する。
※追記参照。後述のMODEを最初から入れます。

 sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'

/etc/udev/rules.d に nfcdev.ruleというファイルができる。中身はこうなってるはず。catコマンドを実行して確認。

(python-env) tanakei@pi3:~ $ cat /etc/udev/rules.d/nfcdev.rules
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06c3", GROUP="plugdev"

このファイルの中の末尾にMODE="0666"を追加する。
もし==や=の後の文字列がダブルクォーテーションで囲われてない場合は付ける。
編集するときはnanoを使う。別のエディタでも可。

sudo nano /etc/udev/rules.d/nfcdev.rules

編集結果

(python-env) tanakei@pi3:~ $ cat /etc/udev/rules.d/nfcdev.rules
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06c3", GROUP="plugdev", MODE="0666"

次はこのコマンドを実行。
その後パソリを抜き差しする。

sudo udevadm control -R 

もう一度下記コマンドを実行してnfcpyからパソリが見えているか確認。

python3 -m nfc

実行結果。うまくできていればこうなる。

(python-env) tanakei@pi3:~ $ python3 -m nfc
This is the 1.0.4 version of nfcpy run in Python 3.13.5
on Linux-6.12.47+rpt-rpi-v8-aarch64-with-glibc2.41
I'm now searching your system for contactless devices
** found SONY RC-S380/P NFC Port-100 v1.11 at usb:001:004
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

ここまでできればセットアップ完了です。


ちゃんと読み取れるか確認するならnfcpyのサンプルプログラムを実行すると良い。ホームディレクトリにsrcディレクトリを作り、githubからダウンロードしてくる。ダウンロードできたらサンプルコードのあるディレクトリに移動。

cd ~
mkdir src
cd src
git clone https://github.com/nfcpy/nfcpy.git
cd nfcpy/examples/

サンプルコードのtagtool.pyを実行。
NFCカードをかざすと読み取れる。動作確認用に This is a sample text. を書き込んだNFCカードをかざした結果はこうなった。

(python-env) tanakei@pi3:~/src/nfcpy/examples $ 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:006
** waiting for a tag **
Type2Tag 'NXP NTAG215' ID=045B64DA216E81
NDEF Capabilities:
  readable  = yes
  writeable = yes
  capacity  = 492 byte
  message   = 29 byte
NDEF Message:
record 1
  type = 'urn:nfc:wkt:T'
  name = ''
  data = b'\x02enThis is a sample text.'
(python-env) tanakei@pi3:~/src/nfcpy/examples $

おわり

※追記

nanoでいちいち編集するより下記のコマンドで最初からmode="0666"を入れてしまうと手間が省ける。

sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\", MODE=\"0666\" >> /etc/udev/rules.d/nfcdev.rules.old'

この続き : 0字 / 画像 0枚
100

会員登録 / ログインして続きを読む

関連記事

記事を書いた人

甘いもの大好きメタボ猫。マイペースなのはしょうがない。 nostr:npub10zeurmg22wc89l8m3npw9cyu45cun0lvs6w3ep69cdpa25pna65s0994qz

SNSにシェア

このクリエイターの人気記事

【Umbrel】BlueWallet Lightning & tailscaleで便利で快適なLightningウォレットを作ろう!

593

【Umbrel】OCEANからマイニング報酬をライトニングで受け取るには【Sparrow Wallet】

381

Bitcoin CPUソロマイニング(マイニングプール無し)

357