Raspberry Piことはじめ

自社勉強会のネタとして、前から触ってみたかったRaspberryPiをいじってみることになりました。せっかくだし、やったことを記事にまとめておこうと思います。
参考書は、以下を採用。RaspberryPiや電子部品の購入方法や、OSインストールの話も説明されていて、とても親切。

- [やさしく始めるラズベリー・パイ　電子工作でガジェット＆カニロボットを作ってみよう](https://www.amazon.co.jp/dp/4839961638/ref=cm_sw_r_tw_dp_U_x_xx91Cb4WZT4EZ)


# １．そもそもRaspberry Pi（ラズパイ）とは？
”A small and affordable computer that you can use to learn programming”
（[ラズパイ公式より](https://www.raspberrypi.org/)）
もともと教育用途で作られた、必要最小限の部品で構成されているちっちゃいパソコンといった感じ。廉価な割に完成度が高く、爆発的にヒットし現在に至る。

## 1.1　特徴
- linuxベースで動く。
 - ディストリビューションはラズパイ用につくられたRasbianOSを採用することが多いみたいだけど、別にubuntuでもcentでもDebianでもなんでもいけるようです。
- MicroSDがHDD代わり。（最低8GB）
 - 開発用途ごとに別々のMicroSD用意しておけば、差し替えるだけで切り替え可能。600円程度で個別の開発環境を保持できるのは嬉しいですね。
- 最新のものはUSB端子はもちろんのこと、HDMI端子やLAN端子もある。、無線は、Wifiとbluetoothを装備。
- 最小限の構成ゆえ、排熱用のファンすらついていない。あんまり無理させちゃだめ。
- もちろん日本語対応。
- ネット経由で別のPCからアクセス可能（普通のlinuxサーバーと同じイメージ）
- <b>電子部品接続用の拡張ポート（40pin GPIO）がある！これが人気の秘密</b>
 - IoTのお勉強に最適かも。

## 1.2　本体の購入
普通の家電量販店では売ってません…（大きなところならあるかも？）
基本は通販でゲット。近所に専門書を扱う書店があれば、そこでも入門用キットが売ってたりもします。色々タイプがあるけれど、いっちゃんええやつを買っておくのが無難です、そこまで金額に差はないし。
執筆時点だと、 RaspberryPi 3B+ってのが一番スペックが高いようですが、それでも5,000 ~ 6,000円ぐらいで入手できます。ちなみに、今回は秋葉原の書泉でこれを購入しました。
[Raspberry Pi 3 B+ スターターキット](https://www.switch-science.com/catalog/3880/)
本体の他に、ケース、OSインストール済みMicroSD,あとHDMIケーブルがセットになって１万円也。OSインストール済みのMicorSDがついてくるのはありがたいですね。
![IMG_7972.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/c98bb774-53f7-123e-88f0-c70c198dedfa.jpeg)
(写真にはのってないけど、HDMIケーブルも同梱）


## 1.3　本体以外に必要なもの
以下が必須。後々、別のPCから乗り込めるようにしますが、初期設定時はどうしても本体から直接モニタリングし、操作する必要があります。

- HDMI接続のあるディスプレイ
 - 持ってない人は、TVを使いましょう。大昔のブラウン管とかじゃない限り、HDMI接続ついているはず。
- USBマウス
- USBキーボード

# ２．起動から基本的な設定まで
諸々準備できたら、早速いじっていきましょう。

## 2.1　まずはOSインストール
参考書を参考にOSイメージをダウンロードし、SDに書き込んで、
…みたいなことをするつもりだったのですが、前述のとおり購入したキットには、OS（Raspbian）インストール済みのSDカードが同封されているので、今回はこれを使うことに。
ラズパイには電源ボタンはなく（！）、電源ケーブルを差し込んだら起動が始まります。

## 2.2　ラズパイ起動から各種設定
一般的なPCのセットアップと同じ感じです。
![IMG_7976.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/85682e03-33b7-1c64-1552-b0149f3a71bf.jpeg)

- 地域の設定、ログインパスワードの設定、etc…
- ネットワーク接続の設定
 - 無線LANでも自動検出してくれます。後回し可能。
- ソフトウェアアップデート
 - こちらも後回し可能。日本語環境にしたい人は先にやっといたほうがいいかも。
 - アップデートファイルの取得場所を選択できますが、特に指定しなくても地域設定に基づいて一番近いミラーリングサイトから拾ってくれます。失敗したときは、しばらく間を置いてリトライしましょう。

## 2.3　その他細かいところ

- 日本語入力は、日本語IMEが必要。apt-getで導入しましょう。（今回は最初からインストールされていた。）
- (macの人）commandキーは使えないので注意。基本、controlキーとの組み合わせでショートカットキー叩ける。
 - 例：保存のショートカット　command + s →　control + s

ソフトウェア・アップデート（ちょっと時間がかかる）が終わったら、自動で再起動されます。
これで、使う準備が整いました。


# ３．外部PCからの接続

ここまでの作業はラズパイにモニタやマウス、キーボードを接続して、GUIでやっています。ここからは、実際の開発を見越して、外部PCから接続する設定を行います。

## 3.1　とりあえず接続してみる
ラズパイに割り当てられたIPアドレスを知るため、terminalを立ち上げ、以下コマンドを実行します。
`ip addr | grep 192`

```:ラズパイ
pi@raspberrypi:/ $ ip addr | grep 192
    inet 192.168.43.xxx/24 brd 192.168.43.255 scope global wlan0
```
xxx部分は、DHCPで自動で割り当てられています。
IPアドレスがわかったので、mac側terminalからssh接続してみる。

```:操作端末(mac)
ssh pi@192.168.43.xxx
```
この後、認証キーの作成と「本当に接続していいの？」みたいなことを聞かれるので[yes]を入力。そのあとで、ラズパイのログインパスワードを入力。接続できました！

macから接続したところ。
![スクリーンショット 2019-09-08 14.10.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/5a0b7020-ef25-16f6-a056-e1b9c145238c.png)
こちらは、windowsからTeraTermで接続したところ。
![teraTerm-Login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/5f78f6e3-fac5-5d0e-013e-7aa7b10446f5.png)


## 3.2　IPアドレス固定
DHCPで割り当てられるIPアドレスはいつ変更されるかわからないので、IPアドレスを固定しておきましょう。
/etc/dhcpcd.confという設定ファイルを編集すると、固定化できます。
<img width="1382" alt="スクリーンショット 2019-09-08 18.55.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/104ea8e2-2146-37e1-a060-f49fe908c4c0.png">


## 3.3　色々な接続方法を試す(VNC編）
大体はssh接続で事足りそうですが、やっぱりGUIで色々できたほうが便利。
というわけで、VNCクライアント（リモートデスクトップみたいなもの）を導入してみました。手順は簡単で、

1. RaspberryPi側でVNC接続を許可する設定を行う。
2. 接続側のPCにVNCクライアントをインストールする。
3. VNCクライアントソフト起動。ラズパイのIPアドレス、ユーザー名、パスワードを指定してログイン

[画像予定…とりわすれ、いつか掲載する！]
若干の描写遅延があるものの、問題なく使えます。

## 3.4　色々な接続方法を試す(sftp編）
ついでにsftp接続も試してみました。windowsからWinSCPで接続。
![WinSCP-Login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/aeee6163-cad4-95a1-f7e8-15c7dfdf631e.png)

こちらも問題なし。

# ４．いよいよ電子回路の制御
端末としての設定は大体整ってきたので、いよいよ電子回路をプログラムで制御してみます。
とりあえず必要そうなパーツを入手し、参考書通りのプログラムを作成してみましょう。

- 電子パーツは秋月電子の実店舗で買ってきました…が、初心者は通販のほうがいいと思います。所狭しと並ぶ電子パーツの中から、お目当てのものを探し出すのはかなりしんどかった…
- 使用する言語は参考書に従いpythonにしました。GPOIを制御するためのライブラリが用意されているので、それを利用する感じ。多分、他の言語にも同様のライブラリがあると思われます。
- コーディングは、外部PCから乗り込んで、ラズパイ上で行いました。
 - 今回のように小さなプログラムなら問題ないけど、大きなプログラムを分散して作る時は、外部PCでコーディング、ラズパイにデプロイして検証、の流れがいいかも。
 
## 4.1　最初の一歩
LEDを明滅させるプログラムを作ってみました。

プログラム実行時
![led_test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/162f9434-e822-41b1-ba46-e82e24a473ac.png)

![ezgif-2-58991c39d412.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394079/cfc31977-f272-4317-a377-5ac9e5197d19.gif)


コードの中で繰り返し回数や明滅間隔を変更できます。プログラムの内容に従って、モノの挙動が変わる。これだけのことでも、結構楽しい。

# ５．今後について
上期はここまで！下準備と、ラズパイへの接続確認で終わった感じなので、モノづくりは下期が本番です。今後やりたいこととしては…

- まずは最終成果物を決める。
- 本格的に電子回路の制御プログラムを作成。
- プログラムをgithubで管理しよう。
 - ラズパイ関係ないけど、せっかく複数人で開発するので、資産の分散管理に触れてみよう。

かなり限られた時間の中で、どれだけの事ができるか不安な面もありますが…
頑張りましょう！