Raspberry Pi 3のセットアップ覚書

ラズパイ3を最初からセットアップしたので、そのメモを兼ねて。
セットアップ自体は2回目だけど、改めてきちんとドキュメントに残しておきたいと思ったので。

何か思いついたら随時追記する予定。

## 必要なもの

今回はWindows一本でやってみたものです。
面倒くさがりなのでUbuntu PCを用意したくない。

あとラズパイにUIなんて不要なのでRasbianはLite版を使います。

### ハード

* PC（Windows 10 / 1809）
* [Raspberry Pi 3 MODEL B](https://amzn.to/2USulpF)
    * その後、Model B+でも本手順と同じで出来ました
* Micro SDカード
    * 16GBくらいあれば余裕
* SDカードライター
* LANケーブル
* Micro USBケーブル（電源供給）
* 2.0A以上供給できるUSB電源（モバイルバッテリーでも可）

### ソフト

* Zip解凍ソフト（なんでも）
* [DD for Windows](http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows)
* sshするためのソフト（ここでは[TeraTerm](https://forest.watch.impress.co.jp/library/software/utf8teraterm/)を使用。PuTTYやCygwinでもOK）

## インストール～起動

ここの記事が本当に最強だったので、ここの通りにやればOK。多謝。
以前インストールしたときにブクマしておいて助かった。

* [Raspbianのインストールと最強の初期設定 \| 純規の暇人趣味ブログ](https://jyn.jp/raspbian-setup/)

流れを凄くざっくりと書くと以下。

1. OS（Rasbian）のzipをDLする。
    * ここでは **raspbian_lite-2019-04-09** を使用。
    * 日本ミラーサーバー：http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/
1. zipを解凍してimageを取り出す。
1. [DD for Windows](http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows)を**管理者権限で起動**して、Micro SDカードにimageを焼き込む。
1. 書き込んだSDカードがWindowsで`boot`ドライブとして認識される。
1. boot直下に `ssh` という空ファイルを作る。
    * Windowsでは右クリックで新規作成→テキストドキュメントとやって、ファイル名を `ssh.` とすると、拡張子なしの空ファイルを作れる。
1. bootのドライブを右クリックで「取り出す」する。
1. Micro SDカードをライターから抜いて、ラズパイに挿す。
1. ラズパイにLANケーブルを繋ぐ。
1. ラズパイにUSBケーブル挿す。これで起動する。

## 初回起動後にやること

### IPアドレスを調べる

USBケーブルは電源供給専用であってシリアルコンソールにはならない。
なので何はともあれ**IPアドレス**を調べないと、基板にアクセスもへったくれもない。

ラズパイのMACアドレスのメーカーコードの先頭部分が `b8-27` だそうなので、Windowsのコマンドプロンプトで `arp -a` してネットワーク上の機器の一覧を出してMACアドレスから探せばOK！

……のはずが、Windowsではarpテーブルが常に最新になっているわけではないようで、以下のコマンドを叩いて更新してやらないと見えなさそう。末尾のIPアドレス部分は適宜合わせる。
全装置にだだだっとping投げる感じでアナログではあるものの確かに確実な方法。

```
for /l %i in (0,1,255) do ping -w 1 -n 1 192.168.1.%i
```

* 引用元：[同じLAN内に接続したRaspberry PiのIPアドレスを調べる \- Qiita](https://qiita.com/xshell/items/af4e2ef8d804cd29e38e#windows%E3%81%AE%E5%A0%B4%E5%90%88)

バッチファイル化するとこう。せっかくなので[gistにも置いた](https://gist.github.com/daijin/e8c7ea7c38f94a013bcd28dcc4fab2f5)。

```:search_raspberrypi.bat
for /l %%i in (0,1,255) do ping -w 1 -n 1 10.130.1.%%i
arp -a | findstr b8-27
pause
```

sshで繋いだらIPアドレスの固定化をすれば良い。
もし何らかの権力によりIPアドレスの固定化をさせてもらえないなどの場合は、仕方ないので時々このバッチファイルを叩く。

### sshで接続しにいく

基板のIPアドレスがわかったら、**TeraTerm**とかで当該IPアドレスにssh接続。
認証ウィンドウが出れば勝利。

初期の認証はUserは `pi` 、Passwordは `raspberry` になっている。
ラズベリーのスペルはpを忘れることが多い。らすぷべりー。

### 接続後にやるおまじない

何はともあれupdateしとく。

```sh
sudo apt-get update
```

あとvimを入れとく。個人の好みです。

```sh
sudo apt-get install vim
```

### vi / vimの設定

ラズパイ上でviやvim使ってると以下の現象に遭遇する。

* 十字キーが文字になってしまう
* バックスペースが効かない

この場合は以下のファイルを新規作成して、

```sh
vi ~/.vimrc
```

以下を書いておくと幸せになれる。

```:.vimrc
set nocompatible
set backspace=indent,eol,start
```

* 引用元：[vimで方向キーがABCDを入力してしまう問題の解決 \- Qiita](http://qiita.com/blue_camel/items/e2bd59a3b33acd5edfd0)

テンキーが文字化けする場合は、TeraTerm側の設定を変える。PuTTYも同様。
[設定] → [キーボード] → 無効化するモードの、「アプリケーションキーパッド」にチェックを入れる

* 引用元：[ssh接続でvi\(vim\)使用時テンキー入力にて文字化け 回答数1 【OKWAVE】](http://okwave.jp/qa/q5168001.html)

### 本体のLEDの点灯トリガーを変える

2つのLEDがあるが、デフォルトの点灯トリガーが気に食わない。
赤LEDは電源投入時、緑LEDはSDカードアクセス時にチカチカするように見える。
（ラズパイの型によってもタイミングは違うらしい。）
何もアクセスしてないで放置してるとどっちも消灯状態になって生存状態が一目で分からない。

以下を追記して、常時点滅するようにしておいた。再起動後から有効。

```sh:/boot/config.txt
# power LED is heartbeat
dtparam=pwr_led_trigger=heartbeat
```

### Locale設定

日本語LOVEな人は以下を設定しておくと、コンソールのメッセージが割と日本語になって幸せになれるかもしれない。

```
sudo raspi-config
```

で、以下。

```
4 Localisation Options
  -> I1 Change Locale
    -> ja_JP.UTF-8 UTF-8 を探してスペースキー、OK
  -> I2 Change Timezone
    -> Asia / Tokyo を探してOK
```

### 利用可能な領域をSDカード全域にする

```
sudo raspi-config
```

して、Advanced Options -> Expand Filesystem を選べばOK。

### swapサイズ増やす

デフォルトだと100MBっぽいので、SDカードに余裕があるなら増やしてしまう。
現状の確認コマンドは以下。

```
free -h
```

書き換えるのは以下。

```:/etc/dphys-swapfile
CONF_SWAPSIZE=1024
```

そのあと以下をすると設定反映される。

```
sudo systemctl stop dphys-swapfile
sudo systemctl start dphys-swapfile
```

### 共有フォルダを設定する

この先、例えばソースコードをガリガリ書くことになったら、さすがに使い慣れたエディタを使いたいので（VS Code派）、Windowsから直接見れるようにしておきたい。

ここの記事を何も考えずにやればOK。多謝。

* [Raspberry Pi 3 Model B\+ に samba をインストールする \- Qiita](https://qiita.com/bu_itamochi/items/d413d24d68f144949c57)

## 無線LANアクセスポイント化する

せっかく無線LANのチップ積んでるんだから、今後のためにも、LANケーブルなしでスマホから直でラズパイのセンサーにアクセスできるようにしておきたい。

### セットアップ

以下の記事を、何も考えずに上から順にやっていけばいける。多謝。

* [\[メモ\] Raspberry Pi 3で、Wi\-Fi アクセスポイントルータ \- Qiita](https://qiita.com/mt08/items/f2e4f9d3b1ed00849e23)

ところで、hostapdのversionが2.6だったからなのか分からないが、初めて `sudo service hostapd start` したときに以下のエラーが出た。

> Failed to start hostapd.service: Unit hostapd.service is masked.

この時は以下のコマンドを叩いてからもう一度やると解決した。

```sh
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
```

* 引用元：[RaspberryPiでルーターを自作し無線AP化 \- Qiita](https://qiita.com/wannabe/items/a66c4549e4a11491f9d5#failed-to-start-hostapdservice-unit-hostapdservice-is-masked)

### iPhoneからsshでスクリプトを実行する

無線LANルーター化したラズパイにiPhoneで接続した状態で、iPhoneから「ショートカット」アプリを使うと、簡単にスクリプト実行できた。

* [iPhoneで簡単にSSH接続 ”iOS12のショートカット” \- Qiita](https://qiita.com/torun225/items/0b9a9b05e665e3086365)

試しに `echo hoge > hoge.txt` とか書いて実行してみたら、確かに基板上に `~/hoge.txt` が作られていた。
一度繋いでおいて、ショートカットをぽーんと叩くとなんでも実行できるということみたい。これは便利。

## BluetoothでiPhoneとペアリング

基板上で以下を叩く。

```
sudo bluetoothctl
[bluetooth]# power on
[bluetooth]# discoverable on
[bluetooth]# agent on
[bluetooth]# default-agent
```

この状態で以下をすると、自分のiPhoneが出てくるので、ペアリングしてみる。

```
[bluetooth]# scan on
  -> だばだばとデバイスが出てくる
[bluetooth]# pair xx:xx:xx:xx:xx
```

iPhone側でペアリングを受け入れる。これで繋がる。
……が、即切れてしまう。

以下の記事を読むと `gnome-bluetooth` を入れると解消するという記述があった。
[Raspberry pi3 をiPhoneとbluetooth接続しようとしてかなりハマった話 \- Qiita](https://qiita.com/nexxx1098/items/3b73c217dd32fca0cd5b)

試してみようと思ったけど、`apt-get`叩いたら800MBくらいインストールしようとしだしたのでやめた。
関連してインストールしようとしたライブラリたちを眺めてみると、`libbluetooth3`という文字が目についたので、これだけ入れてみた。

```
sudo apt-get install libbluetooth3
```

これだけで切れなくなりました。

なお一度受け入れたペアリングを信頼しておくのは以下。

```
[bluetooth]# trust xx:xx:xx:xx:xx
```