Windows 10 IoT Core (for Raspberry Pi 2)インストール手順(2016年版)

正式版出てからIoT Coreを入れてなかったのでもさもさやってみます。

事前準備

事前準備として、以下の準備はできているものとします。

参考

  • 開発用のPCはWindows10がインストールされていること。
  • 開発用のPCにVisualStudio2015がインストールされ、Update1に更新されていること。
  • 開発用のPCで開発者モードが有効になっていること。([スタート]->[設定]->[更新とセキュリティ]->[開発者向け]->[開発者モード]を選択)

Windows 10 IoT Core Dashboard のインストール

まず、開発用のPCにWindows 10 IoT Core Dashboardをインストールします。 このツールは、microSDにWindows 10 IoT Coreを書き込むのに使用します。

  1. こちらの"Get IoT Core Dashboard"と書かれたリンクをクリックして、インストーラをダウンロードします。
  2. インストーラを起動します。
  3. ClickOneceの「セキュリティの警告」が表示されます。内容を確認し、「インストール」をクリックします。
    f:id:yun2dot0:20160214212824p:plain:w200
  4. インストールが完了するまで待ちます。
    f:id:yun2dot0:20160214213143p:plain:w200
  5. インストールが完了すると「IoT Dashboard」が起動されます。
    f:id:yun2dot0:20160214213339p:plain:w200

microSDへのIoT Coreの書き込み

MicrosoftSet up a Raspberry Pi 2によると8GB以上のmicroSDならよいようです。Hardware Compatibility Listに動作確認済みのリストがあるので、不安ならそちらを利用したら確実かと。

  1. Windows 10 IoT Core Dashboardを起動します。
  2. 右のタブの「新しいデバイスのセットアップ」をクリックします。
    f:id:yun2dot0:20160214213904p:plain:w500
  3. 「デバイスの種類」で「Raspberry Pi 2」を選択します。
  4. microSDをPCに接続します。認識されたら「ドライブ」にmicroSDが出てくるはずです。
  5. 「ソフトウェアライセンス条項に同意する」にチェックを入れて、「ダウンロードとインストール」をクリックします。
  6. 「SDカードをフラッシングしています」で進捗が表示されるので、完了まで待ちます。
    f:id:yun2dot0:20160214231245p:plain:w500
  7. SDカードが空でない場合、書き込み前に確認が出るようですので、「続ける」をクリックします。
    f:id:yun2dot0:20160214231545p:plain
  8. 書き込みが完了すると、SDカードをデバイスに接続するよう説明が表示されるので、指示に従います。
    f:id:yun2dot0:20160214232201p:plain:w500

起動と確認

Windows 10 IoT Coreを書き込んだmicroSDをRaspberry Piに刺して、Raspberry PiにEthernetケーブルを接続して起動します。

  1. IoT Dashboardの右のタブで「自分のデバイス」をクリックします。
  2. 起動できていれば、名前が"minwinpc"(初期設定。後で変更できます。)のデバイスが表示されるはずです。
    f:id:yun2dot0:20160214233148p:plain:w500
  3. 「設定」のアイコンをクリックすると、デバイス名の設定画面が出ます。
    f:id:yun2dot0:20160214233419p:plain:w500
  4. 「設定」画面の「デバイスのパスワードを変更」をクリックすると、パスワードの変更画面が出ます。デフォルトはまずいのですぐに変更します。(初期設定されているパスワードは"p@ssw0rd")
    f:id:yun2dot0:20160214233620p:plain:w500
  5. 「自分のデバイス」に戻って、「Device Portalで開く」のアイコンをクリックします。
  6. ブラウザが起動して、Basic認証を問われるので、ユーザー名「Administrator」、パスワードに先ほど設定したパスワードを入力します。
  7. (Insider Previewのときと違って)初回起動時に、「今、デフォルトのパスワードから変更するかい?(意訳)」が問われるようになっているようなので、お好みにあわせてどうぞ。
  8. 「Device Portal」が開きます。デバイスのシャットダウンや再起動もDevice Portalから行います。(上のメニューバー)
    f:id:yun2dot0:20160215000145p:plain:w500

以上でインストールから動作確認までできました。

Windows10 IoTでスイッチの入力を取ってLED点けたり消したり

Raspberry Piをしばらく触ってなくて、Windows10 IoTも触れてなかったので、ちょっとリハビリも兼ねて。入出力両方を試すため、タクトスイッチを押す度にLEDが点いたり消えたりするのを作ってみる。

実験用の回路を作る

しらべたこと

  • こういうスイッチを押す度に状態を変える回路を組むとき、入力にノイズが乗って綺麗な波形にならず、一度ボタンを押しただけなのに、閾値を2度越えてしまったりすることがある。これをチャタリングといい、対策が必要になる。
  • 入力の波形を矩形波で表したときの上がるときのエッジをポジティブエッジ、逆をネガティブエッジという。

回路図


スイッチの入力とLEDへの出力をそれぞれGPIOポートに繋ぐ設計。

やってみる

ソース

Windows.Device.Gpio名前空間のクラスが割とよきに計らってくれるため、余り悩むこともなく。

  • GpioPinにはValueChangedイベントハンドラがあるので、値が変化したときに拾うことができる。今回のようにスイッチの入力を取るような時に素直に書けるのが嬉しい。
  • ValueChangedイベントは引数でGpioPinValueChangedEventArgsを取る。GpioPinValueChangedEventArgsにはEdgeプロパティがあって、ポジティブエッジやネガティブエッジが取れるので、今回の様なユースケースチャタリングを防ぐために利用できる。
  • GpioPin#WriteにGpioPinValue.HighとかGpioPinValue.Lowを渡すことで、対象のピンをオンオフできる。

ボタンの入力を取ってみる(その2)

yun2dot0.hatenadiary.jp

前回、ボタンの入力を取ってみたわけですが、Raspberry Pi本体にプルアップ/プルダウン抵抗が内蔵されているため、それを利用する設計もできるそう。

実験用の回路を作る

回路図


前回の回路からプルダウン抵抗を無くした設計。 プルアップ/プルダウン抵抗はコードから設定できる。

やってみる

ソース

前回、プルダウン抵抗でやってみたので、今回はプルアップ抵抗でやってみた。
コードとしても前回とほぼ同じ内容で:pull => :upで内蔵のプルアップ抵抗を有効にするのを追加。

ボタンの入力を取ってみる

Lチカをやって出力の部分をやったので、今度は入力で。

実験用の回路を作る

しらべたこと

  • タクトスイッチは押すと回路が繋がる。
  • タクトスイッチは4本足が出ているけど、2本づつペアになっている。
  • 入力にもGPIOポートを使う。+3.3VがGPIOに入力されるとHIGHの信号が取れる。
  • タクトスイッチをGPIOに直接繋ぐとタクトスイッチがOFFの状態のときに状態が不定になるため、GPIOポートはGNDに繋ぐ必要がある。
  • 回路の組み方でプルアップ抵抗/プルダウン抵抗と呼ぶ。+3.3V側に抵抗を入れるとプルアップ抵抗で、スイッチがOFFのとき信号がHIGHになる。逆にGND側に抵抗を入れるとプルダウン抵抗で、スイッチがONのときに信号がHIGHになる。
  • プルアップ抵抗の場合は1kΩ程度の抵抗、プルダウン抵抗の場合は10kΩや100kΩの抵抗を使用する。
  • 直感としてはプルダウン抵抗の方が扱いやすい感じだけど、プルアップ抵抗の方が抵抗値が低くて済むので消費電量の面で有利という特徴がある。(らしい)

    回路図


    今回は直感重視でプルダウン抵抗として組んでみた。抵抗は10kΩで。
    GPIO 24を入力に使う設計。

やってみる

ソース

ソースはこんな感じで。ほぼPiPiperのReadmeのままですが。
after~で指定した条件が生じたときだけブロックが実行される設計が.NETのRxっぽくって面白いと思った。

LEDチカチカさせてみる

LEDをチカチカさせるのは、プログラム言語で言ったら"Hello,world!"に当たるものらしいですね。略して"Lチカ"って言うらしい。

やってみましょう。

諸々部品を用意するのが面倒だったので、こういうのを買ってみました。

Raspberry Pi電子工作エントリーキット(Economy)

Raspberry Pi電子工作エントリーキット(Economy)

実験用の回路を作る

しらべたこと

  • 毎回ハンダ付けをしてると大変なので、こういう実験をやるためにブレットボードという便利アイテムがある。
  • 単位は、電流がA(アンペア)、電圧はV(ボルト)、抵抗値はΩ(オーム)。
  • 何かを制御したいときはGPIOのGPIO X(例えばGPIO 25)となっているピンを使う。オンにすると+3.3Vが出る。オフにすると0Vになる。
  • LEDには極性があり、足が長い方を+に接続する。
  • LEDに3.3Vを流すとLEDが壊れる可能性があるので、抵抗を途中に入れてやる必要がある。どの値の抵抗を入れればよいかはオームの法則を使って求める。
  • -は最終的にグラウンド(GND)に繋ぐ。

抵抗

このような用途に使う抵抗を電流制限抵抗と言うそう。

LEDの使い方 | マルツオンライン

R=\frac{E-VF}{IF}の式を使えば抵抗値が求められますね。
キットに付いてくる赤色LEDは型番の記載が無いので素性が解らないのですが、ググると赤色LEDは1.9V、10mAが多いようなのでその値を使って計算することにする。
よって
R=\frac{3.3-1.9}{0.010}
で抵抗値としては140Ω以上の抵抗を入れればよいということに。

回路図


購入したキットに入ってる抵抗で一番抵抗値が低いものが330Ωだったので、それを使用することにした。 こんな感じに組めばよい模様。
ちなみに、上の白くて穴が沢山開いてるブツがブレッドボード。

やってみる

gemのインストール

GPIOの制御はpi_piper gemを使うのが一般的なよう。

sudo gem install pi_piper
sudo rbenv rehash

(ネイティブ拡張が含まれるのでコンパイルにちょいと時間が掛かる。)

ソース

ソースはこんな感じで。コンストラクタでピンと入出力方向を設定して、インスタンスのon/offメソッドを呼ぶと出力がオンオフされる。 コンストラクタの引数:pinにはピンの番号ではなく、GPIO XのX部分の番号(この例では25)を指定。

sudo ruby lchika.rb


動かすとこのような感じで点滅。 ソフトウェアからこういう物理的に触れられるものを動かすことができる、というのは今までに無かった感覚で、自分の書いたコードが初めて動いたときのような感覚といいますか、ちょっと嬉しい。

最後に

sudo echo 25 > /sys/class/gpio/unexport

してGPIOポートを開放します。

子供の頃に学研の電子ブロックっていう玩具が好きだったんですが、あれ思い出した。

raspbianにrbenvをセットアップしてrubyを使えるようにする改

yun2dot0.hatenadiary.jp

で環境作ったのですが、RubyからGPIO制御するのにsudoすると、rbenvが効いてないとかgemが見つからないと言われるので、悲しい顔になってました。

そこで
rbenvをシステムワイドにインストールする » つくば日記(仮)
の手順を使わせて頂きました。(ありがとうございます!)

これでちゃんとsudo ruby -vしたときに意図どおりになりました。

raspbianにrbenvをセットアップしてrubyを使えるようにする

[2015/3/26追記]
すみません。この手順だとsudoしたときに悲しいことになるため、新しい手順にしてます。 yun2dot0.hatenadiary.jp
こちらをご確認ください。

rbenvのセットアップ

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
rbenv --version

で、rbenvのバージョン情報が表示されればrbenvの準備完了。

rubyのインストール

rbenv install -l
rbenv install 2.2.1

40分ほどかかります。

rbenvでの確認

rbenv versions

2.2.1が追加されたことを確認します。

システムで使用するバージョンを2.2.1に変更

rbenv global 2.2.1
rbenv rehash

システムで使用するバージョンを2.2.1に変更します。

ruby -v

参照が正しく変更されたことを確認します。

rbenvの新しいバージョンがリリースされた場合のアップデート方法

cd ~/.rbenv
git pull
cd ~/.rbenv/plugins/ruby-build
git pull