Raspberry Pi ZeroをUSBケーブル1本で遊べるようにする

この記事は [SLP KBIT Advent Calendar 2016](http://qiita.com/advent-calendar/2016/slp_kbit) の8日目の記事です。

Raspberry Pi Zeroを個人輸入したのでそのセットアップをするのですが......
# まず届かない
今回はpimoroniで注文したのですが、なかなか届きませんでした。
通常なら10日で届くらしいのですが、今回は13日と少し時間がかかりました。
その原因は

- 名前を漢字で入力してしまった
- 県名を入れるのを忘れた

の2点
県名に関しては日本に届いてしまえば、郵便番号で普通に届くのですが名前を漢字で入力したのが問題でした。
ええ、印刷されてませんでしたよ。とほほ......
簡易書留が届いたときに「これ、ここの住所になってるんですけど合ってますか？」と言って一緒に届けてくれました。

# さて、セットアップしていくぞ
無事届いたのでセットアップしていくわけですが、今回はHDMIケーブルをケチったのでディスプレイに繋ぎません。
というのもZeroにはUSBケーブル1本でPCとSSH接続が出来るすごい機能が付いてるのでその機能を使います。
ちなみにこの機能はZeroのみで1，2，3では無理です。USBのチップの関係だとかなんとか......
LANケーブルでこの機能みたいなことは可能らしいですが、電源が別で必要ですしPC側のLAN端子が必要になって実用的ではありません。

## 今回使用した機材
- Raspberry Pi Zero
- 普通のmicroUSBケーブル(参考サイトではOTG対応ケーブルが必要とか書いてありますが、普通のケーブルで大丈夫です)
- SDカード(今回は東芝の16GB Class10)
- Windowsマシン

今回はWindows10のマシンを使用しました。
最初、Macで作業をしていたのですが途中で完全に躓いたので全部Windowsでやりました。

### 1.SDカードにRaspbianを焼く
とりあえずRaspbianをダウンロードしてきます->https://www.raspberrypi.org/downloads/raspbian/
ここでもいいのですが、遅すぎるので日本国内ミラーからダウンロードすることにします。
NOOBSはだめです。画面が見えないため詰んでしまいます。また、Raspbian以外でRetroPieはこの機能が使えます。他のディストリビューションは確認していません。
今回はLite版を使用しました。
URLはこちら->http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/
最新版だとなぜか無理だったので、2016-05-13(2016−05−10)版を使用しました。大体30分程度で終わります。
Zipがダウンロード出来たら展開します。なんかダウンロードページには「うまく行かなかったら別のツール使ってね」みたいなことが書いてありましたが、Windows標準の展開機能で行けました。
では、SDカードをPCに刺します。当たり前ですが、こっからの作業で全データがぶっ飛びますのでご注意下さい。
書き込むツールですが、今回はDD for Windowsというツールを使用しました。
ダウンロードはこちら->[DD for Windows - Tech Info](http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows)
まずDD for Windowsを管理者権限で実行します。
![DD](https://qiita-image-store.s3.amazonaws.com/0/143951/55cfe73c-3d98-ebc2-2a34-d137b1245cbd.png)
「ディスク選択」で書き込むSDカードを選択、「ファイル選択」で展開後に出てきたimgファイルを選択します。
標準ではddiファイルしか表示されないので「ファイルの種類」を「全てのファイル」に切り替えるとimgファイルを選択出来るようになります。
最後に「<<書込<<」をクリックすると書き込まれます。いろいろ警告が出ますが、ちゃんと指定していれば全てOKで大丈夫です。
どうでもいいですが、プログレスバーって素晴らしいですね。

### 2.焼けたOSを書き換える
書き込みが完了するとbootと呼ばれるディスクがマウントされるはずです。そのディスクを開きます。
いろいろファイルが入っていますが、今回編集するのは以下の2つのファイルです。

- config.txt
- cmdline.txt

見つかりましたか？では、config.txtから編集していきます。メモ帳はまずいと思ったので、今回はVS Codeで編集しました。
config.txtの最後に以下の1文を付け足します。

```txt:config.txt
dtoverlay=dwc2
```

次にcmdline.txtを以下のように編集します。このファイルは結構面倒らしく、改行やスペースが変わっただけで起動しなくなる原因になりますので、次の1文に丸ごと書き換えることをおすすめします。(もちろん改行は無しで)
追記しているのは`rootwait`後の` modules-load=dwc2,g_ether`です。

```txt:cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh
```

書き換えが完了したらアンマウントしてSDカードを取り外します。

### 3.起動するよ
やっと起動まで来ました。外したSDカードをZeroに取り付けます。通常であれば、PWR INと書かれた方にUSBケーブルを刺しますが今回はUSBの方に差し込みます。反対側は当たり前ですがPCに接続しておきます。
さて、するとACTランプが点滅するはずです。ここで起動するまで待ちます。ACTランプの点滅が止まって点灯に変われば接続出来ます。
ですが、おそらくドライバー関係がうまく入らないはずです。ということでドライバーを入れ替えます。
まず、デバイスマネージャーを開いてポートを覗いてみます。
![デバイス マネージャー](https://qiita-image-store.s3.amazonaws.com/0/143951/f918f094-93ee-e75a-09a7-45f246ca7e25.png)
なんかいますね。これがラズパイです。ドライバーが正しく当たってないとこうなります。
次に正しいドライバーをダウンロードします。
http://domotique.caron.ws/cartes-microcontroleurs/raspberrypi/pi-zero-otg-ethernet/
ここの
Télécharger les drivers suivant: RPI Driver OTG
と書かれた位置にあるファイルをダウンロードしてきます。ダウンロード出来たら、展開しておきます。
へんてこなデバイスを右クリックし、「ドライバーソフトウェアの更新」を選択します。
「コンピュータを参照...」を選んで先ほど展開したファイルがあるフォルダーを選択して「次へ」をクリックします。
これでドライバーが入れ替わります。ネットワークアダプターの位置に移動したら完了です。
でも、これでも接続できません。次にBonjourサービスをインストールします。これを手っ取り早くする方法はiTunesをインストールすることです。
それが嫌な僕みたいな人はこっちのソフトでも同じことが出来るのでこれを使いましょう。
[ダウンロード - Bonjour Print Services (Windows)](https://support.apple.com/kb/DL999?locale=ja_JP&viewlocale=ja_JP)
はい、インストール出来たでしょうか？では、Tera Termを開いてZeroに接続しましょう。
接続先は「raspberrypi.local」と入力します。
IDはpi、パスワードはraspberryと入力します。これでSSHにも接続できてバンザイ！
「無効なホスト」と表示された場合は一度USBケーブルを抜き、再度差し込んでみましょう。
(最初、2016-11-25版で行っていたのですがなぜか繋がりませんでした。ポートスキャンをかけるとSSHのポートが開いていません。謎です。)
さて、繋がったのですがこのままだとZero側からインターネットに出ることが出来ません。とりあえず、出れるようにしましょう。
まず、スタートボタンを右クリックし、ネットワーク接続を選択します。
次に通常インターネット接続に使用しているアダプターを右クリックして、プロパティを開きます。
その後、共有タブ内の「ネットワーク...(N)」のチェックを入れて、ネットワーク接続としてZeroがつながっているネットワーク(ネットワーク接続の画面を見ると分かります)を選択してOKを押します。
これでZeroがインターネットに接続出来るようになったはずです。
試しに以下のコマンドを打ってみましょう。
`$ ping -c 3 www.google.com`
このコマンドのあとにpacket lossが0%であれば大丈夫です。インターネットに接続できています。

### 4.初期設定
いつものラズパイのように設定を行っていきます。ここは自分でググって下さい。
多分用途によって設定が変わるはずです。

#さて、セットアップが出来たわけですが
これ、何に使いましょうかね。

# 今回参考にしたページ
似たようなタイトルになってしまったけど、しょうがないよね、うん
[RaspberryPi Zero 購入メモ（2016/06/23）](http://qiita.com/dc_pi/items/ef97336f5e6b487c2d94)
[Raspberry Pi ZeroをUSBケーブル1本で遊ぶ](http://www.raspi.jp/2016/07/pizero-usb-otg/)
[Raspberry Pi Zero を USB ケーブルだけでセットアップする](http://marrone.jp/labo/?p=1586)
[Pi Zero OTG Ethernet – DOMOTRONIC](http://domotique.caron.ws/cartes-microcontroleurs/raspberrypi/pi-zero-otg-ethernet/)
[raspbian日本のミラーサイト](http://qiita.com/tukiyo3/items/c8555eacb67466b81bc8)