読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Universal Windows Platform appでSensorTagを使う

お手軽なBluetoothでいろんなデバイスと繋いで遊べるSensorTagをUWPで使う方法です。公式は、StoreAppまでしか対応していませんが、UWPでも動きました。ということで動かし方のメモです。

Bluetoothでペアリング

SensorTagの横のボタンを押すとペアリングできます。ペアリング時に入力するコードは0000です。(忘れてた)

NuGetの導入

NuGetでSensorTagで検索すると出てきます。

Package.appxmanifestの編集

ここがStoreAppと変わってました。以下のドキュメントによるとm2名前空間を追加して…となっていますが、m2名前空間がいりませんでした。

sensortag.codeplex.com

Package.appxmanifestのCapabilitiesの下に以下の記述を追加するだけでOKです。

<DeviceCapability Name="bluetooth.genericAttributeProfile" />

コードを書く

あとは、StoreAppのころと変わりありません。例えばページロードで温度のセンサーを作成して、画面に置いたtextBlockに表示するなら以下のようなコードになります。

private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    this.tempSensor = new IRTemperatureSensor();
    this.tempSensor.SensorValueChanged += this.TemSensorValueChanged;
    try
    {
        await this.tempSensor.Initialize();
        await this.tempSensor.EnableSensor();
        await this.tempSensor.EnableNotifications();
    }
    catch(Exception ex)
    {
        Debug.WriteLine("Dispose: " + ex);
        this.tempSensor?.Dispose();
    }
}

private async void TemSensorValueChanged(object sender, SensorValueChangedEventArgs e)
{
    var value = IRTemperatureSensor.CalculateAmbientTemperature(e.RawData, TemperatureScale.Celsius);
    await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    {
        this.textBlock.Text = value + "℃ at " + e.Timestamp.ToString("yyyy-MM-ddTHH:mm:ss.fffffzzz");
    });
}

f:id:okazuki:20150829140847p:plain

お手軽ですね。