2012/01/22

[nfc]パソコンでNFC開発をするときに安くやりたい(ハード編)

Windows

Windowsといっても、いろいろある。
すまんが、私はXP 32bitしか持ってないのだ。最新のことはよくわからん。
パソコンにNFCのリーダライタがあればいいが、ないと思う。
安いのは、SONYのPaSoRi。今はRC-S370がいいんじゃないか。
PaSoRiは、FeliCaだけでなく、NFC-A/Bもいける(もちろん、NFC-Fも)。
Amazonで2300円くらい。
デバイスだけでなく、カード側もほしいかもしれん。
まあ、カード側はパソコンとは別になるので、あとにしよう。
リーダライタが入手できたら、次はソフト開発環境だ。
ソフト側は、選択肢が少ない。
まあ、SONYのSDK for NFC Starter Kitが普通の選択肢だろう。
Starter Kitは商用利用できないが、無償だ。
これは、PaSoRiでリーダライタ機能と、アドホック機能(PUSH、FALP)を提供するライブラリとドキュメントだ。
(FALPは、フィーチャーフォンからのFALP受信はできなかった。)
ビルド環境がいる。
Starter Kitには、Adobe/AIRでやるものと、C++などでやるものがある。
すまんが、Adobe/AIRはよくわからんので、割愛させてもらう。
C++などは、MicrosoftのVisual Studio Expressを使うと良かろう。
ユーザ登録がいるが、無償で使うことができる。
これだけでは、まだ不十分だ。
NFCに関するドキュメントがいる。
まあ、これもパソコンには関係がないので、あとだ。

Linux

さて、Linuxの場合はいろいろと事情が異なる。
PaSoRiのライブラリが提供されていないので、普通の手段ではPaSoRiが使えないのだ。
libusbという、LinuxでUSBを使うためのライブラリがある。
これを利用したlibpafeというPaSoRiライブラリがある。
FALPはできないが、リーダライタ機能は動く。
PaSoRiに特化していたと思うので、NFC-AやBは無理だろう。
完成度として高いのは、nfcpyだと思っている(使ったことないけど)。
Pythonでアクセスするのだ。
これは、たぶんSONYの人がやっているところで、PaSoRiもいける。
libnfcもある。
これもPaSoRiがだいたい使える。
ビルド環境は、gccでよい。


PaSoRiを使わず、別の手段を考えてみよう。
組込み用途のRC-S620/Sを使うのだ。
どこから入手するんだ?ということになるが、スイッチサイエンス社がよいだろう。
RC-S620/S本体と、接続しやすくする基板、RC-S620/Sは3.3V/5VのUARTなのでレベルコンバートしてシリアルに変換するようなものがあればよい。こんなのとか。
RC-S370もRC-S620/Sも、FeliCaチップとしては同じRC-S956というものが載っている。
RC-S956は、コマンドを送信すると、うまいこと処理をしてレスポンスを返してくれる。
そのコマンドとレスポンスの経路が、RC-S370だとUSBだし、RC-S620/Sだとシリアルというだけのことだ。
SDK for NFC Starter Kitなどのライブラリは、その経路を隠蔽して使いやすくしてくれていると考えればよい。
つまり、隠蔽するところも自作してしまえば、別にRC-S370だろうとRC-S620/Sだろうと関係はないのだ。
つまり、WindowsもLinuxもないことになる。
RC-S620/Sは、自分でコマンドを送信しなくてはならない。
SONYから簡易コマンド仕様が出ているので、これを利用する。
サンプルがほしいかもしれないが、パソコン向けではなくArduino向けがある。
読むのはそんなに難しくないので、ここを足がかりにするとよいだろう。

私はどうしているかというと、自分でRC-S956用のライブラリを作り、libusbを使ってPaSoRiにアクセスしたり、シリアルでRC-S620/Sにアクセスしたりしている。
「それよりも、リーダライタはSONY製以外にないの?」と思ったかもしれん。
私もそう思って探したのだが、安いのは探せなかったのだ。
実は選択肢はあるのだ。
ACR-122とか。これはlibnfcでも一応対応はしているらしい。
ACR-122は、タグとセットでtouchatagというところで販売されているとのこと(Tyson Keyさん情報)。
NFC開発スターターキットとか。Amazonでも売ってた。
でも、PaSoRiよりは高いのだ。
もちろん、情報もセットで売られているので、「どこから始めたらいいんだろう」と迷う時間は大幅に削減される。
仕事だったり、急ぎだったりするなら有用だと思う。
ただ、個人の趣味でやるのなら、あまりお金はかけずにやりたいではないか。
そしてできれば、ライブラリでは提供していないようなすべての機能を使いつくしたい。
そういう意味では、OpenPCDってのは究極かもね。

とはいえ・・・それをやっていると、NFCサービスというものになかなか近づかない。
FeliCaとかMifareのカードにアクセスしたいだけなのに、USBがどうの、シリアルがどうの、リーダライタの仕様がどうの・・・などとはやりたくなかろう。
なので、そういうところは他の人に任せて、自分の好きな分野をやるのによい近道を探すといいんじゃなかろうか。
まあ、NFCの規格は知っておいた方がいいと思うので、次回はドキュメント編をやろう。
(いつになるかわからんが・・・。)