ターゲット基板開発環境一覧

Ubuntu で USBシリアルケーブルを使う 続編

前回は minicom でつながるのを確認しました。あれからそもそも Raspberry Pi だったらシリアルコンソールで操作も可能だったことを思い出して、そちらでも確認をと思ったので今回のメモを書いてます。
Raspbery Pi は Raspberry Pi 2 のことをさしています。またシリアル出力を有効化する詳細な手順と、一般ユーザーでもシリアルを使えるようにする手順については今回省略させていただきます。一般ユーザーでも使えるようにする方法は以前の日記を参照してください。

ツール: gtkterm

GUIもあるターミナルソフトです。これをインストールしてみました。

デフォルト設定を作ることができ、ここでデバイスのパラメータを指定することができます。GUIから起動させる場合にはデフォルト設定を使った方が便利な気がします。
ubuntu-serial-1
コンソールであれば起動のオプションで指定も可能です。省略すればデフォルト設定が使われるようです。
ubuntu-serial-2

ツール: screen

コンソール作業では割とおなじみらしい screen です。

使い方はオプションにデバイスらのパラメータを入れます。

ubuntu-serial-3
screen の終了のさせ方は知らないとわからないので注意。
”Ctrl+a”, ”k”と押します。

終了確認が問われるので “y” をタイプして終了します。
ubuntu-serial-4

起動時のログなど

Raspberry Pi の起動時からシリアルをつないであったとき、以下のように動いてました。
ubuntu-serial-5


USBシリアルケーブルを買った(PL2303のやつ)

Raspberry Pi 2 との接続のためにお遊びで USB シリアル変換ケーブルを買ってみたのですが、 Windows 8.x 以降ではいろいろな問題のために使えないというシロモノでした。普段の環境は Windows7 だったりするので問題に直面しているわけではないですが、今後のことも考えて対策を考えてみました。
 その結果が Ubuntu で使用する!です。こちらならばドライバの問題はなさそうなので。今回はその設定についてメモしておこうと思います。 続きを読む


Raspberry Pi 2 で D3D12 (正式版IoT Coreにて)

以前のプレビュー版のときには失敗してしまった DirectX12 (D3D12) の動作ですが、正式版になった今はどうだろうかと調べてみました。結論からすれば、うまく動作しているようで、さらにはデバッグ情報もきちんととれそうな感じなのでお遊びにすごくよさそうな印象です。

確認

このコマンドプロンプトが使えるようになったので、以前うまく動かなかった D3D12 についてどうだろうと確認してみました。とりあえずは d3d関連の DLL を確認してみたところ以下のようになっており、DirectX9 は完全に死滅しているようです。しかし D3D12 については今も DLL が新しいモノが入っているのでちょっと期待できそうです。
windows10-iot-core-rpi2-system32

早速コレを動作確認したいとおもいます。
続きを読む




Raspberry Pi 2 向け Windows10 IoT Core Insider Preview で DirectX11 アプリ

前回の内容と手順自体はほとんど変わらないで、 DirectX11 のテンプレートを使用するだけで Raspberry Pi 2 でも動作することを確認できました。動作は今のところ重いですが・・・。

DirectXアプリのプロジェクト

プロジェクトの作成は Visual C++ / Windows / Windows Universal / DirectX App (Windows Universal) を選びます。

vs2015rc-directxapppi2-project

プロジェクトが作成されたら、 x86 の構成ではなく ARM の構成を選びます。あとはデバッグの設定を前回と同様に Raspbery Pi 2 のIPアドレスを設定します。以下の図は前回の流用です

windows10-iot-debug-conf

これで実行すると Raspberry Pi 2 の画面で以下のようにキューブが回っているのを確認できます。1280×1024 という解像度でおよそ 17FPS でした。強引に 640×480 にしてみましたがそれでも 40FPS 程度. HARDWAREデバイスが DirectX 11.1 で作成されており問題はなさそうなのですが、正式版が出る頃にはパフォーマンスアップしているといいなぁと思います。

DSC_0388


Raspberry Pi 2 向け Windows10 IoT Core Insider Preview で HelloWorld

Windows 10 IoT Core Insider Preview を Raspberry PI 2 にインストールしたら、早速 Hello,world 的なものを作成してみます。

VisualStudio 2015 RC にて、 C# / Windows / Windows Universal 内の BlankApp テンプレートを選択して、新規のプロジェクトを作成します。ここでは以下のように HelloWorldPI2 としています。

vs2015rc-helloworldpi2-project

Windows10開発者モードの有効化

初回のプロジェクトの作成後、以下のような画面が表示されます。 Raspberry PI 2 で動かす前に、 Windows10 開発ホストでアプリを動作させる場合には指示に従って設定を行っておきます。

windows10-developer-mode-dlg

この設定は、スタートメニューから 「コマンドプロンプト」の項目を右クリックして、「管理者として実行」を選択します。その後、gpedit.msc と入力します。
そして、ローカルグループポリシーの中の以下に示す項目、「アプリパッケージの展開」を選択します。

windows10-developer-mode-gpedit

そして、次の項目を有効に設定します。

  • Allows development of Windows Store apps and installing them from an integrated development environment (IDE)
  • 信頼できるすべてのアプリのインストールを許可

windows10-developer-mode-gpedit2

設定が終わったら、コンピュータを再起動します。

参考: https://msdn.microsoft.com/library/windows/apps/xaml/dn706236.aspx

HelloWorldPI2

先ほど作成したプロジェクトを開いて、コードを編集していきます。
MainPage.xaml を以下のように Grid タグの部分を編集します。

続いて Click のイベントハンドラの中身を以下のように記述します。これは MainPage.xaml.cs ファイルの中にあります。上記の Clink= までをタイプしたとき、「新しいイベントハンドラー」とか表示されるのでそれを選択すると以下のメソッドが自動的に作成されます。作成されない場合には仕方ないので、手動で記述します。

ここまでの内容でビルドして、ローカルのPCで実行してみると以下のような感じになります。この図はボタンを押した状態のものです。

windows10-helloworldpi2

RaspberryPI2 で実行する

作成したプログラムを Windows IoT Core が動作している Raspberry PI2 で実行してみます。

まずは構成を x86 から ARM に切り替えます。続いて、プロジェクトのプロパティを開き、デバッグの項目を開きます。そして以下のように設定を行います。

  • Target device を「リモートコンピュータ-」
  • Remote machine の項目に Raspberry PI 2 に割り当てている IP アドレス
  • Use authentication のチェックを外す

windows10-iot-debug-conf

設定が終わったら早速実行してみます。以下のように Raspbery PI 2 に接続しているモニターからアプリの内容が表示されたら成功です。

DSC_0387

リモートデバッグによる実行なので、 VisualStudio からはブレークポイントの設定を行うことも出来ます。

参考: http://ms-iot.github.io/content/win10/samples/HelloWorld.htm

うまくいかない場合には、RaspberryPi を再起動してから、再びリモートデバッグを試みてください。


Raspberry Pi 2 向け Windows10 IoT Core Insider Preview をインストール

Raspberry Pi 2 用の Windows10 IoT Core Insider Preview が入手可能になったので、現時点におけるインストール手順をまとめておきます。

必要なもの

  • Windows10 Insider Preview がインストールされた PC
  • 上記PCで扱える microSD 対応のカードリーダライタ
  • 8GB 以上の Class10 の microSD カード

注意事項として、 WiFi アダプタは使用不可能なようで、有線 LAN を使用することになります。また、マウスやキーボードもなにやら相性があるようで、手元にあったメーカー不詳のマウスが使えませんでした。

イメージのダウンロード

ダウンロードのページからイメージファイルをダウンロードしてきます。現時点においては Windows_IoT_Core_RPI2_BUILD.zip というファイルになっているかと思います。
ダウンロードできたら展開しておきます。

イメージの書き込み

書き込み先の microSD をセットして Windows10 環境から操作します。まずは管理者モードでコマンドプロンプトを開きます。そして以下のコマンドをタイプします。

diskpart
list disk
exit

ここで表示される内容で、 microSD カードが何番目のものであるかを確認してください。自分の手元では以下のように表示されました。この場合だとディスク5が microSD でした。

C:\Windows\system32>diskpart
Microsoft DiskPart バージョン 10.0.10074

Copyright (C) 1999-2013 Microsoft Corporation.
コンピューター: WIN10TP
DISKPART> list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン           119 GB      0 B
  ディスク 1    メディアなし             0 B      0 B
  ディスク 2    メディアなし             0 B      0 B
  ディスク 3    メディアなし             0 B      0 B
  ディスク 4    メディアなし             0 B      0 B
  ディスク 5    オンライン            29 GB    22 GB

DISKPART> exit
DiskPart を終了しています...

C:\Windows\system32>

続いてイメージの書き込みを行います。以下のコマンドをコマンドプロンプトで入力します。PhysicalDrive5 なのは先ほど確認したようにディスク5だったからです。またzipを展開した内容が C:\Work にあると想定しています。 これは各自の環境にあわせて読み替えてください。

dism.exe /Apply-Image /ImageFile:C:\work\flash.ffu /ApplyDrive:\\.\PhysicalDrive5 /SkipPlatformCheck

dism-rpi2-image

書き込みが完了したら、ハードウェアの安全な取り外しを行ってからSDカードを抜いてください。

Windows10 IoT Core Insider Preview の起動

書き込んだ microSD カードを Raspberry Pi2 に挿入して電源をいれます。少し時間がかかりますが問題なく起動してくれば成功です。この間に再起動も行われるようなので以下の画面のようになるまで見守ってください。
いつもの Windows のデスクトップが起動してくるわけではない点には注意です。現時点ではほとんど単体での操作ができないのでPCによるリモート操作が基本になります(アプリをスタートアップ等に設定すればこの限りではないでしょうが・・・)


※ 上記画像は拝借

PowerShellでRaspberryPi2へ接続

せっかくなのでここで ssh のようにPCからこの RaspberryPi2 に接続してみようと思います。管理者のコマンドプロンプトから start powershell とタイプして、 PowerShell を起動します。そして以下のコマンドをタイプしてください。

PS> net start WinRM
PS> Set-Item WSMan:\localhost\Client\TrustedHosts -Value [RPI2のIPアドレス]
PS> Enter-PSSession -ComputerName [RPI2のIPアドレス] -Credential [RPI2のIPアドレス]\Administrator

ここで聞かれるパスワードはデフォルトでは : p@ssw0rd となっているようです。

powershell-to-rpi2

あとは RaspberryPi2でのシェルとなっているので色々と操作ができます。以下のようにすれば再起動が出来ます。(/s スイッチでシャットダウンできるようですが、手元ではリブートになってしまいました)

参考: http://ms-iot.github.io/content/win10/samples/PowerShell.htm


Jetson TK1 で USB WiFi ドングルを使う

以前 RaspberryPI で USB WiFi ドングルの話を書きましたが、同じものを Jetson TK1 で使えるのでは?と思って試してみました。

予想外にも、装着して起動してみても wlan0 のインターフェースは出現しませんでした。よくよく見るとドライバっぽいものはロードされており中途半端な感じです。
起動ログを確認すると rtlwifi/rtl8192cufw_TMSC.bin がロードできない意が出力されており、確かにファイルがフォルダごと存在していませんでした。

http://elinux.org/Jetson/Network_Adapters の部分を確認すると USB WiFi アダプタとしては使用可能な部類になっています。しかし丁寧にこの表の下部を読んでみるとそこにダウンロード先が書いてあります。 rtl8192cufw.bin.zip というものです。

このファイルをダウンロードして展開すると、見事に rtl8192cufw_TMSC.bin があるので、これをドライバが期待するパスに配置してあげます

これで再起動すると無事に wlan0 が使用可能状態となり、ネットワークが使用可能となりました。

またパワーマネジメント関連も同じようにあるのか?と確認したところ、
/sys/module/rtl8192cu/parameters の中にはそのような項目が存在しませんでした。
ただしばらく放置してみて、外部からTK1に向けて ping を打ってみると反応しませんでした。同じような気配です。対処する方法についてはまだ見つかっていません。

今回の件とは違う話になりますが、JetsonTK1はシステム全体がもっさりとしている気がします。Raspberry PI ではその重さとかは感じませんでしたが、同じディストリビューションではないですし、簡単に比較はできません。(Ubuntu vs Debian ですし)
RPI2が非力なことを自覚しておりそれに合わせたディストリビューション選択、および、コンポーネントの導入をしているため自分の思っていた以上に軽快に動いていた感なのかと思っています。


Raspberry PI 2 を WiFi で運用する

特に Raspberry PI 2 に限った話ではないのでしょうが、せっかく小型な機械なので WiFi のみで使えるようにしたいなと思ってしまったのが運の尽きでした。これが意外と面倒な感じでした。

問題点その1 アダプタが高発熱

手持ちの USB-WiFi アダプタを接続したところ正常に認識してうまくつながったので OK だと思ってました。しかしながら、 USB ドングルがとてつもなく熱くなり、これはやばい!と思えるレベルになってました。USB端子部なんかUSBのカイロレベル以上でした。
そんなアダプタは Logitec の LAN-W300N/U2S というシロモノでした。

この手の熱い!という話は他にもあるようで意外と定番のもののようでした。
他の定番に熱いものとしては、WLI-UC-GNM だそうです。

解決

比較的発熱が少ないものとして定番のようだったのが プラネックスのアダプタで、 GW-USNANO2A という型番のものです。割と安価だったのもポイントで、自分は Amazon で購入しました。
同時間使ってみても発熱具合はかなりマシになりました。使ってみてUSBを抜いて端子部分を触っての確認をしてみましたが暖かさは感じますがずいぶんとマシになりました

問題点その2 PCから接続できない

Raspberry PI でネットワークを使用していたり、 PCから ssh で接続したままの状態のときには問題に気づきませんでした。しかし未接続のまま放置して、再度接続を試みると接続できない状態になっていました。 ping を打ってみても反応せず、しかし Raspberry PIでの状態を見ると IP はちゃんと降られているままですし、謎でした。

これには2つの問題点が絡んでいたと思います。
1つは有線と無線のローミング設定、もう1つがパワーセーブモードの存在です。

ローミング設定を切る

有線設定を優先するようになっていたようで、普段は WiFi を使用する前提で、設定ファイルを方を書き換えることにしました。自分の環境では以下のように /etc/network/interfaces ファイルを書き換えています。

WiFiのパワーマネージメントをオフにする

今使用している GW-USNANO2A がどのドライバを使っているか確認してみると、 8192cu というものでした。これを元に現在の状態を以下のパラメータを参照してどうなっているか確認してみます。

上記のように1が表示されました。この値の意味は、次のようになっているとのことです。
0: 省電力管理無効
1: 最小限の電力管理
2: 最大限の電力管理

というわけで電力管理が有効なようで、これを 0 となるようにしたいと思います。
/etc/modprobe.d/8192cu.conf を作成し、この中に以下の記述を入れておきます。

再起動して、再度 rtw_power_mgnt の値を表示させてみて 0 となっていれば設定完了です。

まとめ

以上の手順でとりあえず今のところは無事に WiFi で使用できるようになりました。
Raspberry PI は情報が豊富なので、丁寧に調べれば解決にたどり着けるのがよいですね

参考

Raspberry Pi: Wi-Fi USB アダプタ(Wi-Fi ドングル)の選択
Raspbian で Wi-Fi がスリープするのを防ぐ

おまけ

スループットは以下のような感じでした。おおむね満足ですね。

RPI ← PC : 38 Mbps
RPI → PC : 88 Mbps