SlideShare a Scribd company logo
BluetoothでGo! 
Bar Windows 8 in 名古屋with 8.1けきょ(Kouji Matsui @kekyo2)
自己紹介 
けきょ@kekyo2 (あまりtweetしてません) 
会社やってます 
「Micoci」と「まどべんよっかいち」 
主にWindows。C#, C++/CLI, ATL, C++0x, x86/x64アセンブラ, WDM, Azure, TFS, OpenCV, Geo, JNI, 鯖管理, MCP少々, 自作PC, 昔マイコン, 複式簿記経理 
アプリケーションフレームワーク設計・アーキテクトが仕事の主体。 最近はWPFを使ったMVVMに足をツッコミ中
Windows 8と言えば… 
Bluetooth 4.0対応 
で、4.0で何が追加されたの?
Bluetooth 4.0って? 
「Bluetooth 4.0 LE」ですよ 
「Low Energy」ですよ 
別名、「Bluetooth Smart」ですよ 
何か呼称がごちゃごちゃしてますが、3.0以前の規格とLEに互換性は無いです。 (大人の事情で4.0としたのかも?) 
1.0~4.0全部ひっくるめて使えるのが、「Bluetooth Smart Ready」です (レシーバーしかない、多分)
Bluetooth 4.0 LEって? 
コンシューマーブランド「Bluetooth Smart」 
「超」低消費電力デバイス向けの規格 ボタン電池で半年~1年 
3.0以前と互換性なし 
プロファイルがいっぱい増えた 
ライバルは、「Zigbee」「ANT+」「RFID」か?
Windows 8との関係は? 
Windows 8.0で「Bluetooth 4.0」対応表明 
しかし、一体何に対応したのか良く分からない (単に4.0プロトコルスタックを配布しただけ?) 
APIについての情報が皆無 
そうこうしているうちに、Windows 8.1現わる!! 
WinRTに名前空間が増えた!
Bluetooth API 
Windows.Devices.Bluetooth 
Windows.Devices.Bluetooth.GenericAttributeProfile 
これぞ 
LEデバイス! 
GATT
公式サンプルコード 
「Bluetooth Generic Attribute Profile -Heart Rate Service」 Demonstrates use of the Bluetooth Generic Attribute Profile (Gatt) Windows Runtime API to interact with a Bluetooth Gattdevice which contains a Heart Rate Service. http://code.msdn.microsoft.com/windowsapps/Bluetooth-Generic-5a99ef95 汚いサンプルコード…(T_T)
取りあえずやってみた 
Bluetooth Smartデバイスが無ければ話にならない 
幸い?ロードバイク乗りなので… 
Wahoo FITNESS BLUE HR (心拍計) http://www.wahoofitness.com/devices/wahoo-blue-hr-heart-rate-strap.html# 
レシーバーはPLANEX BT-MICRO4
Demo(サンプルコード)
まあ… 
サンプルコードを動かしただけでは面白くない 
WinRTって、噂ではデスクトップからも呼び出せるらしいし 
WPFから使えた方が、私的に面白いかも? 
本当にデスクトップアプリケーションから、デバイスにアクセス出来るか?
APIはどう使うの? 
デスクトップアプリケーションからWinRTを使うには、Bingって下さい 例:http://www.codeproject.com/Articles/457335/How-to-call-WinRT-APIs-from-NET- desktop-apps 
Windows 8.1の場合は、「TargetPlatformVersion」を「8.1」にすること (8.0では、新しいAPIは使えない) 
Bluetooth APIはWindows.winmdに含まれているので、追加のアセンブリは不要
APIはどう使うの? 
デバイスセレクタの取得 varselector = GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.HeartRate); 
デバイスの列挙 IEnumerable<DeviceInformation> dis = awaitDeviceInformation.FindAllAsync(selector); 
デバイスの初期化 varservice = await GattDeviceService.FromIdAsync(deviceInformation.Id); 
心拍情報のイベントをフック varcharacteristics = service.GetCharacteristics(GattCharacteristicUuids.HeartRateMeasurement); characteristics[0].ValueChanged+= (sender, e) => { … }; 
心拍計
イベントで心拍数が得られるんだ!(喜) 
いやいや、得られるのは、ペイロードの「生」データ(バイト列)です 解析はプロトコルに合わせて独自に行う必要があります(爆)orz 
プロトコルの情報は、Bluetooth SIGで調べる必要があります https://developer.bluetooth.org/gatt/Pages/GATT-Specification-Documents.aspx(ペイロードの説明は全部文書で、ボックス図がないです。辛い…) 
とりあえず、心拍計については、サンプルコードのデコーダーが参考になるでしょう
Demo(WPF版)
それでは、引き続きお楽しみ下さい 
ありがとうございました

More Related Content

PDF
SignalRブートキャンプ
PDF
.NET Coreから概観する.NETのOSSへの取り組み
PDF
Async DeepDive basics
PPTX
Modern .NET
PPTX
Net fringejp2016
PPTX
Unityで使える C# 6.0~と .NET 4.6
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PDF
これからの「async/await」の話をしよう
SignalRブートキャンプ
.NET Coreから概観する.NETのOSSへの取り組み
Async DeepDive basics
Modern .NET
Net fringejp2016
Unityで使える C# 6.0~と .NET 4.6
今から始める、Windows 10&新.NETへの移行戦略
これからの「async/await」の話をしよう

What's hot (20)

PDF
Pythonで始めるWebアプリケーション開発
PPTX
.NET vNext
PPTX
C# design note sep 2014
PDF
Thread affinity and CPS
PDF
An Internal of LINQ to Objects
PPTX
C#で速度を極めるいろは
PDF
今日からできる!簡単 .NET 高速化 Tips
PPTX
最速C# 7.x
PPTX
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
PDF
The History of Reactive Extensions
PDF
2014年を振り返る 今年の技術トレンドとDockerについて
PPTX
Visual studio 2015 update1 ctpとcsi
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
PPTX
worker_threadsを使った実装の勘所
PPTX
MediaRecorder と WebM で、オレオレ Live Streaming
PPTX
C# 8.0 非同期ストリーム
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
PPTX
dotnetconfJP2017_netcore2
Pythonで始めるWebアプリケーション開発
.NET vNext
C# design note sep 2014
Thread affinity and CPS
An Internal of LINQ to Objects
C#で速度を極めるいろは
今日からできる!簡単 .NET 高速化 Tips
最速C# 7.x
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
The History of Reactive Extensions
2014年を振り返る 今年の技術トレンドとDockerについて
Visual studio 2015 update1 ctpとcsi
【Unite Tokyo 2019】Understanding C# Struct All Things
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
worker_threadsを使った実装の勘所
MediaRecorder と WebM で、オレオレ Live Streaming
C# 8.0 非同期ストリーム
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
dotnetconfJP2017_netcore2
Ad

Similar to Bluetoothでgo! (20)

PPTX
2015 0227 OSC-Spring Tokyo NETMF
PPTX
Visual Studio による開発環境・プログラミングの進化
PPTX
2015 1025 OSC-Fall Tokyo NETMF
PDF
クラウドサービスで作成するノンコーディングBot
PPTX
Lt 110416
PPTX
Decentralized layer2 network ION
PDF
CentOS7にD8を入れてみた
PPT
20021007
PPTX
Hardware control by .NET Core 3.1
PPTX
これから始める Windows io t core
PPTX
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
PDF
なぜ今OSGiか
PDF
Getting Started .NET Core
PDF
.NET の今と今後に思うこと (Tokyo Ver.)
PPTX
LINE BOOT AWARDS に挑む ~テクノロジーファーストでもいいじゃない
PDF
2014 0228 OSC-Spring Tokyo NETMF
PPT
モダンでオサレなwebサイト
PDF
C# runs anywhere, make anything
PPTX
新しい Visual Studio & .NET と新時代のアーキテクチャ
PPTX
Raspberry piと.net coreのstandardな関係
2015 0227 OSC-Spring Tokyo NETMF
Visual Studio による開発環境・プログラミングの進化
2015 1025 OSC-Fall Tokyo NETMF
クラウドサービスで作成するノンコーディングBot
Lt 110416
Decentralized layer2 network ION
CentOS7にD8を入れてみた
20021007
Hardware control by .NET Core 3.1
これから始める Windows io t core
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
なぜ今OSGiか
Getting Started .NET Core
.NET の今と今後に思うこと (Tokyo Ver.)
LINE BOOT AWARDS に挑む ~テクノロジーファーストでもいいじゃない
2014 0228 OSC-Spring Tokyo NETMF
モダンでオサレなwebサイト
C# runs anywhere, make anything
新しい Visual Studio & .NET と新時代のアーキテクチャ
Raspberry piと.net coreのstandardな関係
Ad

More from Kouji Matsui (20)

PDF
パターンでわかる! .NET Coreの非同期処理
PDF
Making archive IL2C #6-55 dotnet600 2018
PDF
Matrix signal controller and BrainPad overview
PDF
Fun with BrainPad
PDF
What's Functional?
PDF
Pitfall for WioLTE
PDF
How to make the calculator
PDF
Write common, run anywhere
PDF
Locality of Reference
PDF
Nespのコード生成
PDF
C#でわかる こわくないMonad
PDF
You will be assimilated. Resistance is futile.
PDF
How to meets Async and Task
PDF
Beachhead implements new opcode on CLR JIT
PDF
Async deepdive before de:code
PDF
continuatioN Linking
PDF
真Intermediate languageのキホン
PDF
Win32 APIをてなずけよう
PDF
式の体を成して無い式を式の体を成すように式と式木で何とかする式
PDF
不健康なIt戦士を健康的にするアレの話
パターンでわかる! .NET Coreの非同期処理
Making archive IL2C #6-55 dotnet600 2018
Matrix signal controller and BrainPad overview
Fun with BrainPad
What's Functional?
Pitfall for WioLTE
How to make the calculator
Write common, run anywhere
Locality of Reference
Nespのコード生成
C#でわかる こわくないMonad
You will be assimilated. Resistance is futile.
How to meets Async and Task
Beachhead implements new opcode on CLR JIT
Async deepdive before de:code
continuatioN Linking
真Intermediate languageのキホン
Win32 APIをてなずけよう
式の体を成して無い式を式の体を成すように式と式木で何とかする式
不健康なIt戦士を健康的にするアレの話

Bluetoothでgo!