【myThingsハンズオン】RaspberryPiをセットアップしよう

この記事は[myThingsハンズオンの参考資料](http://qiita.com/yamamotomanabu/items/4812d5a5574219eb03af)の一部です。

## PCとRaspberryPiをシリアル接続する
### 1. microSDカードをRaspberryPiに挿入する
![sd.png](https://qiita-image-store.s3.amazonaws.com/0/51093/d778a835-7f8d-9f72-6b82-aa2ca9657dd1.png)

### 2. Wi-FiドングルをRaspberryPiに接続する
![wifi.png](https://qiita-image-store.s3.amazonaws.com/0/51093/850efad0-b229-3860-4d00-0902e787f2ca.png)

### 3. USBシリアル変換アダプターのジャンパーピンを3.3V側に変更する
![シリアル.png](https://qiita-image-store.s3.amazonaws.com/0/51093/cc2249af-0ef0-3c8b-86b1-36ef4907941f.png)

### 4. USBシリアルアダプターとRaspberryPiをジャンパワイヤーを使って接続する
![シリアル接続.png](https://qiita-image-store.s3.amazonaws.com/0/51093/363c0f8b-21a8-8f62-c01a-b23280edf6cb.png)

### 5. USBシリアル変換アダプターにUSB microBケーブルを接続し、もう一方を PCのUSB端子に接続します
![pc.png](https://qiita-image-store.s3.amazonaws.com/0/51093/6f77a93e-52ac-5077-c600-3e41efc3b5ae.png)

### 6. USB AC アダプターにUSB microBケーブルを接続し、もう一方を RaspberryPiのmicroUSB端子に接続して、RaspberryPiに給電する
![AC.png](https://qiita-image-store.s3.amazonaws.com/0/51093/1e56c860-7861-c49e-eeb8-ac3b4d5a92b3.png)

### 7. USBシリアル変換アダプターのドライバインストール
**Windowsの場合**
PCに接続するとWindows Updateからドライバがインストールされます

**Macの場合**
[FTDI社のサイト](http://www.ftdichip.com/Drivers/VCP.htm)からドライバをダウンロードし、インストールします 

### 8. シリアル通信を行う
**Windowsの場合**
シリアルポートに接続できるソフトウェア（Teratermなど）をインストールし接続します 。ビットレートは115200bpsにしてください。

**Macの場合**
Screenコマンドで接続します、Axxxxの部分は環境により異なるので、タブ補完などでコマンドを入力します。

```bash
screen /dev/tty.usbserial-Axxxx 115200
```

### 9. ログインする
IDは**pi**、デフォルトのパスワードは**raspberry**です。

### 10. Wi-Fiの設定を行う
ネットワークの設定は以下2つのファイルで構成されています。
/etc/wpa_supplicant/wpa_supplicant.conf
/etc/network/interfaces

接続するアクセスポイントに合わせて/etc/wpa_supplicant/wpa_supplicant.confを編集しましょう。

**WPA/WPA2の場合**
wpa_passphraseコマンドを使ってssidとpskを設定します。{ssid}の部分を接続する無線LAN環境のssid、{passphrase}を実際のパスフレーズに置き換えて実行してください。

```bash
sudo sh -c 'wpa_passphrase {ssid} {passphrase} >> /etc/wpa_supplicant/wpa_supplicant.conf'
```

```bash:例
sudo sh -c 'wpa_passphrase home_ssid home_passphrase >> /etc/wpa_supplicant/wpa_supplicant.conf'
```

コマンドを実行すると`/etc/wpa_supplicant/wpa_supplicant.conf`が以下のように更新されます。

```text:/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        priority=0
        scan_ssid=1
        ssid="{ssid}"
        proto=WPA2
        key_mgmt=WPA-PSK
        #psk="xxx"
        psk=xxx
}
```

**WEPの場合**
`/etc/wpa_supplicant/wpa_supplicant.conf`を以下のように編集してください

```text:/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        priority=0
        scan_ssid=1
        ssid="{ssid}"
        key_mgmt=NONE
        wep_key0="{passphrase}"
        wep_tx_keyidx=0
        auth_alg=SHARED
}
```

**FREESPOTなどパスワード設定が無い場合**
`/etc/wpa_supplicant/wpa_supplicant.conf`を以下のように編集してください

```text:/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        priority=0
        ssid="{ssid}"
        key_mgmt=NONE
}
```
[FREESPOT](https://freespot.com/)などブラウザ認証が必要になる場合は`startx`コマンドなどでGUI操作を行う必要があります。ただしシリアル通信では`startx`は利用できないので、別途ディスプレイ、キーボード、マウスを用意してRaspberryPiをスタンドアローンで操作する必要がある場合があります。

**共通的な補足**
接続する無線LAN環境がSSIDステルスモードの場合は、`scan_ssid=1`を追記してください。上記の例では追記済みとなっているので、もしステルスモードでない場合は当該行を削除してください。
複数のネットワーク設定を記述する場合は`priority`の数値を調整してください。値が大きい方が優先されます。

続いてDHCPを利用してIPアドレスの払い出しを行う場合は/etc/network/interfacesを編集しましょう。

```text:/etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto wlan1
allow-hotplug wlan1
#iface wlan1 inet manual
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
```

### 11. 疎通確認を行う
Wi-Fiの設定が完了したらwlan0を再起動します。

```bash
sudo ifdown wlan0
sudo ifup wlan0
```

疎通確認を行います。

```bash
ping -c 1 www.yahoo.co.jp
```

```bash:実行結果の例
$ ping -c 1 www.yahoo.co.jp
PING www.g.yahoo.co.jp (183.79.198.116) 56(84) bytes of data.
64 bytes from f9.top.vip.kks.yahoo.co.jp (183.79.198.116): icmp_req=1 ttl=50 time=20.8 ms

--- www.g.yahoo.co.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.884/20.884/20.884/0.000 ms
```

### 12. RaspberryPiのセットアップを行う
**初期設定を行う**
microSDカードは8GBのものを利用していますが、初期状態だと4GB程度しか認識できていないので、`raspi-config`というコマンドを利用して、ファイルシステムの拡張を行います。またタイムゾーンの変更もあわせて行います。

```bash
sudo raspi-config
```

コマンド実行後、表示に従って以下の操作を行ってください。操作内容によっては再起動が必要になりますので、適宜再起動も行ってください。
Expand Filesystem > Select
Internationalisation Options > Change Timezone > Asia > Tokyo

**各種アップデートを行う**

```bash
# パッケージの更新 
sudo apt-get update 
sudo apt-get upgrade

# ファームウェアの更新
sudo rpi-update

# 再起動
sudo reboot 
```

**ハンズオンに必要なソフトウェアをインストールする**
node.jsをインストールします

```bash
wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz
 tar zxvf node-v0.10.28-linux-arm-pi.tar.gz 
sudo mv node-v0.10.28-linux-arm-pi /opt/node
```

環境変数にnode.jsのパスを追加します

```
 vi /home/pi/.bashrc
```

```text:/home/pi/.bashrc
（ここより上は省略）

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

# この行を追記
export PATH=/opt/node/bin:$PATH
```

設定を更新します

```bash
source ~/.bashrc
```

バージョンの確認を行います

```bash
node -v 
npm -v 
```

sudoでnpmコマンドが実行できるようにリンクを作成する

```bash
 sudo ln -s /opt/node/bin/node /usr/bin/node
 sudo ln -s /opt/node/bin/npm /usr/bin/npm
```

Python関連のパッケージをインストールする

```bash
sudo apt-get install python-pip
 sudo pip install requests
```

i2cを利用するためのパッケージをインストールする

```bash
sudo apt-get install python-smbus i2c-tools
```

i2Cを有効化する

```bash
sudo raspi-config
```

コマンド実行後、表示に従って以下の操作を行ってください。操作内容によっては再起動が必要になりますので、適宜再起動も行ってください。
Advanced Options > I2C

/etc/modulesにI2Cを有効にする設定を追記します

```bash
sudo vi /etc/modules 
```

```text:/etc/modules 
（ここより上は省略）

snd-bcm2835

# この行以下を追記
 i2c-bcm2708
 i2c-dev
```