用意するもの
- Raspberry Pi 2 Model B
- ICカードリーダー SONY RC-S380
- サンワサプライ NFCタグ(10枚入り) 白 MM-NFCT
※ご家庭にあるSuicaなどのICカードでも代用できると思います
- 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
** 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で実現するスマートハウス