Windows 7 Sensor & Location Platformを使ってみよう!! - その1

さて、前々から書こう書こうと思っていて、書けなかった、Sensor & Location Platfromの使い方をいよいよ、紹介していこうと思います。

まず、始めるに前の準備として、Windows 7 SDKをインストールするか、Visual Studio 2010 Beta 2をインストールしてください。これで、必要なヘッダーファイルやライブラリが、c:\Program Files\Microsoft SDKs\Windows\v7.0A (x64の場合は、Program Files(x86))の下の、Include、Libに、それぞれインストールされます。Sensor & Location PlatformのAPIは、COMで、ダイレクトに使う場合は、VC++ Native Codeでの開発になります。
Includeの下に、Sensorsapi.h, Sensors.hというファイルがあって、Sensorsapi.hには、センサーを扱うためのCOM IFの定義が、そして、Sensors.hには、このプラットフォームがデフォルトで想定している各種センサーのカテゴリ、センサー種別、各センサーが供給するプロパティが定義されています。

とはいえ、Native Codeでの説明はちょっと煩雑なので、Managed Codeで概要は説明します。そのために、

https://code.msdn.microsoft.com/WindowsAPICodePack

から、Windows API Code Packをダウンロードして、適当な場所に展開してください。(ZIPファイルのプロパティで”ブロック”を解除するのを忘れずに)
Code Packの中に、COM Interopの機能を通してSensor & Location PlatformのAPIを使うためのWrapperライブラリーが入っています。
COMをそのまま使いたい場合には、Code Packの中のSensors、Coreプロジェクトを覗けば、それぞれ対応する、COM IF、メソッドがわかるので、そちらを参考にしてくださいね。

そして、実際にセンサーを使ったアプリを開発するためのプロジェクトを作成しましょう。Visual Studio 2008でもVisual Studio 2010でも構いません。(単に試すだけなら、せっかくなので、Visual Studio 2010を使おう)。プロジェクトは、C#、WPF Applicationを選択したものとして、今後の話はすすめます。

あっ・・・っと、もちろん、センサーデバイスとそのデバイス向けのデバイスドライバーのインストールも必要なので、お忘れなく。

プロジェクト作成時にできたソリューションに、ソリューションエクスプローラ上で、Code PackのCore、Sensorsプロジェクトを既存のプロジェクトとして追加してください。そして、新しく作成したプロジェクトに、その二つを参照プロジェクトとして追加します。そして、センサー機能を使いたいコードファイルには、

using Microsoft.WindowsAPICodePack.Sensors;

を追加しておきましょう。ちなみに、VC++ Native Codeでプログラムを作成する場合には、先ほど紹介したSDKのディレクトリのLibディレクトリにある、Sensorsapi.lib、もしくは、Sensorsapi.dllを、リンク時に必要なライブラリとして追加してください。そして、ソースコードでは、Sensorsapi.h、Sensors.hをインクルードすれば利用可能です。

Code PackのManagedライブラリを使った場合の話に戻すと、Microsoft.WindowsAPICodePack.Sensors名前空間の

  • SensorManager
  • SensorChangedEventHandler
  • Sensor
  • DataReportChangedEventHandler
  • SensorReport

といった、クラスを頻繁に使います。ちなみに、Code PackのSensorsプロジェクトには、AmbientLightSensor、Accelerometer3D、BooleanSwitchArrayといった、センサーに特化したクラスも用意されています。これらは、Freescaleさんが提供している、サンプルボードについている、それぞれ、照度センサー、加速度センサー、タッチセンサーアレイを使うためのクラスです。実は、BooleanSwitchArrayセンサーは、Sensor & Location Platformに標準で定義されたセンサーではなく、標準で定義されていないセンサーを使う場合のサンプルとしても利用可能です。

今日はこれまで。各クラスの使い方は、次回の投稿で説明します。

その2へ 目次へ