Gadget No.2 電子マネーICカードリーダー

 
 


仕様

SONY製Pasoriと接続し、Edy, WAON等の電子マネーカードや、SUICAなどの交通家ICカードの残高を表示する。

確認済ICカード: ICOCA, Edy, WAON, NANACO
おそらく読めると思われる他のICカード: 交通系ICカード全般

 

必要物

 

必要物は以下です。
Pasoriは、これから使用するライブラリ”nfcpy”が対応しているものなら大丈夫です。
ここでは、Pasori RC-S380/Pを使用しています。

“nfcpy”が対応しているPasori一覧は以下サイトから確認ください。
http://nfcpy.readthedocs.io/en/latest/overview.html

 

No. 必要物
 1.  Raspberry pi 2 model B
 2.  適当なMicro USB ケーブル
 3.  適当なLANケーブル
 4.  適当なUSB電源
 5.  16桁×2行LCDディスプレイ+ピッチ変換キット (型名AE-AQM1602)
 6.  Pasori
 7.  タクトスイッチ
 8.  ブレッドボード
 9.  ジャンパワイヤ

※ブレッドボードではなく、基盤にはんだ付けした方が見栄えは良いです。

その他、あると良いものは以下です。

No. あると良いもの
 1.  ヒートシンク(熱対策)
 2.  ケース(ほこり対策)

 

 結線

 

Pin assignment

 Pasoriとの接続: USBで接続する。

Pin assignment

 LCDディスプレイのピン番号

LCD_display2

 

結線:

1)LCD ディスプレイとRaspberry pi 2 model B

LCD ディスプレイ
Raspberry pi mode B
① 3.3Vcc
---
Pin-1  3.3Vcc
② SCL
---
Pin-5  SCL
③ SDA
---
Pin-3  SDA
④ GND
---
Pin-9 Ground  (※)

※Ground端子であればどこに接続しても構わない

 

 準備

以下のページの内容を行っておいてください。

Raspberry pi 2 model Bセットアップ
LCDディスプレイをつける
シャットダウンボタンをつける

 Pasoriと通信するライブラリ”nfcpy”をインストール

 

公式ページは以下です。
http://nfcpy.readthedocs.io/en/latest/topics/get-started.html

ここに書かれてある操作を行います。(2016年6月時点)
現段階のnfcpyバージョンは、0.11です。

 

1) libusbのインストール

Pasoriと通信するためのUSBドライバをインストールします。

 $ pip install libusb1 pyserial

 

2) nfcpyのインストール

ICカードの情報を解析するライブラリ”nfcpy”をインストールします。

 $ sudo apt-get install bzr
$ mkdir Work/Software/nfcpy  (※フォルダ名は任意)
$ cd Work/Software/nfcpy
$ bzr branch lp:nfcpy

※結構時間がかかります。

 

3) Raspberry Pi とPasoriを接続

Raspberry PiのUSBコネクタにPasoriを接続します。

 

3) nfcpyに付属のサンプルを実行

ICカードの情報を表示するサンプルを実行します。

 $ cd nfcpy/trunk
$ sudo python examples/tagtool.py show

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

pasori_sample1

Pasoriの上にICカードをかざすと、以下のように表示されました。

 

pasori_sample2

 

 カード残高読み取りアプリ作成

今回はPythonで行います。

 

1) プログラム格納用フォルダを探す

WinSCPを起動し、home/piの下にある、Work/Software/nfcpy/trunk/examplesフォルダを探します。

2) ソースファイルをコピー

Work/Software/nfcpy/trunk/examplesフォルダに、以下のファイルを格納します。

※お願い!ファイルダウンロードの際、Twitterで一言呟いていただけると大変嬉しいです!

 

zipファイルがダウンロードできますので、解凍してください。
以下1ファイルが作成されます。
ToolReadCard.py

このファイルをWork/Software/nfcpy/trunk/examplesにコピーしてください。

 

 

3) アプリケーションを実行

以下を実行すると、PasoriとICカードの接続待ちになります。

 $ sudo python ToolReadCard.py

 

Pasoriの上に、ICカードを乗せると、以下のように表示します。

[TeraTerm]

カードのブロック情報と、カード種別、残金に該当する配列の切り出しを表示します。

Python_CardReader1

[LCDディスプレイ]

カード種別、残金を表示します。

Nanakoread

 

5) アプリケーション終了

ICカード情報を一度読み取ると、アプリケーションは自動的に終了します。

 

 カードを連続して読めるようにする

このままでは、一度カード残高を読み取ると、アプリケーションが終了してしまいます。

求める仕様は、Raspberry Piをカードリーダーとして使う、です。
という事は、一枚で終わり、では少し寂しいものがあります。

Raspberry Pi起動中、Pasoriにカードをかざすと即、残高を表示してくれる。

そんなアプリを目指します。

 

1)カードがデタッチされるまで待つアプリを作る

ICカードにアクセスし続け、アクセスができなくなったらデタッチされた、と認識する仕様で作りました。

 

2) ソースファイルをコピー

Work/Software/nfcpy/trunk/examplesフォルダに、以下のファイルを格納します。

※お願い!ファイルダウンロードの際、Twitterで一言呟いていただけると大変嬉しいです!

zipファイルがダウンロードできますので、解凍してください。
以下1ファイルが作成されます。
ToolWaitToRemove.py

このファイルをWork/Software/nfcpy/trunk/examplesにコピーしてください。

 

3)シェル化する

ICカード情報を読み取るアプリケーションと、ICカードのデタッチを検出するアプリケーションを、交互に呼び出すバッチ処理を行うシェルスプリクトを作ります。

 

4)シェルスクリプトをコピー

Work/Software/nfcpy/trunk/examplesフォルダに、以下のファイルを格納します。

※お願い!ファイルダウンロードの際、Twitterで一言呟いていただけると大変嬉しいです!

zipファイルがダウンロードできますので、解凍してください。
以下1ファイルが作成されます。
ToolCardBalanceReader.sh

このファイルをWork/Software/nfcpy/trunk/examplesにコピーしてください。

 

4)シェルスクリプトのアクセス権限を変更する

以下のコマンドにて、作成したシェルスプリクトに実行権限を与えます。

 $ chmod u+x ToolCardBalanceReader.sh

 

5)実行する

以下のコマンドで実行します。

 $ ./ToolCardBalanceReader.sh

 

こんな感じにICカードを読み取れます。

※ICカードは3秒ほどPasoriの上に置いた後、離してください。
あまりすぐに離すと、デタッチの検出がうまくできないことがあります。

 

6)アプリケーションを終了する

TeraTermから、コントロールキー+cを押してください。
アプリケーションが終了します。

 

 作成したアプリをRaspberry pi起動時に自動的に実行させる

 

1) 起動スクリプトファイルの編集

/etc/rc.localは、Raspberry Piが起動した時に実行したいプログラム等を定義するスクリプトです。
nanoを使って編集します。

$ sudo nano /etc/rc.local

以下を、このファイルの最後の方、exit 0 の手前に追加します。

cd /home/pi/Work/Software/nfcpy/trunk/examples
./ToolCardBalanceReader.sh

編集内容を保存し、nanoを終了してください。

2) Raspberry Piを再起動

$ sudo reboot

と発行すると、再起動します。

3)IC カードをPasoriと接続

ICカード種別と残高が表示されます。

Nanakoread

 

4) 別のICカードに変える

そのICカード種別と残高が表示されます。

 

 今まで作成したアプリも起動時に登録する場合

LCDにIPアドレスを表示するアプリ、シャットダウンボタンアプリは便利なので、それらも一緒に登録したいところです。
すべて起動時に登録する場合、 /etc/rc.localは以下のようになります。

Python_CardReader2

i2c_lcdAQM1602に対し、”&”がないことに注意してください。
”&”をつけるとバックグラウンドにて実行します。
ICカードリーダアプリケーションの実行までに、確実にi2c_lcdAQM1602を終了してほしいので、
あえて”&”をつけていません。

./ToolCardBalanceReader.shにも”&”がありませんが、もしバックグラウンドで実行したい場合、&をつけてください。

 

 補足

このICカードリーダーアプリケーションは、ネットワーク接続なしで動作します。
お近くにLANがない場合、無線LANのアクセスポイントがない場合にでも動作できます。



コメントを残す

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