SuicaやスマホなどのNFCを認識して、スキャンした時間帯を記録する仕組みをRaspberry Piで作ろうと思ったのですが、とりあえず今は行き詰まっていて、そんな行き詰まりの記録です。
こんなのがQiitaでの初投稿とは、なかなか幸先の悪い事でございます。
迷走の記録
とりあえずRaspberry PiだったらUSB接続のカードリーダー買えばいいんじゃね?
↓
RC-S380を買ってくる
↓
調べてみるとPythonのライブラリ?としてnfcpyがある
サンプルプログラムでそこそこ動く事は確認した
↓
常に読み込みを走らせ続けるのは気持ち悪い。
それに記録の種類を分けたいのもあるし、2つのボタンのどちらかを押したら読み込み開始としよう
↓
あれ、Raspberry Piって入力割り込みないの?
じゃあGPIOの検知を無限ループで走らせる?そんなのCPU使用率が高くなって消費電力が高くなりそう
↓
あと、俺Pythonまったく分からないし、文法見たけど今から覚えるのキツイ。
じゃあ、Arduinoで読み込み全般処理をやって、通信内容をファイルに溜め込んでいく形か?
でもUSBは扱えないから、マイコンでカードリーダーを取り扱う方法ってないものか。
ここで本来正解だったはずのルートから外れてしまう。
石丸電気で適当に安いリーダーを見繕って購入してきた
http://wiki.seeedstudio.com/Grove-125KHz_RFID_Reader/
↓
Arduinoとブレッドボード上で接続して、サンプルコードをコンパイルして転送。
標準ライブラリだけで動くのはありがてえ。でもタグをかざしても反応しない
↓
そもそもRFIDの周波数規格が125kHzでは、NFC規格に合わないと判明
(見落としたのか店になかったのか、125kHzのものしかないと思っていた)
必要なのは13.56MHzのリーダーだと判明した
↓
通販で吟味して、AmazonでサインスマートのRFID-RC522を購入
(ここで参考にしたサイトに「FeliCaには対応していません」と丁寧に書いてあったにも関わらず、てやんでえ、俺ぁタグの識別だけやりてえんだから、それくらいRFID自体の規格でいけんだろ!という謎の論理で聞き入れず)
↓
追加ライブラリを取り込んで、サンプルコードをコンパイルして転送。
付属のタグをかざしたら何か出てきた!このUIDってのが識別子か。
↓
手元にあったタグを片っ端からかざしてみたところ…
Bluetoothイヤホンは反応あり。
スマートフォンとスマートウォッチはUIDが16進数8桁と短い上に、かざすたびに値が変わる。
Suicaと自転車駐輪場の利用者証は反応なし。
こりゃあ実用できない。一体どうしたもんか。
↓
調べたところISO/IEC 14443という規格があり、FeliCa等はこれに対応している模様。
これだとUIDでの識別ができず、毎回ランダムの値を送って来る。
↓
結論として、FeliCaに対応したカードリーダーでなければ個体識別すらできない
はー、なるほどなー…。
こんな、ネットで探して正しく解釈すればすぐわかる情報に行きつくために、貴重なお金と時間を使ってしまいました。しかし今はネットがあるから良しとして、先人はこういうところで非常に苦労したんではないかな…と、一応は恵まれた時代に生まれた事に感謝しつつ。
実用的にどうすればいいのか(※模索中のプラン)
今回買ってしまったマイコン通信向けのリーダーは何かしらに使うとして、
ここからは「実用的にRaspberry PiでNFCの読み込みをするにはどうしたらいいか」。
実は大体のプランが出来上がっています。出来上がっているので、ようやく筆をとった次第です。
- 常にGPIOを監視するための処理を設ける
- 先日、別件で特定のファイルが作成されるのを監視し続ける処理を作り、Cent OS上で走らせたところ、思った以上にCPU使用率に影響はなかった。
- 同じ要領でGPIOを監視する仕組みを設ける。どの端子か、立ち上がり検知か立ち下がり検知か、チャタに何秒くらい(何ループくらい?)掛けるか、検知したらどういうコマンドを実行するか、が設定可能なら良いか。
- PHPで書けるといいんだけど、SHかなあ。
- nfcpyを使って読み込み処理を作成する
- 観念してPythonを覚えなければならない。PHPで書きたい…。
次の投稿ではこれが成功したという内容であることを祈ります。