2015年12月17日木曜日

今日のかざすちゃん 「センサーUHFタグのデモ」

センサー付きUHFタグのデモビデオです。 

このセンサータグ、温度、湿度、圧力が測定できるのですが、それぞれのセンサーを内蔵しているわけではないのが大きな特徴です。普通のUHFタグと同じようにチップとアンテナのみから構成されています。

製品の詳細はこちらです。
https://www.smartrac-group.com/first-passive-uhf-moisture-sensing-inlay-on-the-market.html

これを使って例えば使い捨てのセンサータグとして利用も可能です。


温度はかなり正確に測定できますよ。驚きですねー。

2015年12月2日水曜日

HCEでおしゃべり

今さら感満載ですが、Android 4.4 からは HCE(Host-based Card Emulation) という機能が搭載されています。

通常 NFC のカードエミュレーションを利用するときは、SE(Secure Element) というのが必要で、リーダはこの人とおしゃべりをすることになっています。この人がカードの実体と言っても過言ではないわけですね。

で、SEの変わりを Android(のアプリ)側が務めましょうというのが HCE なわけです。ネットを見ると ACR122U で HCE をやってみた的な事例はたくさんありますので今回はあえてパソリを使ってみます。

HCE は TypeA を使うそうなので、SDK for NFC を使います。そうすると PC側のソースを載せるのがいかがなものかということになるわけですが、まぁ、SDK のサンプルコードをほぼそのまま使いましたということでその辺はお許しください。

Android側はネットにもたくさん情報あるのでその通りに実装しました。

今回は簡単に Android端末がカードのふりをして現在時刻を返すというシンプルな実装にしました。

具体的には

■PC -> パソリ -> HCE
SELECTコマンド
0x00 0xA4 0x04 0x00 0x07 0xF0 0x01 0x02 0x03 0x04 0x05 0x06
(AID:アプリケーションIDが F0010203040506 のやつを選択という意味です。AIDは上記の apduserveice.xml 内に定義してます。これにより動作させるアプリを選択させるわけです)
■HCE -> パソリ -> PC
OK(0x90 0x00)
■PC -> パソリ -> HCE
独自コマンド
0x01 0x02 0x03
■HCE -> パソリ -> PC
時、分、秒+OK (hour minute second 0x90 0x00)

というコマンドの流れです。

これで双方を実行してパソリにAndroid端末をかざすと...


きました! 16進数表記になってますが、時、分、秒が返ってきました。

ちなみにスリープ状態でも読めるか試しましたがダメでした。
ロック画面では読めました。通常のリーダーモードよりは緩い感じですねー。

2015年9月4日金曜日

今日のかざすちゃん、「NFCタグにしゃべらせてみる」


IoT的な文脈で、NFCタグを使えばモノにしゃべらせることができる、という話をすることが多いのですが、比喩的な意味ではなく本当にしゃべらせることができるのが、SmartSeal Voiceというアプリです。

ビデオの中で、3種類のタグに順番にタッチしていきますが、それぞれのタグに設定された音声がスマートフォンから再生されます。

本来の目的とは違うのですが、子どもと遊ぶときなんか好評ですね。



で、今回もかざすちゃん登場してません、ごめんなさい。。。

2015年9月2日水曜日

今日のかざすちゃん、「RFIDでモノ探し」

一括読み取りで検品を自動化する以外にも、アイデア次第で色んな使い方ができるのがRFID技術の楽しいところ。

画面上で検索するだけじゃなく、たとえば目の前の棚のどこにアイテムが保管されているか、あるいは見た目おなじなんだけど、その中から特定のシリアル番号を探さなきゃいけないとか、ラスト1インチの捜索を便利にしてくれるモノ探しのデモです。金属探知機のイメージに近いですかね。

やり方は非常に簡単で、手に持つタイプのハンディリーダーに捜索しているアイテムの情報を入力しておいて、部屋の中を電波出しながらブラブラ歩くと、探しているアイテムを検出したときに音が出て知らせてくれます。

電波の受信強度に応じて音は3段階、耳を澄ませると「遠いけど検出している」「徐々に近づいている」「すごく近くにある」という感じでモノ探しを支援してくれるので結構便利ですよね。

*ビデオをご覧いただく際には、音量あげて見て頂いた方がよいです。


上記のビデオでは、マジックを探すイメージですね。RFIDで探さなくても、目で見れば分かりますけどね(笑

今日のかざすちゃん、「ちょっとした工具の貸出返却管理」

いくら丁寧に資料を作成しても、紙ベースだとイメージが伝わりにくいんですよね、RFIDって。

なので、こんな使い方を検討しています、というお客様に対して疑似環境を作成して、ちょっとしたデモビデオベースで意識あわせをさせていただくような形を試行錯誤してます。

今回は、マジックとかはさみとか、ちょっとした工具なんですけど持出返却の管理をRFIDで省力化したいというお話。



一括読み取りのイメージをつかんでいただいたり、実際のICタグの取り付け方とか、机上での検討を重ねるよりも実際にやってみたほうが早いですよね。

2015年8月28日金曜日

今日のかざすちゃん、「お財布に入れたICタグって、読めるのかな?」

ヒトの認証をする時に、NFCみたいなタッチする方式じゃなくて、ハンズフリーで意識させずに認証したいんですけどー、というお問い合わせをよくいただきます。

となると、長めの通信距離を確保できるUHF帯のICタグをオススメするわけですが、問題は、どうやって持ってもらうかというところ。

今回は、お財布の中にICタグが入っているときって、ちゃんと読めるのか?
という観点でテストしてみました。



2015年8月18日火曜日

今日の、かざすちゃん ~MANICA Excelツールを知ってますか?~

かざすちゃんがRFID/NFCネタを色々と紹介しますよ、みたいな位置づけに落ち着こうとしてますね(笑

今日は、MANICA Excel ツールのご紹介です。

最初のリリースから何年たってるのでしょうか、知る人ぞ知るとてもマニアックな便利なツールです。

せっかく「RFID楽しそう!」と思って頂いても、面倒なアプリケーション開発のせいで、その醍醐味を享受できないなんてことがないように、お手持ちのExcelを使ってノンプログラミングで今日からRFIDの世界を楽しめてしまうという素晴らしいツールがMANICA Excel ツールです。

すべてを語ろうとすると長くなるので、まずは1台のPCに色んな種類のリーダーがつながっていて、(周波数をまたいだ)いろんな種類のタグを読み込むことができますよ、というデモになりますー。



2015年8月17日月曜日

今日の、かざすちゃん ~ 鍵束を一括自動認識 ~

プロダクトの紹介ビデオにも飽きてきたので、ちょっとした読み取りテストなんかも撮影してみようかと。

今日は、鍵束に取り付けられたICタグを一括自動認識(まとめよみ)してみました。

鍵の棚卸しを毎日しないといけない業種の方にとっては、けっこう便利に使って頂けるツールかと思うのですが、いかがでしょうか。





2015年8月13日木曜日

Eddystone で遊ぶ

Eddystone で遊べる Chrome拡張機能を作成してみました。

今表示しているページの URL を指定したビーコンから飛ばすように変更できる拡張機能です。

正確にはビーコン側のURLは一定なんですが、そこからリダイレクトする先の URL を変えてあげることで実現しています。

こちらから利用可能です。

Eddystone Setter
https://chrome.google.com/webstore/detail/eddystone-setter/apbnpbllefldpjhigndgggiioibefnkb/

使い方

まずはビーコンを準備します。あらかじめビーコンに ID を振ります。IDは半角英字大文字または数字で5桁です。適当に決めてあげます。ここでは SSANO とします。

で、下記の形式でビーコンのURLを設定します。

http://karytap.com/t?i=SSANO

※http:// は短縮コード 0x02、.com/は短縮コード 0x00 がありますので利用します。
※SSANOは先ほど決めたIDです。

これで上記 URL は 18byte になります。ギリです。
karytap は、別に「かりータップ」というサービスがあるんですが、手持ちのドメインで短いのがこれだったので間借りしました。

そしたら Eddystone Setter 拡張機能を開いて、ビーコンの名前と ID を追加します。


試しにオリオンビールの HP を開いて設定してみます。


で、iPhone の今日を開くと


ほら、出ました。

次に沖縄市コザのポータルサイト、コザウェブを開いて設定します。


今日を開くと


コザウェブに変わりました!

リゾルバ経由なので表示内容は更新されないかもと思いましたが大丈夫でしたね。ログを見ると毎回リゾルバから問い合わせにきてるみたいです。

利用シーンとしては、

・後で見る的な URL を自宅にあるビーコンにセットして帰宅後にすぐアクセス!
・セミナーで今表示している URL を手持ちのビーコンにセットして会場内に配信!

とかいろいろ考えられますね。ぜひ遊んでみてください。

2015年8月11日火曜日

タッチレンタルNFCのビデオ撮影強化週間。

コツコツ撮りためてます、デモビデオ。



タッチレンタルNFCのチュートリアルですが、今回はタグの登録作業編。



ついでに、CSVからの一括登録はこんな感じです。




2015年8月6日木曜日

片手間で作成したデモビデオ(その2)。

着想からアウトプットまで、1本あたり10分以内で完成させましょう、という目標で始めたデモビデオ作成ですが、今回はタッチレンタルNFCというアプリケーションを紹介してみました。

・アイテム
・ヒト
・保管場所

の3点セットでNFCタグをタッチするだけで、クラウド上の管理システムに実績がアップロードされる簡易的な貸出管理システムです。

50アイテムまで無料で利用可能という太っ腹ぶりですので、社内の備品管理などでお困りの方は是非お試しくださいませ-。



2015年8月4日火曜日

片手間で作成したデモビデオ(その1)。

RFIDの一括自動読み取りって、資料ベースではなかなかイメージが伝わらないんですよね。単に説明が下手なだけというのもあるのでしょうけど、デモを見てもらうと、そのインパクトは一目瞭然。

かといって、いつでもデモ機を持ち歩くわけにもいかないしなぁ、ということで片手間にデモビデオを作成してみました。




最近おおい鍵管理のお問い合わせについて、鍵束にRFIDタグをつけておくと貸出/返却の登録がこんなにカンタンですよ、というのを伝えたかったんですが、ちょっと片手間すぎて、さすがに分かりづらいかも。。。

これから勉強しながら、少しずつ上達していきたいと思います。

2015年7月23日木曜日

EddystoneでURL送信 その2

前回は Eddystone の URL ビーコンを作ってみたわけですが、iPhoneで受信が出来ました。

画面の上側から下にスワイプするといろんな通知が表示される「今日」画面がありますが、ここに Chrome プラグインを追加すると Eddystone が受信できます。追加は下の方の「編集」ボタンを押すと追加できます。


追加すると、こんな風に「PhysicalWeb はオンです。」みたいな表示が出ます。
ここで Eddystoneビーコンをオンにしても特に変化はないです。

一回ホームに戻って、再度「今日」画面を出すと、PhysicalWebをスキャンしていますみたいな表示が出ます。そこでビーコンをオンにすると...


出ました! URLを認識しました。ここをタップすると実際に Chrome で表示されます。

今のところ Eddystoneビーコンのスキャンは「今日」画面を出したあと10秒くらいだけのようです。自動でいつでも通知されるわけではないようですね。自動で通知は街歩いてるだけでいろんなページが開かれてウザいですので「この辺には何かあるのかなー」的に「今日」画面を開くと、近くの Eddystone ビーコンから URL を取得して一覧表示するというスタイルのようです。確かにこちらの方が(当面は)いいのかもしれませんね。


2015年7月22日水曜日

EddystoneでURL送信

Eddystoneというものが発表されましたので早速遊んでみましたー。

RFIDじゃないじゃないかぁ!うりゃぁ!というご意見は大変ごもっともでございますが無視させていただきたくご了承ください。

Eddystoneはビーコンなんですが、そこにURLを載せれるというステキな機能になっております。これでビーコンに近づくだけでURLにアクセスできるわけです。タッチなんかしなくていいんです!(悲

とりあえず Eddystone の仕様を見てみます。
https://github.com/google/eddystone

ここに仕様とサンプルプログラムが置いてあります。
Eddystone-UID、Eddystone-URL、Eddystone-TLM と3種類あります。
AndroidのUID送信用のサンプルプログラムがありますので、とりあえずこれを改造してURLを飛ばすようにしてみましょう。

その前に基礎知識ですが、ビーコンはBLE(Bluetooth Low Energy)という技術を使っています。BLEにはセントラルとペリフェラルがあります。まぁ、クライアント/サーバ、マスター/スレーブのようなものですね。ビーコン自体はペリフェラルで、スマートフォン側がセントラルになるわけです。

で、スマートフォンをビーコンに仕立てるにはスマートフォンがペリフェラルになる必要があります。

と、いろいろ調べてましたらこれを発見
Android 5.0でBLE advertising するための要件

おー、ハードルたけー。そんなデバイス手元にあるのか?
もちろんありません。orz

あー、でも EddystoneValidator というEddystoneを検証するアプリの方は何とか Nexus7(2013)で動きました。検証はできそうです。

さて、もう無理か、でも iPhone があるぞ。iPhoneなら対応してるだろ。Eddystoneを発見するサンプルプログラムもあるし、これならできるに違いない!

ということで久しぶりに Mac mini を起動し、開発しようとするが iPhoneが iOS8.3 でXcodeが対応していない。Xcode6.3以上じゃないといかんらしいがそうすると Yosemiteが必要らしい。仕方なくインストール。

iOSでペリフェラルの使用についてはこちらのサイトに詳しく解説されています。
https://sites.google.com/a/gclue.jp/ble-docs/gatt-1/gatt-ios

ペリフェラルには簡単に言うとサービスとキャラクタリスティックというのが含まれています。サービスとキャラクタリスティックを生成し、アドバタイズを開始します。アドバタイズは通知みたいなもんで、「ほらーここに居ますよー」みたいな信号を出すわけですね。基本的にはビーコンはキャラクタリスティックとかは使ってなくて、アドバタイズだけを使用しているようです。(恐らく)

受信側は、アドバタイズを検知して、「おー、じゃあどんなサービスやキャラクタリスティックがあるのかなー」と見に来ます。ビーコンはこれをやらないわけですね。(たぶん)

EddystoneValidatorのソースを見てみると、アドバタイズを検知した後のコードで

byte[] serviceData = scanRecord.getServiceData(EDDYSTONE_SERVICE_UUID);

と引数からサービスデータを取り出してこのデータを検証していますので、アドバタイズを受けたあとでビーコンに問い合わせというのはしていないことがわかります。

で、実際に iOSでアドバタイズを開始します。(抜粋コード)

NSDictionary *advertising = @{ CBAdvertisementDataServiceUUIDsKey:@{ myService.UUID, }, };
[myPeriopheralManager startAdvertising:advertising];

アドバタイズ自体は簡単で、NSDictionaryに必要なものを詰めて startAdvertising すればOKです。ここで先ほどの EddystoneValidator のソースを参照すると、getServiceDataとなっていますから、サービスデータというのを詰めてあげればよさそうです。ここに詰められるのは先ほどのサイトを参照すると
https://sites.google.com/a/gclue.jp/ble-docs/advertising-1/advertising-ios
これだけあります。CBAdvertisementDataServiceDataKey というのがありますねー。きっとこれでしょー。

Byte value[] = { 0xFE, 0xAA, 0x10, 0x10, 0x00, 0x68, 0x61, 0x79, 0x61, 0x74, 0x6F, 0x04 };
NSDictionary *advertising = @{ CBAdvertisementDataServiceDataKey:[NSData dataWithBytes:&value[0] length:10], }, };
[myPeriopheralManager startAdvertising:advertising];

配列の値はこの時点でのものなので気にしないでください。
動かしてみると... あれ?何も起きない。
リファレンスを確認すると、
「That said, only two of the keys are supported for peripheral manager objects: CBAdvertisementDataLocalNameKey and CBAdvertisementDataServiceUUIDsKey.」

ぐぉ、CBAdvertisementDataServiceDataKeyがサポートされていない。orz(2回目)

ダメか、ここまでか、何かないのか。

そうだ!、Mac mini があるじゃないか!Macならビーコンになれるだろ!


ほらー、これを参考にすれば大丈夫だ!
と、やってみるが動かない。何で?
先ほどのサイトをよく見てみると。

「CBPeripheralManager が Yosemite (OS X 10.10) では動かないバグがあるようです。」

がーん サッキ Yosemite シチャッタヨ orz(3回目)

くそー、ここまでか。ここまできて遊べないのか。いやこの過程が遊びだからいいのか。しかし目標を達成できない気持ち悪さが残るな。いやまて、別に達成されなくても Eddystone対応ビーコンを待てばいいだけのことじゃないか。

そうだ、これがあった!


Intel Edison! あー、買っといてよかったー。
新しいファームの2.1になると従来の方法でアップデートできないみたいなのでこちらを参考にアップデート

Bluetoothのスタックは何だろう。どうやら BlueZ というのが入ってるらしい。
ここら辺を参考にしてみました。


しかしどれもうまく動きません。カオスになってきました。ただ唯一、blenoを使用した場合にうまく行きました。(iBeaconとして。唯一というのも何かの勘違いかもしれません)

bluez-ibeaconというのを発見したのでこれを試したところこれも動きました。

ゆらゆらとですが正解に近付いているようです。
あとは iBeacon のフォーマットを Eddystone に変えてあげればOKなはず。

Eddystoneの仕様を見ながら慎重に変更していきます。
ServiceDataのAD Typeはこちらを参照

変えたところだけソース

定義を追加
#define EIR_SERVICE_DATA            0x16
#define EIR_SERVICE_UUID            0x03

データ本体部分を変更
uint8_t segment_length = 1;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(EIR_FLAGS); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x06); segment_length++;
adv_data_cp.data[adv_data_cp.length] = htobs(segment_length - 1);

adv_data_cp.length += segment_length;

segment_length = 1;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(EIR_SERVICE_UUID); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0xAA); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0xFE); segment_length++;

adv_data_cp.data[adv_data_cp.length] = htobs(segment_length - 1);

adv_data_cp.length += segment_length;

segment_length = 1;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(EIR_SERVICE_DATA); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0xAA); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0xFE); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x10); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x10); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x00); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x68); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x61); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x79); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x61); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x74); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x6F); segment_length++;
adv_data_cp.data[adv_data_cp.length + segment_length] = htobs(0x04); segment_length++;

adv_data_cp.data[adv_data_cp.length] = htobs(segment_length - 1);

adv_data_cp.length += segment_length;

データはFlags、ServiceUUID、ServiceDataの順になっています。
Eddystoneの仕様の表と比べていただくとわかりやすいかと思います。

ServiceDataの部分がURLの仕様で、こちらと比べていただくとわかりやすいかと思います。

ではコンパイルして動かしてみます。
EddystoneValidatorを起動すると...


キタ―! ついに念願の Eddystone URL ビーコン(Edison Eddystone)の完成です!

...で、これってどうやってアプリ無しでブラウザで見れるんだろう?OSアップデート待ち?そうなの? orz(4回目)

2015年7月8日水曜日

第2回ライブ&イベント産業展

展示会にイベントシステムを出展しましたのでその内容をご報告いたしますー。


昨年よりもさらにパワーアップしているようです。
さすがにイベント系の展示会なので派手な演出のブースがたくさんあります。


ピナクル株式会社様ブース内に展示させていただきました。


まずは事例として昨年の日比谷で行われた琉球フェスティバルでの情報配信と今年の2月に沖縄の桜坂劇場界隈で行われたアサイラム2015のスタンプラリーの展示です。


こちらはワインイベントで使用したポイント決済のデモです。


たくさんのリストバンドが展示されています。


今回新しく入退場のゲートを展示しています。


登録されたリストバンドをかざすとWelcomeの表示がでます。
強めの電波を出すリーダを使用しているので、タグが手首の内側にあっても問題なく読み取れます。タグの認証は3G回線を使ってクラウドサーバで実施していますが展示会場の電波環境でも問題なく動作しています。


こちらはFacebook連携のデモです。


タグをタッチすると写真を撮影し、イベントのFacebookページにアップされます。

10日まで開催されていますのでぜひ遊びにきてください!

2015年6月9日火曜日

ACR でカードエミュレーション

そういえばACR122Uでカードエミュレーションってやってなかったよなーというわけでトライしてみました。

ACRリーダ自体にはそんなことができるAPIは用意されていませんので、中のPN532チップに直接語りかけることになります。
http://stackoverflow.com/questions/21051315/nfc-acr122-tginitastarget-initiator-releasing-target
こちらに詳しくやり方が書いてあります。

チップ内のレジストリの変更が必要のようですが、手元のACRのを確認すると変更しなくても動きました。

ACR122U Toolでやってみます。

まずは SetParameter で 0x30 を設定します。PN532のマニュアルによれば ISO/IEC 14443-4 PICC を有効にするパラメータのようです。


次に TgInitAsTarget コマンドを使って、Targetモードに移行します。Targetモードは電波を発信せず、Initiatorモードの機器が発する電波を利用して動作します。カードの動きですね。

TgInitAsTarget コマンドは複雑で、以下の形式です。

0xD4 | 0x8C | Mode(1byte) | MifareParams(6byte) | FeliCaParams(18byte) | NFCID3t(10 byte) | Len Gt | Gt[0..n] | Len Tk | Tk[0..n]

MifareParamsの中で、SENS_RES、NFCID1t、SEL_RES を指定します。

これを投げます。


投げてしばらくするとタイムアウトのせいかエラーで返ります。
ので投げてすぐ Galaxy Nexus をかざします。


するとこんな風に返答がきます。うまくいってるようです。が、Galaxy Nexusの方は読取に失敗したみたいな音がします。恐らくACKを返してないせいだと思いますがToolでそこまですばやく操作できないのでプログラムでACK(0x90 0x00)を返してみます。


するとほら!TagInfoでちゃんとタグとして認識してくれます。UIDが4byteの古いTypeAですね。




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 という新しいキーワードが出てきてしまった。まだまだ続きそうです...