wi rt iot

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

Upload: ryota-togai

Post on 14-Jul-2015

106 views

Category:

Documents


2 download

TRANSCRIPT

WindowsストアアプリとIoT

@garicchi

自己紹介

がりっちです

栂井良太(Togai Ryota)

Microsoft MVP for Windows Platform Development

http://garicchi.com

セッションの目的

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

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

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

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

WindowsストアアプリとIoT

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

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

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

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

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

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

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

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

そのための新しいWindowsのAPI

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

WindowsRuntimeのデバイスAPI

WindowsRuntimeの標準デバイス制御API

プリンター スキャナー HID

シリアル通信

ソケット通信

既存のデバイス向けの

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

デバイスとの通信API

Bluetooth GATT

Bluetooth Rfcomm

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

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

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

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

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

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

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

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

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

デバイス列挙

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

能動的なデバイス決定

DeviceInformation

W

I

N

D

O

W

S

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

デバイスウォッチャー

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

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

受動的なデバイス決定

DeviceInformation

W

I

N

D

O

W

S

接続 イベント発生!

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

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

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

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

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

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

プリンター

スキャナー HID

Bluetoothシリアル通信

ソケット通信

ImageScanner HidDevice

UsbDevice Rfcomm or GATT

PrintDocument StreamSocket

DeviceInformation

ID

シリアル通信

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

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

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

WindowsRuntimeとシリアル通信

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

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

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

WinUSB

WindowsRuntimeとシリアル通信

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

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

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

WinUSBでのデバイス認識

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

GUIDの登録方法は2つ

Windows

VendorIDProductID

VendorID,ProductID GUID

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

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

GUIDの作成

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

レジストリ形式

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

VendorIDとProductID

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

4桁の値をそれぞれ取得

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

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

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

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

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

カスタムinfファイル作成

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

VendorID、ProductIDを登録、GUIDを登録

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

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

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

レジストリにGUIDを登録

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

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

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

ドライバの適用

標準のArduinoドライバを削除

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

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

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

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

classIDは02 * *

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

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

デバイス特定

取得したIDからDeviceInformationを取得

vendorID productID

WindowsRuntimeのシリアル通信の流れ

キーボードがついている

yes

no

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

レジストリにGUID登録

GUID値作成vendorID

productID取得

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

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

デバイス列挙USBDevice API

で制御

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

&インストール

スタート

ゴール

UsbDevice

標準APIはUsbDeviceクラスを使う

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

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

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

DEMO

まとめ

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

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

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

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