時には立ち止まってみるのもいいよ

仕事の合間の息抜き&備忘録。最近息抜きと仕事の区別がついていない。

Raspberry PI 2 + Windows10 IoT Core でアプリ開発

前回、RasPI2に Windows 10 IoT Coreをインストールして、なんじゃこりゃぁってなって、VS2015でアプリが作れるらしいぞ、ってなって、今回に至ります。

 

繰り返しになりますが、Windows10 IoTだけでは何もできないので、アプリを作ってインストールする必要があるわけです。で、VS2015の出番と。

 

VS2015のインストールは、まぁ適当にすればOK.(をぃ

 

まずは、プロジェクトの作成

Windowsユニバーサル」というのが、RasPI2で動くいわゆるマルチプラットフォーム用のプロジェクトです。とりあえず、C#で作成。

f:id:poiuy56:20150803204059p:plain

VS2015のインストール時にユニバーサルアプリの機能をインストールしていなかった場合は、ここで追加インストールするか選択肢が出てきて追加することができます。

 

フツーにプロジェクトを作成しますが、ここで気を付けないといけないのが2点。

  • プラットフォームの設定をARMにしておく
  • ターゲットをリモートにしておく。+認証は無しに設定。

前者は、思わず「ユニバーサルちゃうんかい!」と独りツッコミを入れたところです。

後者のリモートターゲットのIPアドレスはもちろんWindows10IoTCoreが動いているRasPI2のIPアドレスです。

f:id:poiuy56:20150803205140p:plain

また、設定しておくと後々都合がよさそうのが

  • パッケージ名

です。デフォルトではGUIDのような長ったらしい16進文字列なのですが、後でビルドしたパッケージを削除したり起動したりするのに名前を付けておくとわかりやすいです。

f:id:poiuy56:20150803210458p:plain

さぁ、ビルド&実行だ。

ん?プログラム書いてませんね。。

何かつくろうとおもったんですが、ストアアプリ書いたことが無くて、XAMLが分からんくてあきらめました←

ということで、スケルトンのままです。動くことが確認できればよろしい。

 

普通にビルドして、リモートデバッグで実行すると。。。

f:id:poiuy56:20150803211041j:plain

おー。うごいた。って面白くも何ともないですね。デフォルトのアプリが隠れちゃってます。

 

で、ここでハタと気が付くわけです。「これって、どうやってプロセス管理やらインストールやらするんだ??」

 

管理はPowerShell!なんだろうけど、Webでもいろいろできる。

先の疑問をGoogle先生に問いかけてみると、どうも開発PCからPowerShellでリモート接続してコンソールコマンドでごちゃごちゃやるのが正当らしいです。

が、PowerShellってどうも苦手。。で、実は今までずっとスルーしていた「Windows IoT Core Watcher」をいじってたら、

f:id:poiuy56:20150803212444p:plain

ネットワーク上のRasPI2が勝手に検出されていて、しかも右クリックすると "Web Browser Here" っていうメニューが。

『ひょっとしてブラウザで管理できるんじゃね?』

ってことでクリックすると、ブラウザに飛んでRaspi2の8080ポートへ接続しました。

ユーザー名とパスワードを聞かれるので、PowerShellでログインするときの設定でユーザ名="Administrator",パスワード="p@ssw0rd"を入れてみたら、ビンゴでした。

f:id:poiuy56:20150803213251p:plain

上の画面は"AppX Manager"となっていて、いわゆるパッケージ管理画面と思われます。先ほどVS2015の設定で「パッケージ名を設定しといた方が便利」っていってたところの設定ファイルが実は”Package.appxmanifest"っていう名前で、こことつながってるわけですね。

”Installed apps"のところに"TestApp1_1.0.0.0_arm_xxxx"っていうパッケージ名が見えていますが、このTestApp1がVS2015で設定した名前です。その後ろはバージョン番号とプラットフォーム名、あとは開発環境か開発者IDか、そんな感じでしょう。

 

AppX以外にも、プロセス一覧やデバイス一覧、今はまだ使えないWiFiBluetoothの設定画面もここにあります。興味のある方は8080ポートにつないで覗いてみてください。

 

でも、バッテン出すだけじゃぁねぇ。。。

RasPIのテストアプリといえば「Lチカ」ですが、限りなくソフト屋さんの自分は敢えてグラフィック周りを。っつーてもやっぱりスケルトンのみですが。

 

VS2015のプロジェクト新規作成で、C#ではなくてC++からWindowsユニバーサルアプリを選ぶと、「DirectXのアプリ」が作れたりします。

f:id:poiuy56:20150803214637p:plain

こいつをひな形にしてビルド&実行すると、プロジェクト作成画面のサムネ画像のような四面体がグリグリ回ってFPSが表示されます。RasPI2で!

RasPIでDirectX11とかが動くのって不思議な感じですね。

 

まぁ、でもしかし、こんな単純なCubeですが15FPSくらいです。遅いです。

raspbianのOpenGLデモに比べれば、ハエが止まりそうです。

 

Web管理からデバイスドライバの一覧っぽいのも見えるんですが、ディスプレイドライバが "Microsft Basic Display Driver" ってなっていて、どうもアクセラレーションは特に効いてなさそうな雰囲気です。

 

が、無線関係も含めてまだ改善はされていきそうな気配なので、今後に期待したいところです。

 

 

Raspberry PI 2 に Windows 10 をインストールするのだ。(正式版)

まず初めに言っておきましょう。

 

Raspberry PI 2 にインストールできるのは、

Windows 10 IoT Core

であって、普通のWindows 10ではありません!!

 

インストールするまでよくわかってなかったので、とりあえず先に言っといたほうがいいかなと。

 

何が違うんや、というと、

Windows 10 IoT Coreは、それ単体ではなんにもできません!

ということで、全然違います。IEなんてありません。というかアプリは何も入っていません。動作環境というかプラットフォームがWindows(みたいなの)なだけです。

 

前置きが長くなりましたが、インストール手順を。

 

インストールするときには普通のWindowsが必要。10じゃなくても可

実はInsiderPreviewのときとかは、RaspberryPI2の起動ディスクを作るためにWindows10が必要だったのですが、これはSDカードに書き込むコマンドがWindows10にしか入っていなかったためです。

 

Windows10の正式リリースと同時に、RaspberryPI用のツールも更新されて、SDカードへの書き込みツールが同梱されるようになりましたので、書き込み側はWindows8.1でも可能です。(7では試してません)

 

RaspberryPIの起動SDへイメージを書き込むには、

Windows IoT - Setup your Raspberry Pi 2

からWindows 10 IoT Core toolsをダウンロードしてインストールします。

MSDNサブスクリプションからもDLできるようです。

 

ISOファイルがダウンロードできますが、中身はアプリのセットアップが1本だけですので、それを実行します。

このツールは、VisualStudio2015で作ったRasPI2用のアプリをデバッグするのにも必要になるものです。

 

インストールが済んだら、「Windows IoT Image Helper」というツールを起動します。

f:id:poiuy56:20150730200619p:plain

実行すると、SDカードのデバイスと、書き込むイメージファイルを選択するGUIが出てきます。

f:id:poiuy56:20150730200718p:plain

SDカードは8GB以上のものが必要です。

イメージファイルは、"flash.ffu"というファイルがツールをインストールしたときにProgram Files下にコピーされていますので、それを指定します。

あとは、「Flash」ボタンを押せばコマンドプロンプトが開いて書き込みが始まります。数分経つと終了です。特に何のメッセージも出ません!漢らしい。

 

RasPI2で実行

起動中。。

f:id:poiuy56:20150730195450j:plain

 

起動したらさぞもっさりしたWindows10のスタートメニューが出てくるんだろうと思ってwktkしてたら、

f:id:poiuy56:20150730195759j:plain

なんかボクの知ってるWindowsじゃない、感。

で、セットアップは言語選択のみで「Next」。

f:id:poiuy56:20150730195836j:plain

どうやらこれが立ち上がった状態らしい。。

 

まぁ結局のところは冒頭に書いた通りで、写真の「デバイス情報」のほかには

基本設定は言語選択のみ。Wi-Fiってのがちょっと気になったんですが手持ちのUSB Wi-Fiモジュールはどれも認識しませんでした。。。有線LANは使えるようで、「デバイス情報」からDHCPで割り当てられたIPアドレスが取得できていました。

 

チュートリアルは、これ自体がVisualStudio 2015 でビルドされたアプリケーションのようで、ソースも取得できるようです。

 

が、開発環境にWindows10とVisualStudio 2015 が必要なんですよね。。敷居が高いなぁと思うのはボクだけでしょうか。。

 # 追記:開発用OSはWindows8.1でいけました。

 

また時間ができたらアプリの一つも書いてみたいところです。

Raspberry PI2でPCゲームをリモートプレイ その2

 

前回、Gamepadについて何も書かなかった、というか、H.264の映像配信が見られたところで満足して実際にゲームをしてなかったので、続きを。

 

やろうとしてるのはFF14なのでまぁキーボードとマウスでもできる、っちゃぁできるんだが、ゲームはやっぱりコントローラでやりたい、というのが個人的な心情である。

で、moonlightでUSBゲームパッドを使う方法について、まとめ。

 

使用したコントローラはLogicool Gamepad F310 というやつで、まぁヨドバシあたりで安価で購入できるやつだ。これをRaspberryPIにつなぐと、あっさり認識はする。

$ lsusb

Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 046d:c21d Logitech, Inc. F310 Gamepad [XInput Mode]
Bus 001 Device 005: ID 099a:7202 Zippy Technology Corp.

4番目のやつですな。/dev/inputを見てみると、event0, event1, event2と3つ出来上がっている。。キーボードとマウスと、Gamepadなのだが、どれがどれに該当するのか確認する方法がよくわからん。。

で、どうせキャラクターデバイスだからcatしてGamepadいじればなんか出るんじゃないの?と思ったら、そのとおりでした。

$ cat /dev/input/event0

どうやらevent0がパッドでevent1がキーボード、event2がマウスらしい。

が、これって認識した順番のような気がするのであまりあてにならんなぁ。。ちゃんと一意に確認する方法だれかおしえてください(他力本願)

 

とりあえずGamepadがちゃんと入力できそうなのは分かったので、パッドのボタンマッピングを設定する必要がある。moonlightでactionにmapを指定すると、マッピングファイルを出力することができる。言われたボタンを押す(倒す)とデバイスのイベントコードをファイルに書き出す仕組みのようだ。

$ moonlight map f310.map

Move Left Stick Right
Move Left Stick Up
Press Left Stick Button
Move Right Stick Right
Move Right Stick Up
Press Right Stick Button
Press D-Pad Right
Press D-Pad Down
Press Button X (1)
Press Button A (2)
Press Button B (3)
Press Button Y (4)
Press Back Button
Press Start Button
Press Special Button
Press Left Trigger
Press Right Trigger
Press Left Bumper
Press Right Bumper

 Playstation系のパッドに慣れているので「Left Triggerってなんや?」ってなったけど、パッドを見たら「LT」ってかいてたのですぐわかった。

コマンドの最後に指定したf310.mapが、出力されたmapファイル。これをstreamで指定すればOKだ。

カレントディレクトリに、前回と同様認証用の鍵ファイルなどを置いておくことを忘れずに。。

$ ls

client.p12  client.pem  f310.map  key.pem  uniqueid.dat

$ moonlight stream -1080 -30fps -app "Final Fantasy XIV: A Realm Reborn" -mapping f310.map 192.168.0.5

 

f:id:poiuy56:20150605001929j:plain

こんな感じ~。左のモニターがPCで右がRaspberryPIだす。

モニターを並べるとさすがにちょっと遅延があるのがわかるが、実際に操作してる限りではPS4/VITAのリモートプレイより快適な気がする。

 

ではでは~

 

 

LOGICOOL ゲームパッド F310r

LOGICOOL ゲームパッド F310r

 

 

 

Raspberry Pi2 Model B ボード&ケースセット (Standard, Clear)
 

 

 

 

 

Raspberry PI2 でPCゲームをリモートプレイするのだ

ここに記事を書くのは久しぶりだ。。

忙しくて書いてる暇がなかったからなんだけど、時間ができて速攻GTX960を買ってFF14がPS4からPC版に移行したのは我ながらアホだと思う。

ついでに言うとサーバもAlexからShinryuに移動しますた。

 

というわけで、最近のGeForceでしかできないGameStreamという機能を使ってみようというのが今回の試みである。

 

GameStreamってのは、要するにPS4 → PSVitaで言うところのリモートプレイのことですな。

GeForceドライバと一緒にインストールできる、GeForce Experience(GFE)っていうのを使って、PCのゲームを実行してレンダリングした画面をGeForce内蔵のH.264エンコーダでよその端末にストリーミング配信する、っていう機能である。もちろん、リモート端末からゲームコントローラやマウス・キーボードで操作できる。

 

もともとはnVidia謹製のSHIELDってゲーム端末向けの機能のはずなんだが、通信プロトコル自体はとても単純でリモート端末用にmoonlightっていうアプリが公開されている。AndroidiOSでも動くようだが、ここはあえてRaspberryPIで動かそうと!いうわけだ。いや、動かしてる人がいるのでオレもオレも!というわけだ。

かなり前からあったものなので知ってる人には何をいまさらってな感じだろうが、そんなことはどうでもよろしい。

 

moonlightをraspberrypiで動かしてる動画はこちら→

www.youtube.com

この当時はmoonlightじゃなくてlimelightって呼んでたらしい。

 

PC側の準備

GameStream + Moonlightを使用するには、まずPC側に

  • GeForce 650以上
  • GeForce Experience 2.2.1以降と対応ドライバ

が必要だ。

GFEを起動して「ゲーム一覧を更新」すると、PCにインストールされている&GFEが対応しているゲームを探し出してくる。GameStreamを使うには、単にインストールされているゲームをそのまま実行するのではなくて、GFEから起動する必要がある。

想像だが、GFEがゲームプロセスに介入してDirect3Dレンダリングパイプラインをフックしているのではないかと思われる。そんなことをすると普通はゲーム側のプロテクトに引っかかるので、ゲーム側にもGFEに対応させる何かの処理が入っているのかもしれない。

 

さて、めでたく目的のゲームが見つかった場合は、「ゲーム」タブに表示されて、PC側の準備は完了だ。

f:id:poiuy56:20150604004659p:plain

 

RaspberryPIの準備

moonlightはgithubからソースを入手して自分でコンパイルする。

のだが、どうも本家サイトのソースはStableなWheezyベースのRaspbianではなくてJessyベースの何かを使っているらしく、バージョン違いやら何やらでコンパイルができない。

んで、ここらへんを参考に、必要なパッケージたちをインストール。

$ sudo apt-get install cmake libopus-dev libexpat1-dev libjs-jquery libssl-dev libasound2-dev libudev-dev libavahi-client-dev libcurl4-openssl-dev

wget http://archive.raspbian.org/raspbian/pool/main/libe/libevdev/libevdev-dev_1.4.2%2bdfsg-1_armhf.deb
$ wget http://archive.raspbian.org/raspbian/pool/main/libe/libevdev/libevdev-tools_1.4.2%2bdfsg-1_armhf.deb
$ wget http://archive.raspbian.org/raspbian/pool/main/libe/libevdev/libevdev2_1.4.2%2bdfsg-1_armhf.deb
$ sudo dpkg -i libevdev*

次に、 ソースを取得。本家のirtimmerじゃなくて7hunderbugからmoonlight-raspbianブランチを持ってくる。。

$ git clone --depth=1 https://github.com/7hunderbug/moonlight-embedded/ -b moonlight-raspbian

$ cd moonlight-embedded

$ git submodule update --init

あとは、ビルドだ!

$ mkdir build

$ cd build

$ cmake ../

$ make

$ sudo make install

これでめでたく、/usr/local/bin/moonlightが生成される。

さぁ、使ってみるのだ!

GFEを使用しているPCのアドレスを192.168.0.5として、まずはペアリングを行う。

$ moonlight pair 192.168.0.5

Generating certificate...done

Please enter the following PIN on the target PC: 1234

みたいなのが出る。最初に証明書だか鍵だかを作成している様子で、カレントディレクトリにclient.p12とclient.pemというファイルが出来上がっている。以降、moonlightコマンドを実行する際にはこのファイルをカレントにおいて実行する必要があるようだ。

 

んで、ターゲットPCでPINコードを入れろと言われてるのでPCを見てみると、

f:id:poiuy56:20150604013432p:plain

おー。なんか出てるー。

ここにPINコードを入れればコンソールに"Paired"と出て、認証はOKだ。

あとは、ゲーム実行コマンド…

$ moonlight stream -app "Final Fantasy XIV: A Realm Reborn" 192.168.0.5

おおおおおお。でたー

ってスマホ会社に忘れてきたから写真とれねーーーww

 

デフォルトでは720pで、速度的には何の問題もないのだが、解像度を720にしてしまうとFF14のUI配置が崩れてしまうので1080に変更。

1080ではさすがに60fpsでは間に合わないらしく、2秒くらい遅延が発生して却下。30fpsだとなんとか使える感じ。

(※) READMEにはデフォルトが30fpsと書いてあるけど、明示的に30fpsを指定すると遅延が減った。そして720のときより明らかにフレームレートが落ちてる。ので、デフォルトは60fpsなんじゃないかなと。。まぁ、720でも1080でも30fpsなら使い物になります。

 

これ用にUSBのゲームコントローラもう一個買ってこようかな。。

 

ということで、GTX650以上&RasPI持ってる人はおためしあれ~

 

 

 

 

Chromecast 買ったった。

たまたまSofmapによったときに見つけて思わず衝動買い。。

 

f:id:poiuy56:20140604102817j:plain

 

これで\4,200かぁ。。ACアダプタと延長コードがなければ\3,000くらいにできそうですな。。

 

さぁ、Setupだ。会社で。。

 

ん? HDMI入力のあるモニターがないぞ。。

なんてな。ふふふ。そんなこともあろうかと、HDMI→ DVI変換ケーブルを用意しておいたのだ。はっはっはっ。

 

f:id:poiuy56:20140604105008j:plain

ダメじゃん。オスじゃん。積んだ。終了。

 

素直に自宅のリビングにつなぐか。。。

 

PSP出荷完了(生産終了とは違うのか?)

PSPが六月で出荷完了だそうな。。(これとか)

 

なんか、感慨深いな。

 

  • 初代 → CFW入れて遊んだ。モンハンやってた頃が一番使ってたな。ボタンがつぶれたのを交換したり。
  • 3000 → 「めっちゃ軽っ」って思ったのを覚えてる。いちばんやったのはGodEaterかなぁ。Divaかも。
  • 3000 その2 → 奥さんに買った。稼働率低い。
  • 3000 その3 → 娘に買った。テイルズ専用w

自分は既にVitaに移行してるけど、娘あたりが「おねだり大作戦」に便乗してくるかも。

いいけど。←

 

で、思ったんだが、UMD Passport対応少なすぎません??そして、Passport対応でも高すぎじゃない???既にソフトを持ってるんだから、タダとは言わないけどせめて千円以下にして欲しいなあ。。

 

Windows8.1 アプリ検索 簡単版

前回の記事でごちゃごちゃ書いたんですが、、

 

結局、

  • スタートメニューを開く
  • 検索したい文字を打つ

だけでできました。。orz

 

スタートメニューには検索入力するようなテキストボックスが表示されてないのですが、キーを打つと勝手にチャーム領域に検索ボックスが出てきてちゃんとインクリメンタル検索できますた。。

 

f:id:poiuy56:20140518161631p:plain

 

「すべての場所」からの検索になるので若干遅いけど、こっちのほうがそりゃ簡単ですわ。。

スタートメニューだけじゃなくて、アプリビュー側でも文字を打つだけでいけます。(Alt+D押さんでいい。)

 

Windows 8.1 はよくできてるね!!