Raspberry Piやろう？

#00はじめに
※この記事は[近畿大学Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kindai)の7日目の記事です。
※基本的に近大生向けに書いています。
※今回は安価で試すのに向いているRaspberryPi ZeroWを使う前提で書きますが、他のRaspberryPiでも同じ手順でできます。
※某JavaScript大好き同級生に乗せられるままつよつよ連中の中に突っ込んでしまいました。ｺﾞﾒﾝﾈ

さて、みなさんは<b>RaspberryPi</b>って聞いたことないですか？
まあ、ありますよね。

「ワイ電子回路わからんし...」

って感じでなんだかんだでやったことない人はかなり多いと思います。
なんでまあ、~~どうせいつもの一人クリスマスを過ごすのなら~~、ちょっとやってみませんかって話です。
もちろんRaspberryPi4を待ってからもアリだと思います。

#01買う
そこの君は実に運がいい。だってkinkyな大学の最寄り、長瀬駅から日本橋までなんて近鉄使えばすぐじゃないか、いますぐ日本橋に向かうんだ。
<img width="880" alt="スクリーンショット 2019-12-04 15.01.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450615/90097940-3112-d085-22ac-67cd98ebfdab.png">


シリコンハウス、デジット、千石電商、マルツパーツあたりにほぼほぼ在庫あるので、まずはビギナー向けのケーブルなどがセットになっているものを買うと楽です。maybe...
安く済む<b>RaspberryPi ZeroW(ハンダづけ必須)</b>か<b>RaspberryPi ZeroWH(ピン付けされているもの)</b>がお試しにはおすすめです。

買いに行けない人はいんたーねっつで買えばいいと思います。
[Raspberry Pi Shop by KSY](https://raspberry-pi.ksyic.com/)
[SWITCHSCIENCE](https://www.switch-science.com/)

私はRaspberryPiをこれ書いている時くらいから無くしたことに気づき、慌てて探す羽目に。
１時間ゴミ部屋と格闘してました。掃除しろ。

#02はじめにやること

この辺のことはいろんな記事が書かれているので簡単に書きます。
ググればどっさりヒットしますよ。

##SDカードをフォーマットする
OSを焼く前の準備です。
形式がFAT16,FAT32以外のものは通常のフォーマットとは少し違う方法で、対応形式にする必要があります。
下記のサイトを参考にしてフォーマットしてください。
[FabShop【step-02】raspberry-piに使用するmicroSDカードのフォーマット](https://www.fabshop.jp/【step-02】raspberry-piに使用するmicrosdカードのフォーマット/)

##買ってきたRaspberryPiにOSを焼く
今回は一般的にRaspberryPiに使われるRaspbianを焼きます。

「スターターセットについてきたインストール済みのはダメなのか?」

ダメです。
大体スターターキットなるものについてくるRaspbianはびっくりするほど古いです。
あと容量も心もとないので数百円で新しいSDを買ったほうがいいです。
こういうのとか。（アフィじゃないゾ!）
[Amazon-Team microSDHCカード 16GB](https://www.amazon.co.jp/dp/B07DJ17CKQ/ref=twister_B07RW7DVKL?_encoding=UTF8&psc=1)

RaspberryPiはSDカードとの相性が悪いと最悪認識しません。
買う前にはそのSDカードが使えるか調べましょう。（だいたいレビューがあります。）

~~多分~~大体一番新しいのを選べば問題ないです。
下記のサイトでZIPをダウンロードして解凍し、SDにぶちこみます。
[RaspberryPi.org](https://www.raspberrypi.org/downloads/raspbian/)
<img width="985" alt="スクリーンショット 2019-12-03 11.16.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450615/8b977bf0-c9ce-30ee-e419-c72171c9cae9.png">

ここまできたら焼いたSDをRaspberryPinにぶっさして起動します。
起動したらRaspbianをインスコしましょう。

##ローカルIPを固定する
1.ターミナルで`ifconfig`してRaspberryPinのアドレスを調べる。
2.`sudo nano /etc/dhcpcd.conf`で編集します。

```conf:/etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.xxx.xxx
static routers=192.168.yyy.yyy
static domain_name_servers=192.168.zzz.zzz
```

ip_addressは設定したいIPアドレス
routersはルーターのIPアドレス
domain_name_serversはDNSサーバーのIPアドレスを設定する。

3.`sudo service dhcpcd reload`する（しなくてもできるはず、できてなかったら試してください）
4.`sudo reboot`再起動
4.`ifconfig`で設定の反映を確認

ちなみにこれをsshでやると3~4番で止まっちゃう（当たり前）けどとりあえず設定したIPアドレスでsshし直してみてください。
##ssh設定

1.`sudo touch /boot/ssh`します
2.再起動してアラートがでますが「OK」して、画面上部メニュー→「設定」→「Raspberry Piの設定」
3.「インターフェース」でSSHを「有効」に設定する。

これで完了です。

MacBookのターミナルで`ssh pi@192.168.xxx.xxx`すると、
パスワードを要求されるのでデフォルトのパスワード`raspberry`を入力します。

デフォルトのユーザーネーム`pi`とパスワード`raspberry`は後からでも変更できます。
変更後は`ssh USERNAME@192.168.xxx.xxx`して`PASSWORD`を入力します。

#03VScodeと連携させる
ずっとnanoとかviとか嫌なので直接Raspberry PiにVScodeで編集できるようにします。

VScodeでsshしワークスペースを編集できるSSH FSを使います。
https://marketplace.visualstudio.com/items?itemName=Kelvin.vscode-sshfs

使い方はサイトの通り、設定したIPアドレス、ssh時のパスワードを入力するだけ。
そしたらConnect as Workspace folderを選択して、
<img width="583" alt="スクリーンショット 2019-12-06 15.24.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450615/fb0dbb91-b98e-a3eb-aa24-ae40ef17aad1.png">

繋がるのを待つと、
<img width="485" alt="スクリーンショット 2019-12-07 1.25.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450615/1b460459-9573-041a-028a-d87b9d088445.png">

このようになります。
ファイル作成、削除などファイルに動きがあるときは逐一リロードが必要です。

#04GPIOピン制御
~~風邪でもバイトに駆り出すスーパーのせいで~~書く時間がないのでGPIOピンの制御もう書いちゃいます。

PythonでGPIOピンの制御をするにはRPI.GPIOパッケージを使用します。

```python

import RPi.GPIO as GPIO
```

asで好きな名前をつけてください。

GPIO番号の表現の方法は２種類あって、それはGPIOピンの番号とボードピンの番号です。

```python
GPIO.setmode(GPIO.BCM)#GPIO番号指定
GPIO.setmode(GPIO.BOARD)# ボードピン番号指定
```

自分がやりやすい方を選んでください。
今回自分はGPIO番号にしました。

次にそのピンが入力なのか、出力なのかを設定します。
制御したいピンは17番ピンなので、

```python

GPIO.setup(17, GPIO.IN)#入力
GPIO.setup(17, GPIO.OUT)#出力
```

出力の場合、RaspberryPiからの電圧は3.3Vで0と1で設定できます。

```python

GPIO.output(17, 1)#出力を3.3Vにする
```
こうすると17番ピンに3.3V出力されます。
出力を0Vにするには、

```python

GPIO.output(17, 0)#出力を0Vにする
```

プログラムが終了するときにはGPIOピンの設定をオフにします。

```python

GPIO.cleanup()
```

#05Lチカ

これらを踏まえて一例を紹介します。

電子工作の世界にもHello, Worldライクなものが存在します。
それがLチカです。

面白くもなく、ただLEDがチカチカしているだけなのですっ飛ばす人もいますが、一回はやってて損しないかと。
自分のプログラムがターミナルでなく、光として出力されるのは初めてやってみると案外面白いものです。

「あれっLEDが見つからない...秋月で買ったはずなんだが????」

~after 2h~

「あった！」
めっちゃ探したから褒めて欲しい。掃除しろ。

```python:lchika.py
#!/usr/bin/python
# coding: utf-8

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)#GPIO番号指定

GPIO.setup(17, GPIO.OUT)#出力

for i in range(10):
    GPIO.output(17, 1)#出力を3.3Vにする
    time.sleep(0.5)
    GPIO.output(17, 0)#出力を0Vにする
    time.sleep(0.5)

GPIO.cleanup()#GPIOピンの設定をリセット
```
と書いて保存。

```
$ ./lchika.py
```
で実行すると10回LEDが点滅します。
（最初のでかいRaspiのAAは.bash_profileを弄りました。sshしたときにわかりやすくていいよ!）

結果は下の画像リンクでyoutubeに飛んで見てみてください。
[![Lチカ](http://img.youtube.com/vi/I7H5wjy4Wvw/0.jpg)](http://www.youtube.com/watch?v=I7H5wjy4Wvw)


ちなみに（当たり前だけど）iTerminalでもできる。
<img width="375" alt="IMG_3178.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450615/75b1d74e-65ab-2a01-8d6d-360385d5531e.png">

#さいごに
これじゃハンズオンじゃないか。。。
アドカレ7日目がこんな記事で許してくれ。。。許してくれ。。。
流石に自分自身が満足してないので、アドカレ関係なしに、２を設けます。
ここでGPIOピンの基本的な制御まで済ませておいたので、次回はちょっと面白いラズパイ向けのツールで遊んでみたいと思います。