LoginSignup
2
0

More than 1 year has passed since last update.

【Python】Ubuntu x Sony RC-S380でNFCタグを取得する

Posted at

開発環境

  • Ubuntu LTS 20.04
  • Python 3.9
  • nfcpy 1.0.3

パッケージのインストール

pip install nfcpy

コード

main.py
import nfc # import時はnfcであることに注意
import binascii

NFC_READER_ID = "usb:054c:06c3" # Sony RC-S380は全てこのID. lsusbコマンドで確認可能.

class NFCReader:
    def on_connect(self, tag):
        self.idm = binascii.hexlify(tag._nfcid).decode()
        print(f"IDm detected: {self.idm}")
        return True

    def read(self):
        clf = nfc.ContactlessFrontend(NFC_READER_ID)
        try:
            clf.connect(rdwr={"on-connect": self.on_connect}) # タッチされた時のみon_connectメソッドが発火
        finally:
            clf.close()

if __name__ == "__main__":
    client = NFCReader()
    while True:
        client.read()

Ubuntuで実行する際の注意点

Ubuntu環境で上記スクリプトを実行する場合は、予めUbuntuのOSの設定を上書きしておく必要がある。
以下の[方法1] or [方法2]を行うことで、設定を上書きする。

[方法1-1]udevの設定

デフォルトではUSBデバイスにroot権限でしかアクセスできないような設定になっているので、udevの設定を上書きする必要がある。

/etc/udev/rules.d/90-nfc.rules
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06c3", GROUP="plugdev"

※ファイルは新規作成の必要アリ, 再起動の必要アリ

[方法1-2]ポートのブラックリスト登録

UbuntuでSony RC-S380を利用すると、自動で対応するドライバが適用され、それが競合することによってPythonスクリプトが実行できない場合がある。ブラックリストに登録しておくことで、起動時のドライバ読み込みを無効化することができる。

/etc/modprobe.d/blacklist-nfc.conf
blacklist port100

※ファイルは新規作成の必要アリ, 再起動の必要アリ

[方法2]両方の設定をするスクリプトを実行

init.sh
cat << 'EOS' | sudo tee -a /etc/udev/rules.d/90-nfc.rules
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06c3", GROUP="plugdev"
EOS

cat << 'EOS' | sudo tee -a /etc/modprobe.d/blacklist-nfc.conf
blacklist port100
EOS

sudo udevadm control -R

上記スクリプトを実行することで、両方の設定を上書きすることができる。
※再起動の必要アリ

参考記事

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0