しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Raspberry Pi 2 で NFC (FeliCa) を使えるようにする

これまで Raspberry Pi 2 に Wi-Fi / Bluetooth / GPS などを USB でいろいろと繋いできましたが、Edy 登録用にしか使っていない PaSoRi が転がっていることを思い出したので、Raspberry Pi 2 に繋いでみました。

いつも通り lsusb を叩いて確認してみると、Sony のデバイスが見つかりました。これが PaSoRi です。

f:id:shiba-yan:20150426203059p:plain

NFC を使うライブラリとしては libnfc があるみたいですが、手持ちの PaSoRi は型番が新しいものだったので libnfc は残念ながら使えませんでした。仕方ないので動作の実績があった nfcpy を使ってみることにします。

nfcpy をインストール

インストールは公式のドキュメントそのままで問題なく進めることが出来ました。

Getting started — nfcpy 1.0.3 documentation

インストール後にサンプルの tagtool.py を実行して、ちゃんと動作するか確認します。

sudo python examples/tagtool.py show

sudo を付けないと PaSoRi を見つけられなかったので、ちょっと注意したい感じです。*1

手持ちの Suica をリーダーにセットして実際に実行してみたところ、ちゃんとタグ情報を読めました。

f:id:shiba-yan:20150427000452p:plain

IDm / PMm はそれぞれ製造 ID と製造パラメータで、基本的には固有なものになるようです。ただし、ガラケーの端末 ID の時のように IDm に依存する作りにするのは、セキュリティ的に良くないみたいです。

Type 3 Tag とは FeliCa のことを表しているようです。Sony の公式サイトに情報が載っていました。

ソニー株式会社 | FeliCa | NFCについて | NFCフォーラム仕様

日本だと Type 3 Tag は簡単に手に入りますが、それ以外は少し手間がかかりそうです。と書いたところで、Nexus 4 に NFC が付いていたことを思い出したので、リーダーにセットしてみました。

f:id:shiba-yan:20150427001549p:plain

NDEF についてエラーにはなっていますが、Type 4 Tag として読み込めている感じです。

C# との連携について

nfcpy を IronPython で動かせば C# との連携がやりやすいと思ったので、まずは Mono で IronPython をビルドしてみました。そのままだとビルド出来ませんでしたが、FEATURE_IPv6 を外せば通りました。

参考にした Stack Overflow の回答は以下になります。

これで IronPython のビルドが出来たので余裕だと思っていたんですが、試してみると PaSoRi を見つけることが出来ないみたいでした。PyUSB 周りに問題があるのかもしれません。

f:id:shiba-yan:20150427015142p:plain

C# でも動作するドライバを書けば何とかなるかもしれませんが、以下の記事のように Python で書いて C# には必要な情報だけ標準入力で渡すのが良い気がしてきました。

IDm だけを使うアプリケーションなら、これで十分対応出来そうです。

*1:sudo 無しにする設定もあるみたいですが、上手くいきませんでした。