Hatena::ブログ(Diary)

Okiraku Programming RSSフィード Twitter

2010-11-23 ArduinoでFeliCaリーダー & ケータイにURLをプッシュ

ArduinoでFeliCaリーダー & ケータイにURLをプッシュ

ArduinoFeliCaリーダーを作ってみました。

D

FeliCa PlugではなくPaSoRiを使っています。

SuicaEdyを交互に検出して、残高を表示しています。

おサイフケータイのように両方に対応するものは両方とも表示。


「WebTo」機能(三者間通信)も試してみました。ケータイをかざすだけで、URLをプッシュしてブラウザを起動させることができます。

f:id:NeoCat:20101122204928j:image:w250


使ったもの

PaSoRiライブラリとサンプルスケッチ

今回作ったスケッチをライブラリとして置いておきます。

旧バージョン: http://neocat.jp/arduino/Library-PaSoRi.zip (RC-S320専用)

現バージョン: http://neocat.jp/arduino/Library-PaSoRi-1.1.0.zip (RC-S320,330,370対応)

展開後のPaSoRiフォルダをスケッチのlibrariesフォルダ内に格納して下さい。IDE再起動すると、サンプルスケッチが File > Example > PaSoRi 内に現れるはずです。

ライセンスMITライセンスとしておきます。あくまで試しに作ってみただけなので、動作は保証しかねます。RC-S330,370等では試してないので動かないかもしれません。 追記12/2 RC-S330,370にも対応しました。


なおこの他に

が必要です。


参考にしたサイト

IDm (FeliCa固有の番号)を使ってセキュリティボックスを作った方もいるようです。

ArduinoとFeliCaでセキュリティボックス - YouTube

上記のライブラリIDmやPMmの取得に対応しています(詳しくはExampleスケッチを見て下さい).

ponkuponku 2010/11/27 15:28 RC-S370でライブラリを使わせていただいたのですがうまく動きませんでした。
http://homepage3.nifty.com/slokar/pasori/libpafe.html
のソースを元にIDや初期化コマンドを変更したのですが初期化に失敗してしまいます。
プロダクトIDを
#define PASORI_PID_HI 0x02
#define PASORI_PID_LO 0xe1
//#define PASORI_PID_HI 0x01
//#define PASORI_PID_LO 0xbb
のように変更し、
const byte S330_RF_ANTENNA_ON[] = { 0xD4, 0x32, 0x01, 0x01 };
のように初期化コマンドを設定してプロダクトIDの確認のみできたのですが
byte PaSoRi::recv(int len, byte *buf)
{
byte rcode = Usb.inTransfer(DEVADDR, ep_record[1].epAddr, len, (char*)buf, 2000);
の部分で失敗してしまいます。
どうかわかることがありましたらご教授願えないでしょうか

NeoCatNeoCat 2010/11/28 00:44 recvで失敗するということは、送信したコマンドに応答がないということかと思います。
上記の初期化コードはS330用のようですので、S370だと異なるコマンドが必要なのかもしれません。
# libpafeはS370に対応しているのでしょうか?
S370が手元にあれば調査のしようもあるのですが、持ってないので何とも、という状態です。すみません。

ponkuponku 2010/11/28 02:07 返信ありがとうございます。
わたしが試したのはRC-S370ではなくてRC-S330でした。
どこかの資料で370と330のプロダクトIDが同じだという記述があったので間違えてしまいました。
libpafeの330の初期化方法に元にやっています。
ただ、330はバルク転送でやりとりをしているようで320と仕様が大きく異なるようです。
あと、330と370の仕様はほぼ同じのようですので370も使用不可能だと思われます。

NeoCatNeoCat 2010/11/28 03:05 なるほど、S330ではバルク転送に変わっているのですね。
そうなると、初期化(PaSoRi::init()のep_recordの設定)時にバルクIN, バルクOUT(Attr=2)を追加し、
PaSoRi::recv, PaSoRi::send でそのepをinTransfer/outTransferに渡して転送を行うよう
変更する必要がありそうです。

NeoCatNeoCat 2010/12/03 02:36 libpafe を参考に、RC-S330, 370にも対応してみました。
接続されたPaSoRiの型番に応じて自動的にアクセス方法を変えるようにしたつもりです。

sugi2009sugi2009 2011/06/16 22:51 NeoCat様 はじめまして ブログを参考にさせていただきS370をつなげてみましたが
Startのあとに、Setup packet error:Dが表示されてしまいます
参考になる情報をご存知でしたらご教示いただけないでしょうか

NeoCatNeoCat 2011/06/17 03:25 Arduinoへの電源はどのように供給されていますか?
USBへの供給電圧がちゃんと5Vあるか、測ってみてください。
USBに供給する電源電圧が低かったりすると、接続したデバイスが不安定になって、
そうしたエラーが出る場合があるようです。
9V〜12VくらいのACアダプタを使う必要があります。

sugi2009sugi2009 2011/06/18 10:41 ご返答ありがとうございます。ACアダプタを入手して再度試してみます

sugi2009sugi2009 2011/06/29 22:53 12Vのアダプタをつなげましたが、状況が変わりませでした。その後、ソケットの抜き差し、ケーブルの交換を行ううちに、何回かに数回は、初期化ができ、その後データを取得できるようになりました。今は、だましながら使用している状況です。以上 ご報告です、ありがとうございました。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。