Raspberry Pi 3　シリアルコンソールでの初回起動からSSH接続まで

##はじめに
RaspberryPi3を組み込み向けに使用したかったため、新規に購入した。
GUIは使用せず、シリアルコンソールを使用してSSH接続までのセットアップを実施した。
・必要最低限のハードウェアを購入（本体、SDカード、ケース、電源、USB-TTL変換）
・初回起動時よりシリアルコンソールを使用
・環境：Windows10、ノートPC

RaspberryPi3ではBlueToothが追加されたことで、初期状態では起動後、クロックに応じてUARTのボーレートが変わってしまうとのこと。
このため、初回起動時よりシリアルコンソールで接続するためにはSDカード上の設定ファイルを一部編集する必要がある。

【参考サイト】
1. [Raspberry Pi 3をシリアルコンソールだけで初回起動するまで]
(http://akkagi.info/20161004_web/)
　※多くの部分は上記ページをほぼそのまま参考にさせていただいています。
2. [Raspberry Pi ステルスSSIDへの接続方法]
(https://qiita.com/minatomirai21/items/6397ba560626f09fe42b)
3. [ｖｉエディタの使い方]
(https://prev.net-newbie.com/linux/commands/vi.html)

##使用したハードウェア
以下を購入した。
1. [RSコンポーネントRaspberry Pi 3 B +マザーボード]
(https://www.amazon.co.jp/gp/product/B07BFH96M3/)
2. [Transcend microSD カード 32GB UHS-I Class10 Nintendo Switch/3DS 動作確認済 TS32GUSD300S-AE【Amazon.co.jp限定】]
(https://www.amazon.co.jp/gp/product/B07DVGCQP1/)
3. [Miuzei 最新 Raspberry Pi 3B+ ケース ラスベリー パイ 3 Model B+ 5V 2.5A 電源アダプター+冷却ファン+ヒートシンク ラズパイ 3 2 Model Bとも対応（Raspberry Pi 3 Model B+ 本体含まりません） (ケース電源付き)]
(https://www.amazon.co.jp/gp/product/B07H2WKYBF/)
4. [Raspberry Pi ラズベリーパイ用の USB－TTLシリアルコンソールのUSB変換COMケーブルモジュールのケーブル](https://www.amazon.co.jp/gp/product/B00K7YYFNM/)

なお、最後のUSB-TTL変換は輸送に時間がかかりすぐに届かなかったため、以下手持ち品を使用した。
[ＦＴ２３４Ｘ　超小型ＵＳＢシリアル変換モジュール]
(http://akizukidenshi.com/catalog/g/gM-08461/)
RaspberryPiはロジックのレベルが3.3Vのため、USB-TTL変換は3.3Vの製品を使用する必要がある。上記製品は3.3V（5Vトレラント）であることを確認した。

##SDカードへのOS書き込み
OSのイメージを公式ページからダウンロードする。
今回GUIは不要なため、最小構成を選択する。
[Raspbian Stretch Lite]
(https://downloads.raspberrypi.org/raspbian_lite_latest)

ダウンロードしたファイルはイメージファイルのため、イメージファイル書き込み用のツールを使用してSDカードに書き込みする。
今回は以下を使用した。
[Win32 Disk Imager]
(https://sourceforge.net/projects/win32diskimager/files/Archive/Win32DiskImager-1.0.0-binary.zip/download)
インストーラ版もあるが、上記はZIP版。
※展開時に展開先にファイルが全て展開されるので、フォルダの中で実施したほうが良い。

SDカードは新品であれば次のステップに進んでよいが、一度イメージファイルを書き込んでいたりすると、ドライブが2つに分かれていたりする。
このままでは正常にイメージをかけないため、Windowsの「コンピュータの管理」からボリュームを一旦削除し、一つのボリュームとしてフォーマットする。

Wind32 Disk Imagerを開き、ダウンロードした.imgファイルを指定。
書き込み先はSDカードの割り当てられたドライブを指定。
「Write」を押下すれば書き込みが始まる。

##設定ファイルの編集
SDカードにイメージファイルを書き込み後、SDカードのrootディレクトリは認識されないが、bootディレクトリはFAT32のため認識される。
そこで、bootディレクトリ内の以下ファイルをWindows上でgPad等で編集する。

```/boot/config.txt
#行末に以下を追記
dtoverlay=pi3-miniuart-bt
```

```/boot/cmdline.txt
#以下に書き換え
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
```
##RaspberryPiの起動
RaspberryPiを起動していく。
1. RaspberryPiにSDカードを差し込み
2. USB-TTL変換を接続
　　RaspberryPi側：6pin:GND, 8pin:TXD, 10pin:RXD
　　USB-TTL変換側：GNDにGND、TXDにRXD、RXDにTXDを接続
3. TeraTermでシリアル通信を開始
　（ボーレート:115200bps, データ長:8bit, ストップビット:1bit,パリティ:なし）
4. TeraTermのローカルエコーをオフ（Setup->Terminal->LocalEcho）
5. USB Micro-B（スマホ等で一番流通しているコネクタ）経由で電源を供給
以上でTeraTerm上にLinuxの起動画面が表示される。
なお、起動画面の途中で以下エラーが表示されるが問題ない。

```
[FAILED] Failed to start Configure Bluetooth Modems connected by UART.
```

ユーザ名とパスワードを聞かれるため以下を入力

```
raspberrypi login: pi
Password:raspberry
```

##Wi-Fi、およびSSHの設定
シリアルケーブルを毎回接続するのは手間なため、Wi-Fiをセットアップし、SSHでの接続を可能にする。

まずSSHを有効にする。
また、立ち上げ時にWi-FiのCountryが設定されていないと怒られるため、CountryをJPに設定する。

```
sudo raspi-config
5 Interfacing Options
P2 SSH
<YES>
<OK>
4 Localisation Options
I4 Change Wi-fi Country
JP Japan
<OK>
<Finish>
<YES>
```

次にWi-FIの認証の設定を行う。

```
sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf'
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
#psk="PASSPHRASE" #削除
scan_ssid=1 #追記

sudo reboot
```

デフォルトではDHCPによりIPが取得されるが、IPが都度変わると不便なため、ルータ側で「DHCP固定割当設定」により指定のMACアドレスに対して特定のIPを割り振るように設定した。
使用ルータはAterm WR8300N。IPは192.168.0.7を割り当てた。

##ホスト名でのSSH接続
SSHクライアントにはMobaXtermを使用。
この時点で、MobaXterm上より以下でログイン可能。

```
ssh pi@192.168.0.7
```

ホスト名を使用して接続したかったため、RaspberryPi側で以下を設定。

```
sudo vi /etc/hostname
#以下を追記
raspi.local

sudo vi /etc/hosts
#最終行を以下に編集
127.0.1.1     raspi
```

sshを行うWindows PC側で以下を設定。

```C:\Windows\System32\drivers\etc\hosts
192.168.0.7 raspi
```

以下でsshにより接続する。

```
ssh pi@raspi
```

以上により、RaspberryPiに電源ケーブルを接続するのみで、SSHでのログインできるようになる。