2014/01/30

Arduino Pro Mini + Felica Plug でNFC-F/Type3としてAndroid端末から読み書き

Felica Plug (RC-S802) を Arduino Pro Mini (328 3.3V/8Mhz) で制御して
仮想的な NFC-F/Type 3カードとし、
NFC対応のAndroid端末(GALAXY NEXUS)から読み書きしてみました。

(今回使用したAndroidアプリは、NXPの"NFC TagWriter"です。)

今回用いたモノ:
  • "Arduino Pro Mini 328 8Mhz 3.3V"
    Felica Plugは1.8~3.7V動作の為、5VのArduinoボードだとレベル変換が必要となります。その点、このボードは3.3V動作なのでそのまま使えます。クロックも8Mhzで省電力です。
  • "Felica Plug RC-S802"
    マイコンと接続して、Felicaカードとして振る舞えるモジュール。
  • "FeliCa Plug ピッチ変換基板 (フラットケーブル付)"
    便利なピッチ変換基板があるので使うことにしました。FFC付きです。
  • ジャンパワイヤ、ピンソケット 等々...
尚、Arduino Pro MiniにはUSB端子がないので、アダプタとして
今回はスイッチサイエンスのFTDI USBシリアル変換アダプターを使いました。

以下、手順を簡単に説明します。

まずは、Felica PlugのArduino向けライブラリをダウンロード。
ありがたく使わせていただきましょう。
これをダウンロードしてアーカイブを展開します。
(ライブラリの使い方は、同梱のFeliCaPlug-sjis.txtに記載されています。)

さらに、それをArduinoのライブラリディレクトリに追加するのですが
その内の"FeliCaPlug.h"が最新のArduino環境ではコンパイルできない為、要変更です。具体的には "WProgram.h" を Arduino.h に変更するだけです。
--- FeliCaPlug.cpp
+++ FeliCaPlug.cpp
@@ -7,7 +7,7 @@
 #include stdio.h
 #include string.h
 #include inttypes.h
-#include "WProgram.h"
+#include "Arduino.h"
 #include "Print.h"
 #ifdef CONFIG_FELICA_PLUG_EEPROM
 #include "EEPROM.h"

次に、Arduino Pro Miniに ピンソケットをハンダ付けします。
私は適当に必要な分だけ付けておきました。

次に、Felica Plugとピッチ変換基板を接続します。
Felica Plugにフラットケーブル(ピッチ変換基板付属品)を差し込み、
そのまま反対側にピッチ変換基板を接続するだけです。

Felica Plugとピッチ変換基板を FFC(フラットケーブル)で接続したところ。
ピッチ変換基板からはさらにジャンパワイヤなどで配線します

フラットケーブルは青いカバーがある面を上にしておき、
Felica Plugのチップがある面、ピッチ変換基板のロゴがある面を上にして各々を差し込みます。

さらに、ピッチ変換基板とArduino Pro Miniを接続します。
Felica Plugおよびピッチ変換基板側のピン配置については
Felica Developers' Blog の記事を参照してください:
http://blog.felicalauncher.com/sdk_for_air/?p=2463
ピッチ変換基板の"FFC-B"という表記がある側から順に、GND、RFDet、SW、IRQ、SEL、DATA、SPICLK、VDD となります。

さて、Felica PlugのプロトコルはSPIをベースにしたものですが、先述のライブラリではArduinoのSPI機能を使うのではなく、ソフトウェア的に通信を行っています。
従って、各ピンはライブラリの初期設定から任意に変更しても構いません (たぶん)。
今回は、Arduino Pro Miniにピンソケットをハンダ付けする都合により、
ピンをある程度まとめた配置にしてみました(めんどくさかったからです!(笑))
※ もちろん、ソースコード上でピン配置を定義する必要があります。
  • RFDet 3
  • SW 9
  • IRQ 2
  • SEL  10 → 4
  • DATA 11 → 5
  • SPICLK 12 → 6
Felica Plugと配線したArduino Pro Miniに、USBシリアル変換アダプタ(写真奥側)を接続したもの。
ピン配置はライブラリの初期設定から少し変更しています。
あとは、ソースコード(スケッチ)を書くだけです。
ソースコードは、ライブラリに付属しているサンプル "FelicaPlugType3" を改変したものです。
setParamでモードを"FELICA_PLUG_MODE_TYPE3"(12FC)とすることで、Type3のFTモードとなります。


注意すべきは、データフォーマットコードです。
今回使用したFelica Plugはスイッチサイエンスが個人向けに販売している物の為、
データフォーマットコードとして0x00, 0x1c を設定しなければなりません。
(参照: SWITCH SCIENCE - FelicaPlugの使い方)

また、先ほどのピン配置をソースコード上で定義することを忘れないようにしましょう。

以上で準備完了です。

では、Android端末から読み書きを行ってみます。
先述のとおり、使用した端末は GALAXY NEXUS (Android 4.2のNFC対応端末)です。
Nexus端末ですので、もちろん"おさいふケータイ"には非対応です。
(でも、Felica PlugはNFC-Fということで読み書きできるのです。)

とりあえず、NXPの"NFC TagInfo"というアプリを用いて読み取りをしてみました。
端末の裏側に埋め込まれているアンテナ近くに、Felica Plugを近づけると...。


このようにType3 (NFC-F)のカードとして認識され、
NDEFがRead & Writeとなっていることが確認できました


NFC TagInfoにて、Felica Plugが認識されたところ。

また文頭の動画のとおり、NXPの"NFC TagWriter"というアプリを用いて
実際にデータを読み書きすることもできました。

NFC TagWriterにて、文字列を書き込んだところ。
めでたし、めでたし。

さて...これを使って作りたいモノがあるので、
続けて取り掛かりたいと思います (^^)♪ それでは。

参考にさせていただいたページ (感謝♪):
p.s.
記事のタイトルが長過ぎました。反省...(^^;)

0 件のコメント:

コメントを投稿

お気軽にコメントをお寄せください m(_ _)m♪
"コメントの記入者"欄から[名前/URL]を選ぶと、登録なしでコメント投稿していただけます。