Proximity APIを使ってWi-Fi Directでデータ通信

さて、データの送受信です。 ConnectAsync()メソッドの戻り値、または、ConnectionRequestedイベントの引数のPeerInformationから作成したストリームソケット、さらにそのストリームソケットから作成したDataReader、DataWriterを使ってデータの送受信を行うコードを紹介します。送受信するデータの形式は、 とします。”フォーマット”、”テキストやイメージなど”のブロックは、可変長データを送りあうために とします。 先ずテキストデータですが、         public async void SendMessage(string message)        {            string msgType = “text/plain”;            uint len = peerWriter.MeasureString(msgType);            peerWriter.WriteUInt32(len);            peerWriter.WriteString(msgType);             uint msgLen = peerWriter.MeasureString(message);            peerWriter.WriteUInt32(msgLen);            peerWriter.WriteString(message);            var writeBytes = await peerWriter.StoreAsync();        } で送信可能です。peerWriterはストリームソケットから作成したDataWriterです。MeasureString()メソッドでフォーマットの文字列や送信するメッセージ文字列の長さを取得し、WriteUInt32()メソッドで書き込みます。string型のデータは、WriteString()メソッドを使って書き込みます。データをすべて書き込んだら、StoreAsync()メソッドをコールして、Connect&AcceptしたPeerにデータを送信します。この例では、フォーマット指定は、MIMEタイプを借用しています。独自に定義するよりは、ありものでよく使われているものを使った方が良いでしょう。 次に画像ファイルです。         public async void SendJpeg(StorageFile jpegFile)        {            string msgType = “image/jpeg”;            uint len = peerWriter.MeasureString(msgType);            peerWriter.WriteUInt32(len);            peerWriter.WriteString(msgType);                       …

0

Proximity APIでWi-Fi Direct通信

WinRT APIは、Proximity APIを通じてWi-Fi Direct通信を行えます。通常のWi-Fiは、アクセスポイントを通じてインターネットにつながったデバイスの間で通信が可能ですが、アクセスポイントが無ければデバイス間で通信はできません。Wi-Fi Directは、アクセスポイントが無くても、サポートしているデバイス間でP2Pで接続し、データ通信を可能にする技術です。ハードウェアは通常のWi-Fiと同じものが使えます。アクセスポイントを介さずにつなげられるので、データ漏えいの危険も減ります。考えてみれば、単にデータを交換したいだけならば、インターネットに接続する必要はないわけです。近場にいる人とのショートメッセージやイメージデータの交換ができるので、ローカルSNSや近場のマルチユーザーゲームなど、アイデア次第で様々な応用が考えられます。 http://www.wi-fi.org/discover-and-learn/wi-fi-direct を見ると、Wi-Fi Directはデータ転送が250Mbpsとかなり高速、ハードウェアは従来のWi-Fiそのままが使える、通信に関するセキュリティ、アクセスポイントとの併用など、かなりいい感じです。これを活用しない手はありません。しかし、現時点ではすべてのWindows 8 PCがWi-Fi Directをサポートしているわけではないので、ご注意。ま、持ってる者同士でつながってください。 使い方を以下に説明していきます。Wi-Fi Directは、Windows.Networking.Proximity名前空間のPeerFinderクラスを使います。最初に、アプリが動作しているPCでWi-Fi Directが使えるかをチェックします。PeerFinderクラスのSupportedDiscoveryTypesプロパティをチェックします。         if ((PeerFinder.SupportedDiscoveryTypes & PeerDiscoveryTypes.Browse) == PeerDiscoveryTypes.Browse) このプロパティは、ビットフラグなので、上の様なチェックをします。この条件がtrueであれば、Wi-Fi Directを利用可能です。falseの場合には、「Wi-Fi Direct機能付きのPCを購入してね」といったメッセージを出しましょうw。 Wi-Fi Directで接続するためには、別のPCからブラウズできるようにしておく必要があります。                PeerFinder.ConnectionRequested +=                   new TypedEventHandler<object, ConnectionRequestedEventArgs>                       (PeerFinder_ConnectionRequested);               PeerFinder.Start(); Start()をコールすると、同じストアアプリがフロントで動いているPC上で、探すことができるようになります。ConnectionRequestedイベントは、別のPCからの接続要求を受け付けるためのものです。 同じストアアプリが動いていて、Start()メソッドをコール済みのPCを探すには、             var peers = await PeerFinder.FindAllPeersAsync();            foreach (var peer in peers)            { と、FindAllPeersAsync()を使います。peersは、PeerInformationというクラスのインスタンスのリストです。DisplayNameプロパティで相手のデバイスの名前が判ります。 Wi-Fi Directで接続する場合、                 var streamSocket =…

0

Proximity APIでタグへのデータ読み書き

Proximity APIによるNFC関連ネタ第二弾です。 Windows 8 ストアアプリでは、Proximity APIを使って非接触タグに対するデータの読み書きが可能です。 タグに記憶されているデータをNFCリーダーで読込んで、以下のことができます。 テキストデータならText Editor、JPEGデータならPhotoアプリというように、読込んだデータフォーマットに合わせてそのデータを扱うアプリを起動 読込んだURLを基にブラウザで表示 Windowsストアアプリを引数付きで起動(インストールされていない場合は、Windowsストアのアプリページを表示) 上の3つができるためには、タグにデータが書き込まれていなければなりません。Proximity APIを使えば、タグにデータを書き込むことができます。 さぁ始めよう…でも非接触タグなんてないよ~って方。例えば、https://www.facebook.com/RealTouchShop とかで買えます。東京駅の八重洲中央口を出て少し行ったところで実物見て買えます。あ、それから、NFCリーダー付のWindows 8 PCをご用意ください。 先ずは、書き込みです。テキストデータの書き込みは、     var device = ProximityDevice.GetDefault();    if (device == null)    {        tbStatus.Text = “This Device doesn’t support NFC!”;        return;    }    var kindSelect = “Spade”;    var numberSelect = “Ace”;    string messageType = “WindowsMime:WriteTag.text/plain”;    string message = string.Format(“mark={0},number={1}”, kindSelect, numberSelect);   …

1

NFCをWindows 8 ストアアプリで活用する

さぁWindows 8 ストアアプリでNFCです。 Win RT APIには、近接通信(NFC)するためのProximity APIが用意されています。NFC付のPCであれば、この機能を使ったアプリケーションを動かすことができます。NFCはNear Field Communicationの略で、ベンダー非依存の近距離無線通信規格です。Bluetooth LEやWi-Fi Direct、非接触タグリーダー/ライター等を使って近距離にあるデバイスやタグの間でデータを交換可能です。 Windows 8 ストアアプリでは、Windows.Networking.Proximity名前空間に用意されたクラスライブラリを使って、NFCを活用したアプリを開発できます。 Proximity APIを使って出来ることは、以下の3種類です。 非接触タグの読込/書込み タップによるPC間のデータ送受信(Bluetooth LE) ブラウズによる発見とPC間のデータ送受信(Wi-Fi Direct) 最初の機能は非接触型のプリペイドに対するデータ読み書きです。皆さんよくお使いの非接触型のプリペイドカードが代表選手です。非接触型のタグにデータを書き込んだり、タグからデータを読み込んだりできます。単にデータを読み込むだけでなく、データの形式(テキスト、JPEG、WAVなど)に紐づいたアプリケーションの起動も可能です。URLを指定してブラウザでWebのページを表示させることもできます。他にも、特定のWindowsストアアプリを起動(インストールされていない場合はWindowsストアの該当アプリのページを表示)させることも可能です。タグをリーダー部分に近づけた時、スタート画面にトースト通知が出て、ユーザーに許可を求めるので、勝手に変なデータを送りこまれることはありません。 次の機能は、PCのNFCデバイスがある場所を4㎝以内に近づけ(タップ)てペアリングを行い、データを送受信する機能です。従来のBluetoothの様にパスコードを入力するなどの手間は必要ありません。タップするとスタート画面の右上に、ユーザーの承諾を得るためのトースト通知が表示されます。ユーザーの承認後、2台のPC間でデータのやり取りが可能になります。 最後の機能は、Wi-Fi Directを用いた通信です。通常のWi-Fiがアクセスポイントに接続してネットワークにつながり、ネットワークを介して通信するのに対し、Wi-Fi Directは、ルーターを介さずに、各PCのWi-Fiデバイスが直接Peer To Peerで接続してデータ通信を行える機能です。アクセスポイントが無くても、Wi-Fi Direct対応のデバイス間でなら、ネットワーク通信ができるというとても便利なものです。ただし同時に接続できるのは1対1ですが。 WinRT APIでは、ProximityDeviceとPeerFinderという二つのクラスが用意されています。1.の機能はProximityDeviceクラスを使って、2.と3.の機能はPeerFinderクラスを使って実装可能です。これらの機能の詳しい説明は、 http://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/hh465221.aspx に書かれているので参考にしてください。今後、各機能について、このブログでも、実際にProximity APIを使うときの注意点などを書いていきますので、こうご期待。残念ながら、NFCは現在販売されている全てのWindows 8 PCに装備されているものではありません。ARM版のWindows RT PC(タブレット)の場合は、ついている場合が多いです。SONYのVAIOは大概ついています。PCを購入する場合は、カタログに、NFC、Bluetooth LE等の言葉があるか確認してみてください。もしくは、量販店などで実際に触って試せる場合には、コントロールパネル→デバイスマネージャを開き、 Bluetoothの下位にBluetooth LEがあるか            2の機能が使える ネットワークアダプターの下位にWi-Fi Directがあるか      3の機能が使える 近接通信デバイスがあるか                     1の機能が使える の三点を確認してみてください。NFC、はっきり言って面白いです。ストアで公開されているアプリもNFC対応は今のところあまりありません。NFC自体新しい機能なので利用シナリオもアイデア次第で色々出てきそうです。NFCを使った良いアプリが沢山出てくれば、NFC対応のWin8 PCも種類が増えるでしょう。 NFC機能を使うアプリは、Package.appxmanifestで、機能タブの”近接”にチェックを入れてください。 皆さん、NFCを活用したアプリを開発して、Windowsストアで公開しませんか? 次回は、タグの読み書きに関するTipsを投稿の予定  

0