Raspberry PiでFelicaのIDmを表示する

More than 1 year has passed since last update.


概要

簡単な入室管理のために、まずはRaspberry PiとPaSoRiでカードのIDmを取得する.


動作環境


  • Mac OSX(EI Capitan)

  • Raspberry Pi2 Model B

  • PaSoRi RC-S380P


Raspberry Piセットアップ


OSダウンロード

日本のミラーサイトからダウンロード

https://www.raspbian.org/RaspbianMirrors


イメージのインストール

https://www.raspberrypi.org/documentation/installation/installing-images/mac.md


SD cardの刺さっている場所を調べる

$ diskutil list

/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Macintosh HD 499.2 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *32.2 GB disk1
1: Windows_FAT_32 NO NAME 32.2 GB disk1s1

今回はdisk1。

違う人は、これ以降のdisk1を自分の相応しい値に変更。


アンマウントしておく

$ diskutil unmountDisk /dev/disk1


SD cardにデータをコピー

$ sudo dd bs=1m if=2015-11-21-raspbian-jessie.img of=/dev/rdisk1

Ctrl+Tを押すと途中経過が見える


動作確認

Micro SDカードを基盤に刺して、優先LANを接続し、USBから給電


ip 確認し、ssh接続

$ arp -a

$ ssh pi@[ipアドレス] #パスワードはraspberry


初期設定

$ sudo raspi-config


Expand Filesystem

3.5GBしか認識してないので、必要なら拡張を行う


Change User Password

piのパスワード変更(多分passwdでも大丈夫)


Internationalisation Options

Timezoneを変更 Asia/Tokyoへ


リポジトリサーバーの変更

/etc/apt/sources.list を編集

ミラーリストをコメントアウトし、日本のリポジトリサーバーを追加

deb http://ftp.jaist.ac.jp/raspbian jessie main contrib non-free rpi

$ sudo apt-get update

$ sudo apt-get upgrade


MicroSDカードの寿命を延ばす

以下を参考にさせてもらった

http://denshikousaku.net/extend-life-expectancy-of-raspberry-pi-sd-card


スワップをゼロにしておく

In Raspberry PI

pi@raspberrypi:~ $ free

total used free shared buffers cached
Mem: 948108 158008 790100 12796 13480 84156
-/+ buffers/cache: 60372 887736
Swap: 102396 0 102396
pi@raspberrypi:~ $ sudo swapoff --all
pi@raspberrypi:~ $ free
total used free shared buffers cached
Mem: 948108 158604 789504 12796 13500 84648
-/+ buffers/cache: 60456 887652
Swap: 0 0 0

再起動後もスワップを設定しないようにする

$ sudo apt-get remove dphys-swapfile

電源をぶっこぬいてチェック

pi@raspberrypi:~ $ free

total used free shared buffers cached
Mem: 948108 157400 790708 12748 13448 83668
-/+ buffers/cache: 60284 887824
Swap: 0 0 0


PaSoRi

以下の記事を参考にさせてもらいました

http://blog.shibayan.jp/entry/20150427/1430067533


PaSoRiを接続

pi@raspberrypi:~ $ lsusb 

Bus 001 Device 004: ID 054c:06c3 Sony Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Sonyデバイスを発見


nfcpyをインストール

http://nfcpy.readthedocs.org/en/latest/topics/get-started.html

$ sudo apt-get install python-pip

$ sudo pip2 install --upgrade pip
$ sudo pip2 install nfcpy
$ pip show nfcpy
Name: nfcpy
Version: 0.11.1
Summary: Python module for Near Field Communication
Home-page: https://launchpad.net/nfcpy
Author: Stephen Tiedemann
Author-email: stephen.tiedemann@gmail.com
License: EUPL
Location: /usr/local/lib/python2.7/dist-packages
Requires: pyserial, libusb1

pipを更新してインストール


IDmの取得(サンプルを実行してみる)

$ git clone https://github.com/nfcpy/nfcpy.git

$ git checkout stable/0.11
$ cd nfcpy
$ sudo python examples/tagtool.py show
[nfc.clf] searching for reader on path usb
[nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:001:005
** waiting for a tag **

試しにSuica をタッチすると、IDmとかが表示される


sudoを使わずに実行できるようにする

lsusb で確認したReaderのIDをつかって実行すると、打つべきコマンドが表示される(nfcpy 0.10以降)

$ python examples/tagtool.py --device usb:054c:06c3

[nfc.clf] searching for reader on path usb:054c:06c3
[main] access denied for device with path usb:054c:06c3
[main] first match for path usb:054c:06c3 is usb:001:005
[main] usb:001:005 is owned by root but you are pi
[main] members of the root group may use usb:001:005
[main] you may want to add a udev rule to access this device
[main] sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
[main] no contactless reader available

指定されたコマンドを実行した後、ReaderのUSBを抜き差しをするとsudo をつけなくても実行できるようになります。


example以外で実行


simple sample

IDmだけとれればいいので、exampleを参考にIDmだけとるスクリプトを作成.

止めるためには、別ターミナルからプロセスをkillする必要あり

とりあえず、SuicaのIDmはとれました

import binascii

import nfc

class MyCardReader(object):

def on_connect(self, tag):
print "touched"
self.idm = binascii.hexlify(tag.idm)
return True

def read_id(self):
clf = nfc.ContactlessFrontend('usb')
try:
clf.connect(rdwr={'on-connect': self.on_connect})
finally:
clf.close()

if __name__ == '__main__':
cr = MyCardReader()
while True:
print "touch card:"
cr.read_id()
print "released"
print cr.idm