2015年5月24日日曜日

沖縄限定、フィギュア型の交通系IC

こんにちは、大坂@沖縄です。(なんか紛らわしいですが、名前が大坂で、沖縄在住です)


で、沖縄ならではのNFCネタということで、今日はフィギュアタイプのOKICAを買ってみましたよ、というお話。


関東でいうところのSuicaとかPasmo的な位置づけのやつですが、沖縄ではOKICAという名前になってます。


当初はカード形状のみでの提供かつ、モノレールのみでの利用だったのですが、2015/4/27からバスでも利用開始となることを記念して、フィギュアタイプが限定販売されています。限定ですが、とくに予約なしで普通に買えました。。。


販売価格は2,000円、500円分のチャージがついてます。




開けてみるとこんなかんじ。




何はともあれ、Taginfoで読んでみます。
まぁ、当然Felica。RC-S962というチップですね。



ひっくり返してみると、台座部分にICが入ってるというか、コイン型のタグをハメこんでる感じですね。カスタマイズのタグではなく、標準製品をそのまま使ってるあたりが潔くて良いなと。



この辺のコイン型トークンをそのまま使ってるんですかね、お見事。
http://www.sony.co.jp/Products/felica/business/products/RC-S892.html


カード型だけじゃなくてコイン型の交通系ICも一般に販売してくれると、オリジナルのNFCフィギュアとか作って持ち歩けたりして素敵なんですけどねー。

2015年5月20日水曜日

NFCタグを洗濯しちゃった話。



こんにちは、あらたに Enjoy RFID のメンバーに加入しました、大坂と申します。


この前、洗濯ものを干そうとしたらポケットに NFCタグが入ったままでした。


もったいないなー、と思いながらスマホでタッチしてみると、なんと生きてました。


屋外に貼っても意外と耐久性あるのは知ってましたが、、、


洗濯機の洗礼にも負けない強さを見習いたいと思った次第です。


ぼちぼち書いていきますので、これからよろしくお願いします。

2015年3月9日月曜日

Raspberry Pi で NFC その2

前回は Raspberry Pi に ACR-122U をつけて遊んだわけですが、「model B+ では動かん!」という話があったので試してみました。


OS を入れて、ACR-122U を繋ぐと...


あれ?
もう赤ランプが点いた。
え?これは認識している?前回は確か pcscd を入れないと点かなかったはず。

まぁ、いいか。

前回同様 pcscd を入れて、プログラムを動かしてみると...SCardEstablishContext は通りますがなぜか SCardListReaders が SCARD_E_NO_READERS_AVAILABLE を返してきます。なんで?認識してるんじゃぁないの?
ということで pcscd がどうなっているか見てみます。

pi@raspberrypi ~ $ sudo pcscd -f
00000000 ccid_usb.c:514:OpenUSBByName() Can't claim interface 1/4: -6
00001275 ifdhandler.c:117:CreateChannelByNameOrChannel() failed
00000665 readerfactory.c:972:RFInitializeReader() Open Port 0x200000 Failed (usb:072f/2200:libudev:0:/dev/bus/usb/001/004)
00000545 readerfactory.c:279:RFAddReader() ACS ACR122U PICC Interface init failed.
00000933 hotplug_libudev.c:379:HPAddDevice() Failed adding USB device: ACS ACR122U PICC Interface

あ、何か失敗してる。リーダがすでに何者かに使用されているようだ。誰だ?ということで fuser や lsof 使っても使ってるプロセスが出てこない。ググると OpenCT じゃね?という意見があったが残念なから OpenCT は入っていない。何だこれは! ということでもう少しググると見つけました。


neard というのがあるそうだ。「にあーど?」聞いたこと無いぞ...
とりあえず lsmod してみろとのことなのでしてみた。

pi@raspberrypi ~ $ lsmod
Module                  Size  Used by
snd_bcm2835            21342  0 
snd_pcm                93100  1 snd_bcm2835
snd_seq                61097  0 
snd_seq_device          7209  1 snd_seq
snd_timer              23007  2 snd_pcm,snd_seq
snd                    67211  5 snd_bcm2835,snd_timer,snd_pcm,snd_seq,snd_seq_device
pn533                  23021  0 
evdev                  11000  4 
nfc                    64189  1 pn533
rfkill                 22347  1 nfc
uio_pdrv_genirq         3666  0 
uio                     9897  1 uio_pdrv_genirq

するとあれ?nfc とか pn533 とかがいる!なんといつの間にかカーネルに NFC が組み込まれている?カーネル 3.10 からは neard という名称で NFC が組み込まれているらしい。

というわけでこのモジュールをロードしないようにブラックリストに載せて、リブート

pi@raspberrypi /etc/modprobe.d $ sudo touch raspi-blacklist.conf
pi@raspberrypi /etc/modprobe.d $ sudo vi raspi-blacklist.conf 

blacklist pn533
blacklist nfc

すると、おー!動きました。めでたし、めでたし。
じゃなくて neard という新しいキーワードが出てきてしまった。まだまだ続きそうです...

2014年9月18日木曜日

自作エンコード機、始動!

前々回のエントリーで製作した自作エンコード機ですが、早速エンコードの機会が訪れました。

今回は、これ!


9月28日に日比谷で行われる琉球フェスティバルです。

このフェスティバルでは記念用のポストカードが来場者に配布されますが、そのポストカードに NFC タグが付いています。来場者はそのカードに NFC対応スマートフォンでタッチすると、さまざまな情報がゲットできるわけです。
そのカード用の NFCタグ 2,500枚をエンコードしちゃいます。

で、セッティングを開始したんですが早々にトラブル発生!


自動ラベル送り機が機能しなさそう。
しまった、どうしよう。地味に問題だなこれは。ないのか、何か替わりになるようなものは…


あった!(お掃除コロコロ)
これをテーブルに設置すると!


完璧だ。
ということでエンコード開始。



よしよし、うまく動作していますね。
ところが800枚を超えたあたりからなぜか書込みエラーが頻発するようになりました。
巻き取り側はだんだん大きくなりますので、少しずつですが巻き取り速度は速くなっていきます。
今回のタグは小さいタグでしたのでピッチが狭く、書込みスピードが追いつかなくなってるのではというのは推測です。

でもまぁ、これを3回ほど繰り返して


完成~

書込み動作時の速度としては1分間に平均して250枚程度書けていたようです。十分ですね。

2014年7月22日火曜日

エイ坊のNFC情報配信端末を試作しました。

NFCは今やほとんどのスマートフォン(iPhone除く 泣)に搭載されている機能ですのでこれを利用して情報配信したいよ~という方もきっとたくさんいらっしゃいますね?

ということで沖縄市のイメージキャラクター「エイ坊」のNFC情報配信端末を試作してみました~。
どーん。

右側からタブレットがはみ出していたりするのは気にしてはいけません。
これ実は立体プリントというものを使用しています。意外とゴージャスです。
斜めから見るとほら。


太鼓の部分とエイ坊が3Dになっています。エナメル線みたいのが飛び出ていたりするのは気にしてはいけません。

端末には「イベント」、「グルメ」、「観光」の3つのメニューがあって、タッチした後にスマートフォンで太鼓にタッチするとそれぞれの情報がゲットできます。


グルメボタンにタッチして...(ドドン 効果音)


スマートフォンを太鼓にタッチするとコザ周辺のグルメ情報がゲットできます。
仕組みはまぁ、すごい単純です。端末はネットに繋ぐ必要がありませんので、電源だけあれば動きます。

将来沖縄市にお越しいただいた際にはこの端末がどこかで見れるかも?しれません。

2014年7月11日金曜日

NFCエンコード機を自作してみました。

みなさんこんにちは。今日も元気にエンコードされていますでしょうか。エンコード楽しいですよね。でも10枚くらいなら全然平気ですが、1000枚とかになると うぅぅ ってなりますね。

というわけでエンコード機を作っちゃいましたー。
どーん。


名付けて「Hayato Encoder Machine」
一番左にあるのがラベル巻き取り機です。


このマシンの中で一番高価な機械で7万くらいします。
ただやってるのは巻き取るだけです。ラベルに弛みが出ると自動で巻き取ってくれるというとても便利な機能が付いているんですが一切使わずに巻き取りだけしています。かなり贅沢な使い方です。


で、段ボールエンコードテーブルの上に搭載されているのが ACR122U リーダ2個です。右側が書込み用、左側がベリファイ用です。


巻き取り機と段ボールエンコードテーブルの間にあるのがこのUSB扇風機と朱肉のセットです。何に使うのかは後で説明します。


こちらはラベル送り出し装置ですね。無電源で動作します。

エンコードするのは15枚のサーカスNTAG203です。もっといっぱいやってみたいですがタグがもったいないのでとりあえず15枚で我慢してください。

動作させるとこんな感じです。

PC上では左側が書込み状態を表示して右側が検証結果が出ています。段ボールエンコードテーブルと逆ですね。すいません。そこそこの速さで書き込みできています。これぞ前回エントリーの DirectTransmit の賜物ですね。

で、15枚の後ろに1枚ロック済みのタグを貼って、計16枚で再度流してみます。ロック済みなのでこのタグは検証で失敗します。ここで扇風機の登場です。

検証に失敗したタグが通過する際に扇風機が回っています。この扇風機、前の写真を見ていただくとわかりますが、羽に糸がセロテープでつけてあります。これが回ることにより、朱肉のついた糸がタグに印をつけてくれるんですねー。
先ほどのタグを見てみると、


ほら、(うっすらと)赤いのがついてますね!まぁ、こういうのはだいたいの位置がわかればいいと思うんですが何か?

というわけで自作エンコード機をご紹介いたしました。ちなみにこのマシンは社内用で販売はいたしませんのでご了承ください。

2014年7月4日金曜日

PC/SCに潜む謎 その2

前回の(1年以上前ですが)「PC/SCに潜む謎」の続編です。実は何気にこのエントリーが一番アクセスが多いです。前回は PC/SC のコマンドがカードに対して投げるものであって、リーダに投げるものではないというお話でした。

しかしそう、あったんです。リーダに投げる方法がぁ!(騒いでるのは私だけです)

SCardConnect の際に ShareMode というのを指定するんですが、ここに SCARD_SHARE_DIRECT というのがありました。で、これで SCardConnect するとカードが無いのに待望のカードハンドルがもらえるのです!うはー!(激喜

そして、ここからは ACR122 だけの話かもしれませんが、SCardTransmit ではなくて SCardConrtol というコマンド(これもカードハンドルが必要)で投げることで DirectTransmit が可能になります。

というわけで前回の最後の方の「カードが置いてないときにAPDUコマンドは送信できない」という部分は間違いでございましたので訂正してお詫びいたします。

では早速やってみましょう。いつもの ACR122 ちゃんです。


SCardEstablishContext から SCardListReaders してリーダを取得するところまでは前回と同じです。

で、この状態で SCardConnect を SCARD_SHARE_DIRECT モードで実行すると、カードハンドルが取得できます。もちろんカードは置いていません。

そのカードハンドルを使って SCardConrtol コマンドを IOCTL_CCID_ESCAPE_SCARD_CTL_CODE というコントロールコードで実行します(追記:2014/09/19 Raspberry Pi ではこのコントロールコードは 0x42000DAC (0x42000000 | 3500) で動作します)。とりあえず Get Firmware Version というコマンド(FF 00 48 00 00)を投げてみます。

すると 41 43 52 31 32 32 55 32 31 30 (ASCIIで ACR122U210) が返ってきました。動作していますねー。

では DirectTransmit に挑戦です。
ACR122U には PN532 というチップが入っていますので、このチップに直接コマンドを送ることができます。
Direct Transmit についての詳細は「ACRリーダでNTAG固有のコマンドを使う」を参照ください。

今回は InAutoPoll というコマンドを実行してみます。これはポーリングを行うコマンドです。どのタイプのタグをポーリングするとか選んだりできますし、何よりタグが通信圏内に入るとすぐに通知してくれます。

最初にリーダの自動ポーリングをオフにします。これは ACRリーダの Set PICC コマンドを利用します。

で、InAutoPoll コマンドを投げます。ポーリング間隔を一番短い 150ms で実行します。するとプログラムは応答待ちになります。そこでカードを近づけると...おー!おぉー!ぐひひー!  って何やってるかわかんないですね。ACR122UToolで同じことやってみます。

まずはリーダの自動ポーリングをオフに。


そして InAutoPoll コマンドを投げます。すると応答待ちになります。


タグを近づけると...


きたー。NTAGを近づけてみたんですがちゃんとUIDが採れています。
って何か InAutoPoll の話になってきちゃってますが、今回はこれが PC/SC からできたよっていうお話なのでした。
うーん、謎は解決したということでいいんだろうか。関数名は SCardControl だしなぁ。まぁ、どうでもいいか。