RFIDを使ってみよう 実践編(1-2)
作成日: 2005/8/9  最終更新日:2005/11/2



概要

このページの内容は,Software Design 2005年1月号 pp.118-126に掲載された, 「RFIDを使ってみよう 実践編1」をHTML化したものです.分量が多いため,三つのページに分割してあります.本文中の情報は,特に記載がない限り「2004年10月」を指します.

ここでは,Felicaを用いた基本システムとして,三つのサンプルアプリケーションを紹介します.RFIDを使ってみよう (Felicaアプリ編) も参考にしてください.

目次



Felicaの基本システム
1. 概要

それでは,Felicaを用いた基本的なRFIDシステムについて,サンプルアプリケーションを通して紹介していきます.今回作成したアプリケーションは以下の三点です.

  • 1. FelicaLauncher:
    • Felicaを用いたアプリケーション・ランチャー.
  • 2. FelicaToFile:
    • Felica IDを随時ファイルに書き出すシンプルなプログラム.
  • 3. FelicaToSocket:
    • Felica IDとタイムスタンプを特定のIP/ポートに送信するTCPクライアント.

ここではまず,プログラムを試す前に必要な準備と,各プログラムに共通する基本操作について説明した後,それぞれのプログラムの具体的な操作方法について説明します.

[image]

図4 システムの外観



2. 必要な準備

はじめに,サンプルアプリケーションを試すために必要な準備について説明します. アプリケーションを起動するために必要なハードウェア/ソフトウェアは以下のようなものです.

  • Pasori(パソリ)
    • Pasori(パソリ)は,FelicaのIDを認識できるRFIDリーダーです.
      • 前述したように,コンビニエンスストア(AM/PM)の店頭や,ソニースタイルなどで3000円程度で購入することができます.
      • PasoriをPCに接続する前に,Pasoriドライバ&Felicaライブラリをインストールしておく必要があります.インストーラーは,Pasoriに添付されているCD-ROMなどから入手できます.
      • SUICAの残額や乗車履歴を確認できるソフトウェアも一緒にインストールされます.
  • Windows PC
      • Windows 2000 / XP で動作を確認しています.
  • Microsoft .NET Framework 1.1
    • サンプルプログラムは .NET + C#で書かれているため,事前に Microsoft .NET Framework の 再頒布パッケージ をインストールしておく必要があります.インストーラーはMicroSoftのWebページから入手できます.
  • サンプルアプリケーション
    • すべてのサンプルアプリケーションは,RFIDを使ってみよう (Felicaアプリ編)からダウンロードできます.Pasoriドライバや.Net Frameworkの再頒布パッケージはここからもダウンロード可能です.一部のアプリケーションについては,ソースコードも掲載してあります.(SDK for Felica Liteのライセンスの関係で,Felicaライブラリを直接制御するプログラムのソースコードは掲載していません.)


2.基本的操作

次に,各プログラムに共通する,基本的な操作手順について説明します.

  • 0. 共通設定
    • 読取間隔
      • FelicaのIDを連続読取する際の,読取間隔を設定します.
      • Felicaリーダーとの通信時間を考慮していないため,実際には多少の誤差が生じます.

[image]

  • 1. 接続
    • Felicaライブラリを初期化し,パソリへの接続を試みます.
    • ライブラリの初期化
      • 成功した場合,パソリに接続を試みます.
      • 失敗した場合,「ライブラリの初期化に失敗しました」と表示されます.
        • →Felicaドライバがインストールされているか,確認してください.
    • パソリへの接続
      • 成功した場合,「Pasoriと接続しました.」と表示され,「切断」「一回読取」「連続読取開始」ボタンが利用可能になります.
      • 失敗した場合, 「Pasoriと接続できませんでした.」と表示されます.
        • →パソリと接続されているか,他のサンプルアプリケーションが動作していないかを確認してください.
  • 2. 一回読取
    • FelicaのIDを一度だけ読み取り,「カードID」に表示します.主に動作テスト用のコマンドです.
      • Felicaの読み取りに成功すれば,「カードID」にFelicaのIDが表示されます.
      • Felicaの読み取りに失敗すれば(FelicaがPasoriにおかれていなければ),「カードID」に「No Card」と表示されます.

[image]

[image]

  • 3. 連続読取開始
    • FelicaのIDを連続的に読み取り,「カードID」に表示します.通常はこのコマンドを利用します.
    • 連続読取を開始すると,「連続読取停止」ボタンがアクティブになります.「連続読取停止」「一回読取」「切断」「リセット」ボタンを押すと,読み取りを停止します.
      • 連続読取は,「読取間隔」で指定した時間毎に行われます.
      • これら以外の基本的な挙動は,一回読取と同様です.
  • 4. 切断
    • Pasoriへの接続を終了します.
    • 他のプログラムからPasoriにアクセスする場合,事前に「切断」する必要があります. (二つ以上のプログラムから同時にPasoriを利用することはできません.)
  • 5. リセット
    • Pasoriへの接続を終了し,Felicaライブラリを初期化します.
    • プログラムの動作が不安定になった場合などに利用します.
  • 6. 終了
    • ウインドウの×ボタンを押すと,プログラムを終了します.
    • 連続読取を終了し,パソリへの接続を切断します.
    • それぞれのソフトウェアごとの設定項目や,登録したID情報などは,自動的にファイルに保存されます.
      • 次回起動時に,これらの情報は自動的に読み込まれます.
 次に,各アプリケーションの独自の機能や,操作方法について説明します.



3. FelicaLauncher
FelicaLauncherは,Felicaを用いたアプリケーション・ランチャーです.FelicaのIDを登録し,任意のファイル やプログラムと対応付けることができます.一度対応付けが完了すれば,Felicaを置く/取り除くだけで,さまざまな操作を行うことができます.今回紹介するサンプルの中では,もっとも手軽に試せるものだと思います.
FelicaLauncherの ダウンロードはこちらから行えます.
 [image]
図5 FelicaLauncherの外観  

それでは,FelicaLauncherの使い方について説明していきます.

  • 1.IDの登録
    • PasoriにFelicaカードを置くと,「カードのID」欄に,IDが表示されます.
    • 次に,ID欄の横にある「IDを登録」ボタンを押すと,「登録ID」リストにIDが追加されます.
      [image]
      [image]
2. IDとプログラム/ファイルの対応付け
  • 「登録ID」リストに登録されているIDをダブルクリックすると,IDとプログラム/ファイルの対応付けウインドウが開きます.
  • 「Name(IDの呼び名)」,ID認識/除去時それぞれの「Program」「Option(ファイル名やURL)」を指定します.「登録」ボタンを押せば,対応付けは完了です.
[image]  [image]
Felicaの「認識」時にWebブラウザを起動 Felicaの「除去」時にログアウト  
図6 IDとプログラムの対応付けの例
  • 3. IDの認識とプログラムの起動/終了
    • 「認識時の処理」が指定されている場合,特定のIDが認識される(Felicaが置かれる)と,外部プログラムやファイルが起動されます.
    • 「除去時の処理」が指定されている場合,特定のIDが除去される(Felicaが取り除かれる)と,同様のイベントが発生します.
    • 外部プログラムは同時に一つしか起動されません.新しいIDが認識/除去された時点で,以前の外部プログラムは自動的に終了します.
[image] [image] 
図7 FelicaLauncherの活用例
(Webブラウザの起動〜Webページの表示)
  • 4. IDの保存と読み込み
    • 「登録ID」リストに登録されたIDや対応付けの情報は,プログラム終了時に自動的に保存され,次回起動時に読み出されます.



4. FelicaToFile
FelicaToFileは,一定時間毎にFelicaのIDを読み取って,ファイルに保存するシンプルなアプリケーションです.これ単体では複雑な操作を行うことはできませんが,外部プログラムとの連携を取りやすい点が特徴です.
FelicaToFileのダウンロードはこちらから行えます.
 [image]
図8 FelicaToFileの外観  

  ここでは,基本的なプログラムの使い方について紹介します.

  • 1.設定
    • IDをファイルに保存する
      • チェック時は,Felicaが認識/除去された場合,IDをファイルに書き出します.
        • Felicaが認識された場合,IDをファイルに書き込みます.
        • Felicaが除去された場合,"0"をファイルに書き込みます.
        • Felicaの状態が変化しない場合は,何も行いません.
    • 保存ファイル名
      • IDを保存するファイル名を指定します.
      • 標準では,"[プログラムの実行ディレクトリ]\id.txt"となります.
    • 書き込み時ファイルをロックする
      • チェック時は,IDの書き込み中,ファイルへの読取/書込みアクセスを拒否します.
      • 非チェック時は,IDの書き込み中,ファイルへの書き込みアクセスのみ拒否します.

[image]

  • 2.Pasoriの読み取り開始
    • 「接続」→「連続読取」とコマンドを実行します.
    • 詳細は,共通の基本操作を参考にしてください.
  • 3.外部プログラムからの読み込み.
    • 一定時間ごとにIDファイルを監視し,タイムスタンプが変化した場合に,IDを読み取るようなプログラムを作ることで,外部プログラムから手軽にIDの変化を取得することができます.


 
5. FelicaToNet
FelicaToNetは,一定時間毎にFelicaのIDを読み取り,特定のIP/ポート(サーバ)にIDとタイムスタンプを送信する プログラムです.サーバ側では,複数のPC/Pasoriからの情報を同時に扱うことができるので,複数台のPasoriを連携したシステムなどを構築す ることができます.
FelicaToNetのダウンロードはこちらから行えます.
 [image]
図9 FelicaToNetの外観  
  • 1.設定
    • IDをソケットで送る.
      • チェック時は,Pasoriに接続を行う際に,「サーバIP」「ポート」で指定したサーバに接続を試みます.
      • サーバの接続に成功した場合,「サーバに接続しました」と表示されます.
      • サーバの接続に失敗した場合,「サーバに接続できませんでした」と表示され,Pasoriへの接続も切断されます.
        • →サーバが起動されているか確認してください.
    • Felicaが認識/除去された場合,IDをサーバに送信します.
      • Felicaが認識された場合,IDを以下のようなカンマ区切りフォーマットで送信します.
        • [Client ID],[Felica ID],[TimeStamp]\n
        • e.g.) 1,149467185495277825,2004/10/21 0:43:18\n
      • Felica IDが除去された場合,IDを0として送信します.
        • e.g.) 1,0,2004/10/21 0:43:20\n
      • Felica IDの状態が変化しない場合は,何も行いません.
    • サーバIP, ポート
      • サーバを起動したPCのIPアドレスとポート番号を指定します.
      • デフォルト値は,127.0.0.1(localhost), 4321 となっています.
    • クライアントID
      • サーバで複数のクライアントを識別するためのIDを設定します.

[image]

  • 2. サーバを起動.
    • サーバは,上記の文字列をパースでき,ソケットを扱えるならどのような言語で書いても構いません.
    • 別のプログラムとなるので次の章で説明します。
  • 3. Pasoriの読み取り開始
    • 「接続」→「連続読取」とコマンドを実行します.
    • 詳細は,共通の基本操作を参考にしてください.
5.1 FelicaSimpleServer
次に,FelicaToNetに対応した,シンプルなサーバプログラムについて紹介します.接続されたクライアントの情報(FelicaのIDや接続状況の変化)を,「クライアントリスト」に随時表示/更新します.
FelicaSimpleServerの ダウンロードはこちらから行えます.
[image] 
図10 FelicaSimpleServerの外観  

 

  • 1. 設定
    • IP,ポート
      • FelicaSimpleServerを動かすIPアドレスとポート番号を指定します.
      • 「IPを取得」コマンドを用いることで,現在のPCのIPを自動的に取得できます.
    • クライアントの判別
      • クライアント(FelicaToNet)の同一性を判定するキーを設定します.
        • IP:Portで判別する場合は,クライアントのIPとPort番号をキーとして識別します.クライアント側の設定は不要ですが,同一のクライアントでも接続のリトライを繰り返すとPort番号が変化して,別のクライアントとして認識される可能性があります.
        • IDで判別する場合は,クライアント側で設定した「クライアントID」を利用して同一性を判定します.個々のクライアント毎に設定を行う必要がありますが,識別は容易になります.
    • 切断されたクライアントの表示
      • 切断されたクライアントを,リストでどのように表示するかを設定します.
        • 灰色で表示,を選択した場合,リスト中の切断されたクライアントを灰色で表示します.
        • リストから削除,を選択した場合,切断されたクライアントをリストから削除します.
    • クライアント一覧
      • 接続されているクライアントの状態(IP・ポート,クライアントID, Felica ID, 最終タイムスタンプ)を表示します.
      • クライアント側のPasoriにFelicaが置く/取り除かれる毎に,リストは更新されます.

[image]

  • 2. 開始
    • 指定したIP,ポート番号でサーバを開始します.
  • 3. 切断
    • サーバの動作を停止します.
    • 終了前に,各クライアントにサーバ終了を通知するメッセージ("DCON")を送ります.
  • 4. オリジナルサーバの作成
    • FelicaToNetとの通信は非常にシンプルですので,さまざまな言語でサーバを作ることができると思います.サーバに必要となる最低限の機能は,以下の三点となります.
    • クライアントの接続を待ち,各クライアントを処理するスレッド/プロセスを作成する.
    • クライアントから受信した文字列をパースし,適当な処理を行う.
      • ID認識時のメッセージ
        • [Client ID],[Felica ID],[TimeStamp]\n
        • e.g.) 1,149467185495277825,2004/10/21 0:43:18\n
      • クライアント切断時のメッセージ
        • "DCON"
    • サーバ終了時に,クライアントにメッセージを送信する.
      • "DCON"



[次へ->Felicaの応用システム]


[1] [2] [3]

[RFIDぶらり旅]