Top Banner
WindowsストアアプリとIoT @garicchi
40

Wi rt iot

Jul 14, 2015

Download

Documents

Ryota Togai
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Wi rt iot

WindowsストアアプリとIoT

@garicchi

Page 2: Wi rt iot

自己紹介

がりっちです

栂井良太(Togai Ryota)

Microsoft MVP for Windows Platform Development

http://garicchi.com

Page 3: Wi rt iot

セッションの目的

Windowsストアアプリとデバイス連携の概要を知る

Windowsストアアプリのシリアル通信を学ぶ

WindowsストアアプリとArduinoを通信させてみよう

Windowsストアアプリの開発に興味を持っていただけたら..

Page 4: Wi rt iot

WindowsストアアプリとIoT

WindowsとIoTは切っても切り離せない関係

家庭用PCから業務システムまで広く使われるWindowsとデバイスの連携

しかし大半はXPで稼働してそうなデスクトップアプリばかり

Page 5: Wi rt iot

大学の図書貸し出しシステム

タッチ操作なのになぜかマウスポインタが常にでてる

Windows8.1でもっとよくなりそう

Page 6: Wi rt iot

IoT時代にそったソフトウエアを

デバイスにWindowsを組み込むにはほぼタッチが必須

そのための新しいWindowsのAPI

Windowsストアアプリとデバイス連携方法を学んで、IoT時代なWindowsアプリを作ろう!

Page 7: Wi rt iot

WindowsRuntimeのデバイスAPI

WindowsRuntimeの標準デバイス制御API

プリンター スキャナー HID

シリアル通信

ソケット通信

既存のデバイス向けの

制御API 通信インターフェースを持つ

デバイスとの通信API

Bluetooth GATT

Bluetooth Rfcomm

Page 8: Wi rt iot

ストアアプリからデバイス制御の流れ

デバイスは基本的にIdで一意に定める

デバイス列挙して使用したいデバイスIdを取得→各種APIに渡す

使用デバイスの決定 デバイスIDの取得 各APIで制御

Page 9: Wi rt iot

ストアアプリからデバイス制御の流れ

使用デバイスの決定方法は2つ

1. 能動的なデバイス決定(デバイス列挙)

2. 受動的なデバイス決定(デバイスウォッチャー)

使用デバイスの決定 デバイスIDの取得 各APIで制御

Page 10: Wi rt iot

デバイス列挙

今使用可能なデバイス一覧から使いたいデバイスを一つ定める

能動的なデバイス決定

DeviceInformation

W

I

N

D

O

W

S

使いたいデバイスを一つ定める

Page 11: Wi rt iot

デバイスウォッチャー

デバイスが接続or切断されたときをトリガーにイベント発動

デバイスが接続されたときに制御開始できる(アプリが起動している場合のみ)

受動的なデバイス決定

DeviceInformation

W

I

N

D

O

W

S

接続 イベント発生!

Page 12: Wi rt iot

ストアアプリからデバイス制御の流れ

デバイス決定で取得したDeviceInformationを各種APIに渡す

使用デバイスの決定 デバイスIDの取得 各APIで制御

Page 13: Wi rt iot

各種APIにIDを渡して制御開始

取得したDeviceInformationからIDを各種APIに渡す

プリンターとソケット通信は少し特殊

プリンター

スキャナー HID

Bluetoothシリアル通信

ソケット通信

ImageScanner HidDevice

UsbDevice Rfcomm or GATT

PrintDocument StreamSocket

DeviceInformation

ID

Page 14: Wi rt iot

シリアル通信

データを1ビットずつ伝送経路に流していく通信方法

おもに物理接続で利用されている通信方法(RC232Cとか)

http://www.contec.co.jp/product/device/serial/basic.html

Page 15: Wi rt iot

WindowsRuntimeとシリアル通信

Windowsストアアプリからシリアル通信するのはかなりめんどくさい

デスクトップアプリのシリアル通信は楽だった

WindowsRuntimeはセキュアなポリシーで設計

WinUSB

Page 16: Wi rt iot

WindowsRuntimeとシリアル通信

WindowsRuntimeではCOMポート指定でのシリアル通信ができない

WinUSBドライバで接続させると便利

デバイスをWinUSBドライバで認識するためには?

Page 17: Wi rt iot

WinUSBでのデバイス認識

デバイスが接続されたときに、VendorIDとProductIDから内部のGUIDを取得する→WinUSBで認識可能

GUIDの登録方法は2つ

Windows

VendorIDProductID

VendorID,ProductID GUID

1.カスタムinfファイル2.レジストリ直接編集

Page 18: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 19: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 20: Wi rt iot

GUIDの作成

GUID=サービスを識別するための一意のID

レジストリ形式

Page 21: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 22: Wi rt iot

VendorIDとProductID

VendorID=製作会社ID、ProductID=製品のID

4桁の値をそれぞれ取得

Page 23: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 24: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 25: Wi rt iot

ドライバ署名の強制の無効化

PCの設定→保守と管理→回復→PCの起動をカスタマイズする→スタートアップ設定→7キーを押す

キーボードがないと7キーが押せない!

Page 26: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 27: Wi rt iot

カスタムinfファイル作成

http://garicchi.com/?p=16711 に書いてあるinfファイルのテンプレートから.infファイルを作成

VendorID、ProductIDを登録、GUIDを登録

Page 28: Wi rt iot

カスタムinfファイルインストール

作成したinfファイルを右クリックからインストール

Page 29: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 30: Wi rt iot

レジストリにGUIDを登録

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_****&PID_*****>

の下の更に下の改装にDevice Parametersがあるので、その中に新規で文字列を追加

Page 31: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 32: Wi rt iot

ドライバの適用

標準のArduinoドライバを削除

WinUSBドライバをインストール

Page 33: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 34: Wi rt iot

マニフェストファイルを編集

マニフェストファイルにVendorIDとclassIDを記述

classIDは02 * *

http://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/dn263144.aspx

Page 35: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 36: Wi rt iot

デバイス特定

取得したIDからDeviceInformationを取得

vendorID productID

Page 37: Wi rt iot

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

ドライバー署名の強制を無効化

レジストリにGUID登録

GUID値作成vendorID

productID取得

標準ドライバアンインストール

WinUSB適用マニフェストファイル編集

デバイス列挙USBDevice API

で制御

カスタムinfファイルの作成

&インストール

スタート

ゴール

Page 38: Wi rt iot

UsbDevice

標準APIはUsbDeviceクラスを使う

ただしかなりめんどくさい

簡易化したUsbSerialクラスを作りました

http://garicchi.com/?p=16711

Page 39: Wi rt iot

DEMO

Page 40: Wi rt iot

まとめ

Windowsストアアプリとシリアル通信はかなりめんどくさい

可能ならBluetoothとかSocket通信とかにした方がいいかも?

詳しくはhttp://garicchi.com/?p=16711にまとめています

Windowsストアアプリとマイコンを連携させて、デバイス連携するタッチアプリを作ろう!