wi rt iot
TRANSCRIPT
セッションの目的
Windowsストアアプリとデバイス連携の概要を知る
Windowsストアアプリのシリアル通信を学ぶ
WindowsストアアプリとArduinoを通信させてみよう
Windowsストアアプリの開発に興味を持っていただけたら..
WindowsストアアプリとIoT
WindowsとIoTは切っても切り離せない関係
家庭用PCから業務システムまで広く使われるWindowsとデバイスの連携
しかし大半はXPで稼働してそうなデスクトップアプリばかり
IoT時代にそったソフトウエアを
デバイスにWindowsを組み込むにはほぼタッチが必須
そのための新しいWindowsのAPI
Windowsストアアプリとデバイス連携方法を学んで、IoT時代なWindowsアプリを作ろう!
WindowsRuntimeのデバイスAPI
WindowsRuntimeの標準デバイス制御API
プリンター スキャナー HID
シリアル通信
ソケット通信
既存のデバイス向けの
制御API 通信インターフェースを持つ
デバイスとの通信API
Bluetooth GATT
Bluetooth Rfcomm
ストアアプリからデバイス制御の流れ
使用デバイスの決定方法は2つ
1. 能動的なデバイス決定(デバイス列挙)
2. 受動的なデバイス決定(デバイスウォッチャー)
使用デバイスの決定 デバイスIDの取得 各APIで制御
デバイスウォッチャー
デバイスが接続or切断されたときをトリガーにイベント発動
デバイスが接続されたときに制御開始できる(アプリが起動している場合のみ)
受動的なデバイス決定
DeviceInformation
W
I
N
D
O
W
S
接続 イベント発生!
各種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ファイルの作成
&インストール
スタート
ゴール
WindowsRuntimeのシリアル通信の流れ
キーボードがついている
yes
no
ドライバー署名の強制を無効化
レジストリにGUID登録
GUID値作成vendorID
productID取得
標準ドライバアンインストール
WinUSB適用マニフェストファイル編集
デバイス列挙USBDevice API
で制御
カスタムinfファイルの作成
&インストール
スタート
ゴール
WindowsRuntimeのシリアル通信の流れ
キーボードがついている
yes
no
ドライバー署名の強制を無効化
レジストリにGUID登録
GUID値作成vendorID
productID取得
標準ドライバアンインストール
WinUSB適用マニフェストファイル編集
デバイス列挙USBDevice API
で制御
カスタムinfファイルの作成
&インストール
スタート
ゴール
WindowsRuntimeのシリアル通信の流れ
キーボードがついている
yes
no
ドライバー署名の強制を無効化
レジストリにGUID登録
GUID値作成vendorID
productID取得
標準ドライバアンインストール
WinUSB適用マニフェストファイル編集
デバイス列挙USBDevice API
で制御
カスタムinfファイルの作成
&インストール
スタート
ゴール
WindowsRuntimeのシリアル通信の流れ
キーボードがついている
yes
no
ドライバー署名の強制を無効化
レジストリにGUID登録
GUID値作成vendorID
productID取得
標準ドライバアンインストール
WinUSB適用マニフェストファイル編集
デバイス列挙USBDevice API
で制御
カスタムinfファイルの作成
&インストール
スタート
ゴール
カスタムinfファイル作成
http://garicchi.com/?p=16711 に書いてあるinfファイルのテンプレートから.infファイルを作成
VendorID、ProductIDを登録、GUIDを登録
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ファイルの作成
&インストール
スタート
ゴール
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ファイルの作成
&インストール
スタート
ゴール
WindowsRuntimeのシリアル通信の流れ
キーボードがついている
yes
no
ドライバー署名の強制を無効化
レジストリにGUID登録
GUID値作成vendorID
productID取得
標準ドライバアンインストール
WinUSB適用マニフェストファイル編集
デバイス列挙USBDevice API
で制御
カスタムinfファイルの作成
&インストール
スタート
ゴール
UsbDevice
標準APIはUsbDeviceクラスを使う
ただしかなりめんどくさい
簡易化したUsbSerialクラスを作りました
http://garicchi.com/?p=16711
まとめ
Windowsストアアプリとシリアル通信はかなりめんどくさい
可能ならBluetoothとかSocket通信とかにした方がいいかも?
詳しくはhttp://garicchi.com/?p=16711にまとめています
Windowsストアアプリとマイコンを連携させて、デバイス連携するタッチアプリを作ろう!