Raspberry Pi 2でNFCタグを読み取って音を鳴らす

2017年3月26日

用意するもの


動作確認環境

  • Raspbian GNU/Linux 8.0 Lite (Jessie)
  • Git 2.1.4 ※今回導入します
  • nfcpy 0.10 ※今回導入します

NFCリーダーでタグを読み取る

こちらの記事を参考にしました。
まずpython-usbパッケージをインストールします。

sudo aptitude install python-usb

gitが入ってない場合はgitパッケージもインストールします。

sudo aptitude install git

nfcpyを導入します。
(本稿公開時点の最新版は0.11ですが、手元の環境では動作確認が取れなかったため0.10を入れています)

git clone -b stable/0.10 https://git.launchpad.net/nfcpy

読み取り試験のためにNFCリーダーを接続します。

以下のコマンドでNFCリーダーを待ち受け状態にします。

sudo nfcpy/examples/tagtool.py

以下のように表示されます。

$ sudo nfcpy/examples/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 **

これで待ち受け状態になりました。
※もしroot権限で実行しなかった場合、以下のエラーが出て処理が終了します。

$ nfcpy/examples/tagtool.py
[nfc.clf] searching for reader on path usb
[nfc.clf.transport] python serial library not found
[nfc.clf] no reader available on path usb
[main] no contactless reader found on usb
[main] no contactless reader available

NFCタグをタッチします。

** waiting for a tag **
Type2Tag 'NXP NTAG203' ID=0454FCXXXXXXXX
NDEF Capabilities:
  readable  = yes
  writeable = yes
  capacity  = 137 byte
  message   = 0 byte

上記のように表示されたら成功です。”ID=0454FCXXXXXXXX”(一部文字を伏せています)の部分がそのタグの固有IDです。
試しに手元のPASMOで試してみると以下のようになりました。

** waiting for a tag **
Type3Tag 'FeliCa Standard (RC-S???)' ID=01120412XXXXXXXX PMM=100B4B42XXXXXXXX SYS=0003

NFCタグを待ち受けるスクリプトを用意する

動作確認で使ったtagtool.pyを5秒に1回実行して、特定のタグを読み取ったら音を鳴らすシェルスクリプトを用意します。

vi nfc_ready.sh

nfc_ready.shは以下の内容にします。
“0454FCXXXXXXXX”の部分はお手元のNFCタグのIDを指定してください。

#/bin/bash
while :
do
  RESULT=`/home/pi/nfcpy/examples/tagtool.py`
  case $RESULT in
  *0454FCXXXXXXXX*)
    mpg321 test_pattern.mp3
    sleep 5s
    ;;
  esac
done

nfc_ready.shに実行権限を付与します。

chmod +x nfc_ready.sh

シェルスクリプトを実行して待ち受け状態にします。

sudo ./nfc_ready.sh

NFCタグをタッチして音が鳴れば成功です。確認が取れたらCtrl+Cでスクリプトを終了させます。おつかれさまでした。
もし音が鳴らずに”ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied”などと表示されている場合はそもそもroot権限で音が鳴るかどうか確認してください。

スクリプトを自動起動して常に待ち受け状態にする

せっかくなので、常に実行されるようsystemdに登録しちゃいましょう。

sudo vi /etc/systemd/system/nfc_ready.service

nfc_ready.serviceファイルは以下の内容にします。

[Unit]
Description=NFC Ready
[Service]
Type=simple
ExecStart=/home/pi/nfc_ready.sh
[Install]
WantedBy=multi-user.target

以下のコマンドでsystemdに登録します。

sudo systemctl start nfc_ready
sudo systemctl enable nfc_ready

不要になったら以下のコマンドでsystemdから無効化できます。

sudo systemctl disable nfc_ready
sudo systemctl stop nfc_ready

関連

Raspberry Pi 2からBluetoothでスピーカーに音を飛ばす
Raspberry Pi 2とnetatmoで室温を声でお知らせ
Raspberry Pi 2を赤外線リモコンで操作可能にする
Raspberry Pi 2をリモコン操作してNHKラジオを聴く
Raspberry Pi 2で実現するスマートハウス

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です