Windows10のVirtualBoxにRaspbian(PIXEL for X86)とNode-REDをインストールしてArduinoを駆動する

# はじめに
2017年6月にRaspberry PIの標準OSであるRaspbianが新しくなりました。これに合わせ、X86版のRaspbian(PIXEL for X86)も新しくなりました。旧版はLIVE-CD版のみでしたが、2017/6版はハードディスクにインストールできるようになりました。
そこでホストとなるWindows10にVirtualBoxを入れ、そこにPIXEL for X86をインストールしました。
利用例として、PIXEL上にNode-REDをインストールし、PIXEL上の仮想USBにArduino UNOをUSBケーブルにて接続し、firmataプロトコルで通信（LED点灯）してみました。この手順を追って説明します。

![pixel_arduino.jpg](https://qiita-image-store.s3.amazonaws.com/0/155377/4ea6c7e6-2b7d-7b53-ef46-dbca0db8dfb0.jpeg)


# VirtualBoxの準備
## PCにVirtualBoxをインストール
・以下からVirtualBoxとエクステンションパックをダウンロードします。
・本体をインストールします。詳細は割愛します。
https://www.virtualbox.org/

## USB2.0を使用するためにエクステンションパックを導入
・VirtualBoxを起動し、メニュー：「ファイル」→「環境設定」→「機能拡張」を選択します。
・画面の右横にある▽マークのアイコンをクリックし、先ほどダウンロードしたVirtualBox X.X.XX Oracle VM VirtualBox Extension Packを選択し画面に従い、インストールします。

## 仮想マシンの作成
以下に設定項目のうち最低限必要なものを示します。その他の項目はとりあえずデフォルトのままとしました。
・タイプ「Linux」
・バージョン「Debian(64-bit)」
※ここで32ビットしか選ぶことができない場合、BIOSレベルで仮想化機能（VT-dかAMD-Vi）がオフになっているか、元々、仮想化機構がないかです（仮想化機構がないとVBOX自体インストできないと思いますが、調べていません）。
なお、32ビットでインストールする場合は、PIXELが起動する時に画面に表示されるブートメニューからAdvanced option→Debian... 586を選ぶ必要があります。
・CPU数はRaspberry PI3B+に準じ、「4個」
・メモリはRaspberry PI3B+に準じ、「1024MB以上」
・ハードディスクは「16GB以上」あればたっぷり遊べる
・USBは2.0を選ぶ

### ネットワーク設定
Node-REDで遊ぶためには、ネットワークのセグメント内にある色々なマシンからHTTPやWebsocketで接続したいため、「ブリッジアダプター」を選びました。
※ネットワーク設定は自宅（や職場）の環境により、この通りの設定にならないと思いますので、参考として記載しておきます。

# PIXEL for X86(2017-06-22-rpd-x86-jessie)インストール
## OSイメージのダウンロード
・以下からISOファイルをダウンロードします
http://downloads.raspberrypi.org/rpd_x86/images/rpd_x86-2017-06-23/2017-06-22-rpd-x86-jessie.iso
## インストール
・作成した仮想マシンを「起動」ボタンにより起動します
・ISOファイルのありかを聞くダイアログが表示されるので、ダウンロードしたISOファイルを指定します
・インストール方法がいくつか示されます。「graphcal install」がお薦めです
・インストール時に示される設定項目はすべてデフォルトのものを選んでいます

インストールされると、続けて、ラズベリの絵がスプラッシュ表示されOSが起動されます。

# Vitual Box Guest Additions
インストールしたままだと、画面が640×480になっていたり、他のアプリとのコピペができないなど不便ですので、追加機能をインストールします。
## CD-ROMマウント
・起動されたゲストOS（PIXEL)画面のメニュー：「デバイス」→Guest Additions CDの挿入」を選択
・シェルを開き、以下のコマンドをタイプ
sudo mkdir /mnt/cdrom
sudo mount /dev/cdrom /mnt/cdrom/

## Additionsをインストール
sudo sh /mnt/cdrom/VBoxLinuxAdditions.run
※マシンの性能によりますが5-10分程度かかります

# Raspberian日本語化
これは必須の作業ではありませんが、日本語化を実施します。
## ロケール設定
・PIXCELの「メニュー（ラズベリのアイコン）」→「設定」→「Raspberry PIの設定」を選択
・ローカライゼーションタブを選び、ロケール、タイムゾーン、キーボード、無線LAN国を設定

## 日本語入力
日本語IMEが入っていませんので、ポピュラーなIMEであるmozcを入れます。
・sudo apt install uim uim-mozc
・さらにフォントを追加で入れます
sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big fonts-vlgothic
・再起動すると漢字入力が可能になります。漢字モード切替は「Shift+Space」です

# 【活用編】Node-REDで遊ぶ
Node-REDは、IoTで遊ぶために最適なプログラミング／実行環境（だと私が勝手に思っています）です。これをインストールし、マイコン（Arduino UNO）をコントロール（Lチカ）してみます。
## Node.jsのインストール
apt-getでインストするととても古いバージョンが入ってしまうので、本家から配布されている版を選んでインストールします。
・まずは、何はなくともパッケージの最新化
sudo apt-get update
sudo apt-get upgrade
・次にnode.jsを入れます
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

## Node-REDのインストール
以下のドキュメントに沿ってインストールします。
https://nodered.org/
・NPMにてインストール
sudo npm install -g --unsafe-perm node-red
・起動してみます
node-red -v
・ちゃんと動いているようなら（ログにエラーが出ていない）ブラウザで接続確認
http://localhost:1880

Node-REDの開発画面が出ればインストール完了です。

# ArduinoをUSB接続して動かしてみる
Raspberry PIと通常のPCの大きな違いは、GPIOがあるか無いかでしょう。GPIOがあれば、そこにセンサーをつけたり、LEDを接続したりと、IoT遊びが可能になります。
PCでもIoTしたい！のでUSB接続できるマイコン（今回はArduino UNO）を使ってIoTのHello WorldであるLED点灯（Lチカ）を行ってみます。
## Arduino UNOにfirmataのインストール
詳細は割愛します。手順は、Arduino IDEから「ファイル」→「スケッチの例」→「firamata」→「Standard Firmata」で表示されるスケッチをArduino UNOにインストールします。
## Node-REDにArduino用ノードをインストール
・Node-REDの開発画面の画面上段の右側に三本線のアイコン（設定メニュー）があるので、それの「パレットの管理」を選択
・ノードの追加タブを選択
・ノードの検索欄にarduinoと入れると追加機能がいくつか表示される
・その中の「node-red-node-arduino」の「ノードを追加」を押し、インストール
## 結線
・ホストマシンのUSBポートにArduino UNOをUSBケーブルで接続
・ゲストマシン画面のフッター部分にUSBアイコンがあるので右クリック
・Arduinoの機種によるのでどのような名前になるかわからないですが、XXXSirialなど、それっぽいデバイスを選択
・シェルからlsusbコマンドを使って接続されたか確認

## ノードプログラミング

UNOに搭載されているGPIO13番のLEDを指定し、String=0（消える）、String=1（着く）を送るノードフローを作成します。

![node1.PNG](https://qiita-image-store.s3.amazonaws.com/0/155377/74edd72a-385f-ee89-8e62-39c5f4b43fc4.png)


injectノードの左端をマウスでクリックし、LEDが点いたり消えたりすればOKです。

# おわりに
Arduino UNOとRaspberry PIの値段はほとんど変わらないので、最初からRaspberry PI使えよ、という突込みは「ナシ」でお願いします。

長々と説明してしまいました。最後まで読んでいただいたことに感謝します。