2015年11月5日木曜日

Raspberry PiをノートPC化するPi-Topが届いた

はじめに

(注)こちらのページは、2015年に発売されたpi-topの旧バージョンについての記事です。2017年に発売された新バージョンについての記事はこちらになります。

2014年10月頃、Raspberry PiをノートPC化するPi-Topがクラウドファンディングで資金を調達するというので話題となりました(参考:Techcrunch)。

その後、資金調達に成功し、2015年2月頃には一般向けに販売を開始しました(参考:fabcross)。

当時は2015年5月頃の発送を予定していたようですが、延期が重なり、2015年11月に実際に送られて来ましたので組み立てて使ってみました。

こちらが通常のRaspbianが動作している様子です。

価格

価格は下記の通りです。

  • Raspberry Pi 2 込みで299.99ドル
  • Raspberry Pi 2 なしで264.99ドル

さらに、日本までの送料が85ドルかかります。価格が高すぎるということはクラウドファンディング時から言われていましたね。
(追記:さらにFedExから関税として3,500円の請求がありました)

なお、Raspberry Pi 2は筐体の中に固定され、取り外しも面倒なので、Pi-Top専用のRaspberry Pi 2を用意するのが無難だと思います。私はPi 2込みのものを注文しました。

開封から組み立てまで

箱がこちら。結構大きいです。


箱を開けた瞬間、緑の天板が目につき、その予想外の大きさに圧倒されました。内容物は何段かにわかれて収納されています。


組み立てに必要なパーツを全て取り出したのが下図です。緑色のUSBのドングルはWifiデバイスですが、技適は通っていないと思われるので、お手持ちのものを利用するのが良いと思います。

また、Pi-Top OSと呼ばれる独自OSが入ったmicroSDも付属します。後述するように、通常のRaspbianでも制限はありますが動作します。

なお、短くて柔らかいHDMIケーブルが付属するのですが(下図で上から3番目のケーブル)、これ単体で売って欲しいと思いました。


組立自体は説明書の通りに行えば難しくないのですが、細いケーブルを取り扱う部分があるので、注意は必要です。

なお、下図のStep 3-3はスクリューを付属の六角レンチで回すのですが、どこかにねじ込んでいるわけでもなく、意味があるのか疑問でした。


また、Step 8-5でキーボードをBall Head Screwsにはめ込むのですが、ここでキーボードの下に来るケーブルをうまくまとめないと、キーボードが上に盛り上がって非常に不格好になります。

それを直すためにキーボードをBall Head Screwsから外すのはそこそこ大変なので、ここは組立中で最もストレスを感じました。

なお、このキーボードの盛り上がりを完全になくすのは難しいのでは?という気がしています。組み立てた方ならわかると思いますが、本ページのPi-Topの写真は、キーボードの中央部が若干盛り上がっています。


起動

組み立て終わったら、付属のPi-Top OSの入ったmicroSDで起動してみます。


起動画面の後、ログイン画面になるのですが、ここでできるのは、下記の通りです。
  • Wifiのセットアップ(Viewでパスワード入力可)
  • ネットワークログイン(Pi-Topサイトのアカウントでログインできるらしい)
  • ユーザーの作成
  • ゲストアカウントでのログイン(Read Onlyで、設定ファイル等変更できない)
Pi-Topサイトのアカウントでログインできるようなのですが、実際にログインしようとすると、下図のように「logging in」の状態のまま先に進みません。

なお、ネットワークに接続していない状態では、Read Onlyなゲストアカウントでの作業になりますので、実用的ではありません。Raspbian wheezyベースであることはわかるのですが、いつものユーザーpiでのログインはできませんでした。


色々試行錯誤した結果、以下の方法でPi-Topサイトのアカウントでログインできるようになりました。あらかじめPi-Topサイトのアカウントを持っていることが条件です。
  • まず、Wifiに接続します。Viewボタンをクリックするとパスワードを入力できたと思います
  • 右下の設定アイコンをクリックし、Create Accountにより、アカウントを作成します。その際、ユーザーネーム、パスワード、メールアドレスは適当に設定します(このアカウントは最終的には使われなくなります)
  • すると一時的にログインできますが、そのまま再起動すると、またログインできなくなってしまいますので、再起動はしないようにしましょう
  • そこで、ターミナルを起動し、下記のコマンドを実行し、OSを更新します
  • curl -sL https://www.pi-top.com/download/patch1 | sudo bash -
  • コマンドを実行すると、自動的にログアウトされ、もう一度ログインを求められます。この段階で、Pi-Topのアカウントでログインできるようになっています
ログインしてみるとわかるのですが、Pi-Topのアカウントは認証に使われるだけで、ログインすると普通のRaspbianと同様、ユーザーpiなのですね。ですので、OS更新前に一時的に作成したアカウントのデスクトップがそのまま引き継がれていたりします。

それなら最初からユーザーpiでログインさせてくれれば良いのに、と思いました。

そこで、実際にユーザーpiでログインできるよう設定した結果をこちらのエントリにまとめました→「Raspberry PiをノートPC化するPi-Topにユーザーpiでログインしてみた」。Pi-Top OSを普通のRaspbianに近い状態で使う方法も記しております。

なお、このPi-Top OSを用いるメリットは下記の通りです。
  • バッテリーの残量がわかる
  • キーボードでディスプレイ輝度を調節できる
  • 電源ボタンの長押しでシャットダウンコマンドが実行された後に電源が切れる

通常のRaspbianで使うには?

Pi-Top OSが付属するからといって、通常のRaspbianで使えないわけではありません。以下、Pi-Topを通常のRaspbianで使う際の注意を記していきます。NOOBS 1.4.1 (wheezy)とNOOBS 1.4.2 (jessie)で試しました。

まず、デフォルトでは画面端に黒い帯が現れて画面の広さが狭くなってしまいます。Overscanの設定をDisableに設定すると改善することができます。以前からあるraspi-configを用いる場合は「8 Advanced Options」→「A1 Overscan」から、NOOBS 1.4.2 (Jessie)からの新設定アプリケーションでは「System→Overscan」からDisableに設定できます。

なお、通常のRaspbianを用いると、
  • バッテリーの残量がわからない
  • キーボードでディスプレイ輝度を調節できない
  • 電源ボタンを長押しするといきなり電源が落ちる
という問題があります。Pi-Top OSからこれらの機能を移植することも可能でしょうが、どちらかというと、Pi-Top OSをRaspbian風にするほうが簡単かもしれません。「Raspberry PiをノートPC化するPi-Topにユーザーpiでログインしてみた」にその方法を記しております。

なお、通常のRaspianを終了するときは
  • 「sudo poweroff」を実行→シャットダウンプロセスが終わったら電源ボタン長押し
として電源を切るのが良さそうです。

感想など

Raspberry PiをノートPC風に使うということに関し、以前「Lapdock for Motorola Atrixを使ってRaspberry Pi 2をモバイルPCにしてみた」というエントリを書きました。その方法に比べると余計なケーブルが必要なく、とてもシンプルなのは良いと思います。

ただ、気になる点もいくつかあります。

まず、サイズがおよそ340mm×210mm×47mm (最厚部)程度と大きく、実際に目にするとかなりの迫力です。

また、キーボードのクオリティがやや低いです。押しても反応しにくいキーがあり、私の場合、「k」キーを押した際に 7/10 くらいの確率でしか入力されませんでした。まあこれは慣れである程度はカバーできるだろうとは思います。


また、下図のようにRaspberry Piの40ピンのGPIOが全て塞がってしまうのが気になります。下図の左側の基板から、34ピンだけ引き出せそうなのですが、現時点ではその仕様が公式には公開されていないようです。この点はかなり気になったので自分で調べてみました。結果を以下のエントリにまとめました→「Raspberry PiをノートPC化するPi-Topで電子工作(LチカとI2C通信)してみた」。


個人的には、Pi-Top OSと名乗って、ログイン法を通常のRaspbianから大きく変えてしまったのは残念でした。通常のRaspbianにボード制御用アプリケーションを追加インストールする形式で十分だったように思います。

とは言え、触っていくほど愛着の湧く面白いおもちゃであるとも思います。やや高価な価格に納得できる方なら試してみても良いでしょう。

なお、Pi-Topからキーボード、タッチパッドを取り除いた、pi-topCEEDと呼ばれるものも資金調達に成功しており、こちらは送料等を除いて99ドルとお得になっています。今ならこちらの方が良いかもしれませんね。

追記(2016.1.14)

…と、2015年11月に上記のエントリを書いたのですが、実際のところ、私のPi-Topはほとんど使われることなく積まれた状態でした。何が問題かというと、やはりキーボードの性能が低すぎるのが致命的です。

ブラウジングメインで用いるためのパワーが足りないのはRapsberry Pi 2の現状での限界なので仕方ありませんが、サーバーにリモートで接続するための端末として用いようとしても、Ctrlキーの押下が認識されたりされなかったりでは使い物になりません。

どうにかならないかと考え、ロジクールのワイヤレスキーボード&マウスであるMK240を購入したところ、Pi-Topが非常に快適に使えるようになりました。キーボードの足を起こしてPi-Topに載せると、Pi-Topのキーボードに干渉しないので良い感じです。唯一の不満はキーボードに電源スイッチがないことですが、まあこれはしょうがないかな。

そのようなわけで、今度こそPi-Topを使ってみようと思います。


こちらもどうぞ





「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

2015年9月2日水曜日

Raspberry Pi + kernel 4.1 / 4.4 / 4.9 / 4.14 / 4.19系列で5GHz対応WifiドングルGW-450D/GW-450D2/Archer T1U/WI-U2-433DMを動かした

本ページで目指すもの

(注:本ページの内容はkernel 5.X 系では動作しません)

Raspberry PiなどのLinuxボードをAndroid Bazaar and ConferenceやMaker Faireなどで展示する際、Wifiの混線を避けるために5GHz対応のWifiドングルPlanex製GW-450Dを使うことがよくありました。

そこで、本ページではRaspberry Piを5GHz帯のネットワークに接続することを目標にします。必要なものは下記のどれかの無線LAN USBアダプタです。
これらは、USBにさしただけでは認識されず、ドライバを別途インストールする必要があります。

ただし、2018年6月に日本で発売になったRaspberry Pi 3 Model B+では、基板上に実装されているネットワークデバイスを用いてデフォルトで5GHz帯のネットワークにつなぐことができるのですよね。

ですので、上記の無線LAN USBアダプタを使う理由はなくなりつつあるのですが、当面本ページメンテナンスは続けます。

解説は、下記の順で行います。
  1. Planex製GW-450D / GW-450D2 /tp-link製Archer T1U 用ドライバのインストール
  2. Buffalo製WI-U2-433DM 用ドライバのインストール
以前はカーネルの再構築が必要な方法で書いていましたが、カーネル再構築が不要な方法に改訂しました。


カーネルヘッダをインストール

まず、ドライバのインストールに必要なカーネルヘッダをインストールします。ターミナルで下記のコマンドを実行します。
$ sudo apt-get update
$ sudo apt-get install raspberrypi-kernel-headers
これが終わったら、インストールしたカーネルヘッダディレクトリを/usr/src/linuxとしてリンクを張ります。
$ cd /usr/src
$ sudo ln -s linux-headers-4.19.50-v7+ linux
ここで、「linux-headers-4.19.50-v7+」の部分は皆さんの手元の環境のディレクトリ名に読み替えて実行します。用いているのがPi 2およびPi 3らば末尾が「数字-v7+」のディレクトリを、 Pi 1やPi Zeroでは「数字+」のディレクトリを選ぶようにしてください。これらは自分の用いているカーネルのバージョン番号になっています。

自分が用いているカーネルのバージョンの調べ方も知っておきましょう。下記のコマンドを実行します。
$ uname -r
結果として、例えば「4.19.50-v7+」と表示されれば、「4.19系列」を用いていることになります。他には「4.14」、「4.9」、「4.4」、「4.1」などがあり得ると思います。 また、末尾に「-v7+」とつくのがPi 2およびPi 3です。Pi 1やPi Zeroでは末尾が「-v7+」ではなく「+」となっているはずです。
ここから、各Wifiデバイスのドライバーのインストールに入ります。

Planex製GW-450D / GW-450D2 /tp-link製Archer T1U 用ドライバのインストール

ここから解説するのは、GW-450D / GW-450D2 / Archer T1U 用ドライバのインストールの方法です。
まず、http://www.planex.co.jp/support/download/gw-450d/driver_linux.shtml
より、gw-450d_driver_linux_v3002.zipをダウンロードし、/home/piに置いておきます。

そして、ドライバを下記のように展開します。
$ cd /usr/src
$ sudo su
# unzip /home/pi/gw-450d_driver_linux_v3002.zip
# cd gw-450d_driver_linux_v3002
# tar xf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2
# cd mt7610u_wifi_sta_v3002_dpo_20130916
展開が終わったら、パッチをダウンロードして適用します。このとき、用いているカーネルが4.14~4.19系か、4.1~4.9系かで実行するコマンドが異なります。

まず、4.14~4.19系を用いている方は、次の2コマンドを実行してください。
# wget https://raw.githubusercontent.com/neuralassembly/raspi/master/gw-450d/gw-450d-rpi-kernel414.patch
# patch -p0 < gw-450d-rpi-kernel414.patch
4.1~4.9系を用いている方は、次の2コマンドです。
# wget https://raw.githubusercontent.com/neuralassembly/raspi/master/gw-450d/gw-450d-rpi-kernel41.patch
# patch -p0 < gw-450d-rpi-kernel41.patch
このパッチ当てがkernel 4.1、4.4、4.9、4.14、4.19でGW-450Dを動かす上で重要です。

以上が終わったら、コンパイルを行います。
# make
コンパイルが終わったら、モジュールをインストールします。kernelのバージョン(「4.19.50-v7+」の部分)は自分の環境に応じて読み替えてください。
# cp -p os/linux/mt7650u_sta.ko /lib/modules/4.19.50-v7+/kernel/drivers/net/wireless
# depmod -a
次に、設定ファイルのコピーを行います。
# mkdir -p /etc/Wireless/RT2870STA
# cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat
最後に、ネットワークの設定を記述します。1つ目の命令はテキストエディタleafpadで/etc/network/interfacesを開いていますが、もちろんここはお好みのテキストエディタを用いて構いません。
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。その場合のコマンドは「mousepad /etc/network/interfaces」です。
また、your-ssidの部分はお使いのWifiルーターのネットワーク名、your-passwdの部分はそのネットワークパスワードを記してください。
# leafpad /etc/network/interfaces
(末尾に以下を記述)
allow-hotplug ra0
auto ra0
iface ra0 inet manual
wpa-ssid "your-ssid"
wpa-psk "your-passwd"
以上が終わったら、GW-450D / GW-450D2 / Archer T1U のどれかをさし、Raspberry Pi を再起動します。

さしたネットワークデバイスでネットワークにつながっていると思います。Raspberry Pi 3のボード上のWifiデバイスを無効にしたい場合、デスクトップ右上のメニューから「Turn Off Wifi」を選択して下さい。

なお、割り当てられるIPアドレスを固定したい場合、「Raspberry PiのIPアドレスを固定する | 「Raspberry Piで学ぶ電子工作」補足情報」で紹介した方法が使えますので必要な方はご参照ください。

I-O DATA製WN-AC433UKについての注意

ここで、I-O DATA製WN-AC433UKについての注意を記します。上記の方法でドライバをインストールすることにより、Raspberry Pi 3で動作を確認することができました。ただし、過去にRaspberry Pi 2で試したところ、下記のように非常に安定性が悪いことがありました。
  • 流せる電流の大きな電源と、高品質な電源ケーブルを用いないと動作しないことが多い
  • Raspberry Piの起動前にI-O DATA製WN-AC433UKを差しておいても、認識に失敗することがある
  • Raspberry Pi起動後にI-O DATA製WN-AC433UKを抜き差しすると、認識に成功するときとしないときとがある。
Pi 3で安定動作したので今となってはあまり気にしていませんが、似たような状況の方はご参考ください。

Buffalo製WI-U2-433DMのドライバのインストール

Buffalo製WI-U2-433DMについても動作を確認してみました。こちらについては、本ページのカーネルヘッダのインストールまでは共通で、ドライバのインストールからが異なります。

以下の作業は「Raspberry Pi 2でWiFiドングル BUFFALO WI-U2-433DMを使う」を参考にしました。

下記の手順で作業を進めます。
$ cd /usr/src
$ sudo su
# git clone https://github.com/gnab/rtl8812au.git
# cd rtl8812au
kernel 4.19以降を用いている方はさらに以下の2命令を実行してください。
# wget https://raw.githubusercontent.com/neuralassembly/raspi/master/rtl8812-rpi-kernel419.patch
# patch -p0 < rtl8812-rpi-kernel419.patch
ここで、このディレクトリにあるMakefileを下記のように2箇所変更します。
...
CONFIG_PLATFORM_I386_PC = n
...
CONFIG_PLATFORM_ARM_RPI = y
すなわち、CONFIG_PLATFORM_I386_PCの値を「n」に、CONFIG_PLATFORM_ARM_RPIの値を「y」にするだけです。あとは下記のように作業を進めます。kernelのバージョン(「4.19.50-v7+」の部分)は各自読み替えてください。
# make
# cp 8812au.ko /lib/modules/4.19.50-v7+/kernel/drivers/net/wireless
# depmod -a
以上で、Buffalo製WI-U2-433DMを差すとネットワークインターフェースがwlan0かwlan1の状態で認識されます。このままでは、Raspberry Pi 3で用いる場合下記の問題があります。
  • オンボードのWifiデバイスとWI-U2-433DMに対してwlan0とwlan1のように同じデバイス名が使われ、さらにこの番号が変わることがある
これを解消し、オンボードのWifiデバイスをwlan0、WI-U2-433DMがwlan1と固定されるよう設定が必要となります。
以下では、Raspbianが「StretchまたはBuster」の場合とJessieの場合とにわけて解説しましょう。

Stretch / BusterでのWI-U2-433DMの設定

下記のコマンドにより、/etc/udev/rules.d/70-persistent-net.rules というファイルを新規に開きます。
$ sudo leafpad /etc/udev/rules.d/70-persistent-net.rules
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ sudo mousepad /etc/udev/rules.d/70-persistent-net.rules
leafpadはテキストエディタですので、お好みのものを用いて構いません。 この空のファイルに下記の内容を書き込みます。
# Unknown net device (/devices/platform/soc/3f300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0) (brcmfmac)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

# USB device 0x:0x (rtl8812au)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan1"
ここで、2箇所ある「xx:xx:xx:xx:xx:xx」の部分には、二つのネットワークデバイスのMACアドレスを記さねばなりません。

まず、オンボードのWifiデバイスのMACアドレスを調べるには、Raspberry PiからWI-U2-433DMを抜いた状態で下記のコマンドを実行します。
$ ifconfig 
wlan0またはwlan1のところに「ether xx:xx:xx:xx:xx:xx」という項目が見つかるでしょう。これがオンボードのWifiデバイスのMACアドレスです。 これを/etc/udev/rules.d/70-persistent-net.rules の一つ目の設定項目に記します。

同様に、WI-U2-433DMを差してからifconfigコマンドを実行します。wlan0またはwlan1のうち新たに追加された方のMACアドレスを/etc/udev/rules.d/70-persistent-net.rules の二つ目の設定項目に記します。

以上で、「オンボードのWifiデバイスがwlan0、WI-U2-433DMがwlan1」と固定されます。
次に、/etc/network/interfaces を管理者権限のテキストエディタで開きます。
$ sudo leafpad /etc/network/interfaces
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ sudo mousepad /etc/network/interfaces
このファイルの末尾に、下記の内容を追加して保存します。
allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
これは、「オンボードのWifiデバイス(wlan0)と同じ設定ファイルをWI-U2-433DM(wlan1)でも用いる」という設定です。

以上の設定を行った後、デスクトップの右上のアイコンから「Turn Off Wifi」を選択し、オンボードのWifiデバイス(wlan0)だけを無効にします。 その状態でRaspberry Piを再起動すると、WI-U2-433DM(wlan1)で/etc/wpa_supplicant/wpa_supplicant.confの情報に基づいてWifi接続が行われます。 必要に応じてwpa_supplicant.confをテキストエディタで編集すると良いでしょう。

JessieでのWI-U2-433DMの設定

同様の内容をJessieで行う方法を記します。
設定ファイル /lib/udev/rules.d/75-persistent-net-generator.rules を管理者権限のテキストエディタで開き、下記の太字部を追加して保存します。さらにRaspberry Piを再起動します。
# device name whitelist
 KERNEL!="ath*|msh*|ra*|sta*|ctc*|lcs*|hsi*|wlan*", \
                                         GOTO="persistent_net_generator_end"
再起動が終わると、/etc/udev/rules.d/70-persistent-net.rules というファイルが生成されています。 これを管理者権限のテキストエディタで開くと、下記のようになっています。
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# Unknown net device (/devices/platform/soc/3f300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0) (brcmfmac)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

# USB device 0x:0x (rtl8812au)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan1"
ATTR{address}の部分は人により異なるので伏字にしました。 「# Unknown net device」に対応するNAMEがwlan0、「# USB device 0x:0x (rtl8812au)」に対応するNAMEがwlan1となっていることがポイントで、前者がRaspberry Piのボード上のWifiデバイス、後者がWI-U2-433DMを指し、それぞれwlan0とwlan1に指定されています。この/etc/udev/rules.d/70-persistent-net.rules が存在することで、以後デバイスの名前が固定されます。wlan0とwlan1の名前を入れ替えたい場合は適切に編集して保存してください。

以上で、デバイス名の固定が完了しました。後は、二つのデバイスでネットワークの設定ファイルを分けるとよいでしょう。管理者権限のテキストエディタで /etc/network/interfaces を開きます。wlan0とwlan1とで同一の設定ファイル「/etc/wpa_supplicant/wpa_supplicant.conf」が指定されていることがわかります。この設定ファイルを二つのデバイスで別のものにするとか、あるいはボード上の無線LANデバイスwlan0についての設定3行をコメントアウトするなどが良いでしょう。
allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Raspberry Pi 3のボード上のWifiデバイスを無効にしたい場合、デスクトップ右上のメニューから「Turn Off Wifi」を選択して下さい。USBデバイスのみが有効になるはずです。



「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

2015年5月1日金曜日

Windows 10 IoTが載ったRaspberry Pi 2でLチカサンプルを動かしてみた

1. はじめに


4/30に、Raspberry Pi 2用のWindows 10 IoTが公開されました。インストールしてLチカサンプルを動かすところまで試してみましたので、手順をメモします。公開されているチュートリアルに書かれた通りに解説します。

下図が最終的に動かしたサンプルですが、LEDの点滅と連動して画面上の丸も点灯し、その下のスクロールバーを動かすことで点滅の速さも変更できました。


2. Raspberry Pi 2用マイクロSDカードへのWindows 10 IoTのインストール


手順→「Windows IoT - SetupBoard」

必要なもの

  • Windows 10 Insider Preview(build 10074)以降を搭載したPC(マイクロSDカードの読み書きができること)

    実機が必要です。私は古いLet's Note (CF-W8) にインストールしましたが、後にVisual Studio Community 2015 RCを入れることを考えると、パワーのあるPCの方が良いかもしれません。なお、このLet's Noteではタッチパッドに触れるとブルースクリーンになるなど、Windows 10にはまだ問題は多そうでした。なお、「Windows IoT - SetupBoard」では「build 10069以降」と書かれているのですが、後にインストールするVisual Studio Community 2015 RCではbuild 10074以降が要求されています。

  • Raspberry Pi 2およびHDMIディスプレイ

    有線LANでネットワークに接続します。マイクロSDカードは8GB以上。キーボードとマウスは特にささなくても問題なさそうです。

Windows 10 IoTをマイクロSDカードに書き込む


PC上のWindows 10で下記の手順でマイクロSDカードを準備します。
  1. こちらから、Windows_IoT_Core_RPI2_BUILD.zipをダウンロードし、展開します
  2. 展開したフォルダにFlash.ffuというファイルがあることを確認します
  3. PCに8GB以上のマイクロSDカードを接続します(私は16GBのものを用いました)
  4. 管理者権限でコマンドプロンプトを起動し、Flash.ffuがあるフォルダまでcdコマンドで移動します
  5. 移動先で、diskpartコマンドを実行し、DiskPartを起動します
    > diskpart
    
  6. DiskPart上でlist diskコマンドを実行し、マイクロSDカードのディスク番号を調べます(下図では3)
    DISKPART> list disk
    
  7. exitコマンドでDiskPartを終了します。
    DISKPART> exit
    
  8. 調べたディスク番号を使って、Flash.ffuをマイクロSDカードに書き込みます。下の図の赤丸で示されている通り、「ディスク3」だったら「PhysicalDrive3」を指定する、という要領です。
    > dism.exe /Apply-Image /ImageFile:flash.ffu /ApplyDrive:\\.\PhysicalDrive3 /SkipPlatformCheck
  9. 書き込みが100%に達したら、Windowsの安全な取り外しを行ってからマイクロSDカードを抜き、Raspberry Pi 2にセットします。


3. Raspberry Pi 2の起動とWindows 10からの接続


手順→「Windows IoT - SetupBoard」および「Using PowerShell to connect and configure a device running Windows IoT Core」

Raspberry Pi 2にマイクロSDカードをセットしたら、有線LAN、HDMIディスプレイを接続した上で電源を投入します。数分待つと、最終的に手順のページでも見られる下記のページまでたどりつきます。なお、相性の悪いディスプレイでは画面が乱れるということがあったため、相性の良いディスプレイに変更することで対処しました。


なお、画面右上に見える電源ボタン、右下に見える設定ボタンは、Raspberry Pi 2に接続したマウスでクリックすることができるのですが、マウスにも相性があるようで、手持ちのマウスで操作できるものは多くはありませんでした。

下図左側がRaspberry Pi 2を操作できなかったマウス、右側が操作できたマウスです。メーカーによる傾向などはあまりありません。


ただし、マウスで操作できなくても、Lチカ自体は行えますので先に進みます。

さて、この状態のRaspberry Pi 2に、Windows 10 PCからリモート接続してみることにします。

  1. PowerShellを管理者権限で起動します(検索窓にPowerShellと入力すると現れます)
  2. PowerShell上で下記を実行し、WinRMを起動します。
    > net start WinRM
    
  3. PowerShell上で下記を実行します。Raspberry Pi 2のIPアドレスはディスプレイに表示されています。確認には「Y」と答えます
    > Set-Item WSMan:\localhost\Client\TrustedHosts -Value (Raspberry Pi 2のIPアドレス)
    
  4. PowerShell上で下記を実行すると、Raspberry Pi 2上のWindows 10 IoTにログインできます。デフォルトパスワードは「p@ssw0rd」です。
    > Enter-PsSession -ComputerName (Raspberry Pi 2のIPアドレス) -Credential (Raspberry Pi 2のIPアドレス)\Administrator
    

この状態でRaspberry Pi 2に対して様々な設定が行えますので、「Using PowerShell to connect and configure a device running Windows IoT Core」を参考にしてみてください。

ここでは、Windows 10 PCに対するVisual Studio Community 2015 RCのインストールに入っていきます。

4. Visual Studio Community 2015 RCのインストールと設定


手順→「Windows IoT - Setup your PC for Raspberry Pi 2」および「Enable your device for development」

Windows 10がインストールされたPCに、Visual Studio Community 2015 RCをインストールしていきます。
  1. 「Steps to install Windows 10 development tools for Visual Studio 2015 RC」の左下にある「Get the tools」ボタンをクリックします。VSToolsForWindows.exeがダウンロードされますので、インストールします。Community版がインストールされますが、Professional版が良い場合は、リンク先の解説に従ってください。

    なお、「Universal Windows App Development Tools」というものをインストールしなければならないのですが、VSToolsForWindows.exeを「typical」でインストールしたら自動的にインストールされました。インストール後にコントロールパネルの「プログラムのアンインストールまたは変更」で「Microsoft Visual Studio Community 2015 RC」のインストール項目を調べてみると、 下図のように確かに「Universal Windows App Development Tools」がインストールされていました。


  2. 次に、Windows appの開発用にWindows 10をアンロックします。まず、検索ウインドウでGpedit.mscと入力し、現れたローカルグループポリシーエディターを管理者権限で起動します(エラーがでますが気にせず先に進みました)。そして 「ローカルコンピュータポリシー」→「コンピューターの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「アプリパッケージの展開」と辿り、中にある「Allows development of Windows Store applications and installing(略)」と「信頼できるすべてのアプリのインストールを許可する」を有効にします


  3. 最後に、Windows_IoT_Core_RPI2_BUILD.zipに含まれていたWindowsDeveloperProgramForIoT.msiをインストールします。なお、これにより「Windows IoT Core Watcher」というアプリケーションがインストールされ、自動起動するはずなのですが(スナップショットが「Windows IoT - Setup your PC for Raspberry Pi 2」にあります)、私の環境では起動しませんでした。それでもVisual StudioからRaspberry Pi 2へのアプリケーションのインストールはできましたので、ここでは気にせず先に進むことにします。

5. サンプルアプリケーションのダウンロードと実行


手順→「Blinky Sample」および「‘Hello, World!’ Sample」

Lチカのサンプル「Blinky」のC#版を試してみます。「Blinky」ページに作るべき回路が示されているので、あらかじめ作成しておきます。3.3VピンとGPIO 5でLEDと抵抗の直列接続をはさむ回路になっており、GPIO 5がLOWのときにLEDが点灯する回路です。

ファイルは、「ms-iot/samples」の「Download ZIP」ボタンにより全てのサンプルをダウンロードしてしまうのが簡単でしょう。

展開後に現れる「samples/Blinky/CS/Blinky.csproj」がVisutal Studio Community 2015 RCで開くべきプロジェクトファイルになります。

開いたときの様子が下図です。図のように、MainPage.xaml.csにメインの処理が記述されています。


これをRasbperry Pi 2で実行するには、「‘Hello, World!’ Sample」に示されているように、ターゲットを設定する必要があります。

下図のように、「Device」を「Remote Machine」に変更します。


すると、下記のようなダイアログが現れるので、

  • Address:Raspberry Pi 2のIPアドレス
  • Authentification Mode:None
と変更して、Selectをクリックします。



その状態でアプリケーションを実行すると、それなりの時間待たされた後、アプリケーションがRaspberry Pi 2にインストールされ、冒頭の写真のように実行されます。

お疲れ様でした。



「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。