かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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

お手軽ですね。