ラズパイでLチカをしてみる（入門編）

前回、ラズパイにOSをインストールしたり、基本的なセットアップを行いました。
→ [初めてラズパイをセットアップしてみた](https://qiita.com/RyoheiTomiyama/items/4c25f146264521cf6446)

今回は、電子回路を学ぶために、ラズパイを使ってLEDを点滅させてみようと思います。

# 用意するもの

* ラズパイZERO WH
* [LED （今回は、家にあったLEDを代用しています。)](http://akizukidenshi.com/catalog/g/gP-05156/)
* [ミニブレッドボード（はんだ付けなしで電子回路が組める）](http://akizukidenshi.com/catalog/g/gP-05156/)
* [ジャンパーワイヤ（ラズパイとブレッドボードを繋げる線）](http://akizukidenshi.com/catalog/g/gC-08932/)
* [抵抗 ２７Ω](http://akizukidenshi.com/catalog/g/gR-07960/)

# ラズパイからどうやってLEDを点灯させているかを学ぶ

ラズパイには、GPIOという複数のピンがあり、電子回路に必要なものである。
どう使うかというと、ピンから線を引っ張って、LEDライトやセンサーなどに繋げる。
![IMG_20181103_000223のコピー.jpg](https://qiita-image-store.s3.amazonaws.com/0/92083/63f8a68f-84fe-b9e7-698d-4c6db371e1e8.jpeg)


これらのピンにはそれぞれ役割があり、電源・グラウンド・GPIOだったりする。

電源とグラウンドというのは、乾電池でいう＋極とー極という認識でいいと思う。
GPIOは、ラズパイで操作が行えるピンである。


> GPIOは、集積回路やコンピュータボード上の一般的なピンであり、その動作（入力ピンであるか出力ピンであるかを含む）は、実行時にユーザによって制御可能である。GPIOは"General-purpose input/output"の略で、「汎用入出力」を意味する。

どのピンが何の役割かは、[公式ドキュメント](https://www.raspberrypi.org/documentation/usage/gpio/README.md)を参考に。


## ラズパイで光らせてみる

回路はこんな感じ。一番シンプルなLED回路。
3.3Vの電源 → 抵抗 → LED → GND という流れ。
<img width="883" alt="スクリーンショット 2018-11-04 22.39.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/92083/dffd6dc2-6730-bc38-2af7-ffa098b0011b.png">

単にラズパイから電源を供給しているだけなので、一番左の3.3V電源に繋げると、LEDが光る。

![IMG_20181102_173748.jpg](https://qiita-image-store.s3.amazonaws.com/0/92083/a4555476-3a66-fa30-489f-05bd4dd4eec3.jpeg)



# Lチカ

次はLEDをチカチカと点滅させてみる。
そのためには電源に繋げるのではなく、代わりにGPIOに繋げてラズパイ側で操作させる。

[公式ドキュメント](https://www.raspberrypi.org/documentation/usage/gpio/python/README.md)に従ってLチカをしてみる。

## 回路

先程、3.3V電源に繋げていたものを、GPIO17番に繋げるだけである。

<img width="749" alt="スクリーンショット 2018-11-02 23.28.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/92083/d7ebf6da-bde4-23cd-6bba-314efd0e459f.png">

## ラズパイ上でシステムを組む


### 使用するモジュールをインストール

GPIOを操作するために、[gpiozero](https://gpiozero.readthedocs.io/en/stable/)を使用

```sh
$ pip install gpiozero
```

これだけだと、エラーが起こる

```sh
$ python -c "import gpiozero"
/home/pi/.anyenv/envs/pyenv/versions/3.7.1/lib/python3.7/site-packages/gpiozero/devices.py:452: PinFactoryFallback: Falling back from rpigpio: No module named 'RPi'
  'Falling back from %s: %s' % (name, str(e))))
/home/pi/.anyenv/envs/pyenv/versions/3.7.1/lib/python3.7/site-packages/gpiozero/devices.py:452: PinFactoryFallback: Falling back from rpio: No module named 'RPIO'
  'Falling back from %s: %s' % (name, str(e))))
/home/pi/.anyenv/envs/pyenv/versions/3.7.1/lib/python3.7/site-packages/gpiozero/devices.py:452: PinFactoryFallback: Falling back from pigpio: No module named 'pigpio'
  'Falling back from %s: %s' % (name, str(e))))
```

ので、追加でモジュールをインストール

```sh
pip install RPi.GPIO
```

### pythonでGPIOを操作する

1秒ごとに電源をon/offするシステムである。

```test.py
from gpiozero import LED
from time import sleep

led = LED(17) # 17はGPIOの番号

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)
```

実行すると、LEDが点滅し続ける

```sh
$ python test.py
```

<img width="400" alt="ラズパイをLチカさせてみた" src="https://media.giphy.com/media/kPAEqor8QhBapQb9fn/giphy.gif">


#最後に

ラズパイを使ってLEDを操作してみました。
ただ点滅させただけですが、目の前にあるモノがプログラムで動くのっていいですね！

Webエンジニアとして活動しているので、サイト上で動くものしか作ってこなかったので、IOTはまた違った達成感があります。

なんとなく、入出力のやり方もわかったので、スマートホーム的なものを作ってみようかなと思います！