RaspberryPi ZeroとGrovePi ZeroでLEDチカする

Raspberry Pi Zero WHとGrovePi Zeroを購入してかなり時間が経ちましたが、LEDチカすらもなかなかできず、格闘していました。
やっと、LEDチカする事ができたので、その手順について説明します。
いろいろな情報があって、いろいろな方法を試しました。おそらく、OSのバージョンの違いであったり、ツールのバージョンの関係であったりで、うまく行かない方法を平すら試していました。
たどり着いてみると、案外、手順は簡単でした。
参考にしたサイトはここです。

https://github.com/initialstate/grovepi-zero
https://www.dexterindustries.com/howto/install-raspbian-for-robots-image-on-an-sd-card/

# 環境

* RaspberryPi Zero WH
* GrovePi Zero
* Windows10

# ブートするSDカードの準備
RaspberryPi Zeroに挿してブートするためのSDカードを作成します。

## Raspbian For Robots by Dexter Industriesのダウンロード
https://sourceforge.net/projects/dexterindustriesraspbianflavor/ からRaspbian For Robots by Dexter Industriesをダウンロードします。
ダウンロードしたら解凍しましょう。


## Etcherのダウンロード、インストール
Raspbian For Robots by Dexter IndustriesをSDカードにイメージ保存するために必要なEtcherをダウンドーロして、インストールします。
https://www.balena.io/etcher/

## Raspbian For Robots by Dexter IndustriesをSDカードに転送
banelaEtcherを立ち上げます。
Select Imageでダウンロードして解凍したイメージファイルを選択します。

<img width="602" alt="pi1.png" src="https://qiita-image-store.s3.amazonaws.com/0/334727/80b500be-65ec-efea-4577-3e505423b1c7.png">

Flashボタンをクリック。

<img width="601" alt="pi2.png" src="https://qiita-image-store.s3.amazonaws.com/0/334727/f1fdc191-b796-fe5d-0027-2d0bebca1503.png">

Starting...
Flashing...
Validating...

と続きますので、しばし待ちましょう。
この画面になったら、完成です。

<img width="601" alt="pi3.png" src="https://qiita-image-store.s3.amazonaws.com/0/334727/dde5d9f9-8eb4-b72d-afec-88ed2829a4f9.png">

## WiFiとSSHの設定
Raspbianは、wpa_supplicant.confにWiFi設定、ssh.txtにSSH設定をしたファイルをmicroSDのルートに置いておくと、WiFiルーターにつないでくれます。
また、SSHで接続することも簡単にできます。
まず、このファイルを作成しましょう。
https://mascii.github.io/wpa-supplicant-conf-tool/ にアクセスして、SSIDとパスフレーズを入力して追加ボタンをクリックします。
wpa_supplicant.conf作成ボタンをクリックするとwpa_supplicant.confが、ssh.txt作成ボタンをクリックするとssh.txtファイルをダウンロードできます。
この2つのファイルを、Raspbianイメージを作成したmicroSDにコピーしましょう。
Windowsだと、bootと言うドライブになっているはずです。

# 基本セットアップ
Raspianの基本的なセットアップを進めて行きます。

## 起動
SDカードをRasberry pi zeroに挿して起動しましょう。
USB-A-microUSBケーブルで適当につないでください。そして、起動するまで3分ほど待ちましょう。

## Raspberry pi zeroを探す
WiFiルーターまでは、自動的に接続されます。
普通はDHCPでIPアドレスが振られますので、IPアドレスを調べる必要があります。
まずは、コマンドプロンプトで、以下のコマンドを実行します。
(192.168.0のところは自分の環境に合わせてください)

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

次にarpコマンドでアクセスできたIPアドレス一覧を表示します。

> arp -a

物理アドレスの先頭が、「b8-27」となっているものがRaspberry pi zeroです。

DHCPにIPアドレスの付与を任せると、この手順でRaspberryを探す手間が増えるので、DHCPサーバーのDHCP固定割当設定で空いているIPアドレスに物理アドレスをマッピングする事をオススメします。
そうすると、常に同じIPアドレスが割り当てられます。

## SSHで接続
SSHで接続します。有名なソフトとしてはTeraTermでしょうか。
上記でべたRaspBerry pi zeroのIPアドレスを指定します。

<img width="359" alt="tt1.png" src="https://qiita-image-store.s3.amazonaws.com/0/334727/e7b2db05-ac1d-b7e3-49d5-7dc3b470d6ee.png">

セキュリティ警告が表示されますので、続行をクリックしましょう。
既存の鍵を、新しい鍵で上書きすると言うオプションが表示されたら、チェックしましょう。

SSH認証で、ユーザ名をpi、パスフレーズにrobots1234を入力し、OKボタンをクリックしましょう。

<img width="494" alt="pi4.png" src="https://qiita-image-store.s3.amazonaws.com/0/334727/e7436315-e10c-57e2-c4b2-88920d14ab45.png">

## パスワードの変更
デフォルトのパスワードは危険なので、必ずパスワードを変更しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/dc5ebc34-f712-863a-8648-391ca324fe83.png)

## ファイルシステムの拡張
raspi-configでファイルシステムを拡張します。

```shell
pi@dex~ $ sudo raspi-config
```

7 Advanced Optionsを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/319463ed-41b7-a66b-9dc3-ff1cc2c85bfe.png)

A1 Expand Filesystemを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/705254c3-6225-8ead-a758-809efdab94ac.png)

ここで一度、再起動しましょう(手順に沿っていくとRebootするかを確認しますのでOKしましょう)]

## 日本語の設定
日本語が扱えるように設定します。

```shell
pi@dex~ $ sudo raspi-config
```

4 Localisation Optionsを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/b7428faf-d427-6690-dc90-e1c39711f3ee.png)

I4 Change Localeを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/9bdb6616-df61-0113-df96-a3351994d7c2.png)

ja_JP.UTF-8 UTF-8をスペースキーで選択し、OKします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/b180df01-91d5-8b9b-39bf-98d09f1d2abf.png)

デフォルトを日本語にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/e0709e5b-77b4-7f36-15d1-bf777c833772.png)

## タイムゾーンの設定
タイムゾーンをToKyoにします。

4 Localisation Optionsを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/b7428faf-d427-6690-dc90-e1c39711f3ee.png)

I2 Change Timezoneを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/3b21e8c3-e5eb-6ce1-5984-f2d91be2da01.png)

Asiaを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/156ef8b8-b5b6-3a5c-d228-f9db95593d13.png)

Tokyoを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/08196668-76fd-22e3-f7a6-39a7798287b8.png)

ここで再起動すると設定が反映されます。

```shell
pi@dex~ $ sudo reboot
```

## アップデートの実行
アップデートしておきましょう。
アップデートが終わったら、再起動しましょう。

```shell
pi@dex~ $ sudo apt-get update
pi@dex~ $ sudo apt-get -y upgrade
pi@dex~ $ sudo reboot
```

# 開発環境を整える
ターミナルでエディタ使ってソフトウェアを開発する事もできます(昔はそれしかありませんでした)
WindowsやらMacやらに慣れてしまうと、ターミナルはどうも使いにくい。
なので、Windows10のリモートデスクトップ接続を使って、Raspberryにアクセスして作業できるようにしましょう。

## xrdpのインストール
Windows10のリモートデスクトップ接続を使うためには、xrdpをインストールします。
インストールが終わったら、再起動しておきましょう。

```shell
pi@dex~ $ sudo apt-get update
pi@dex~ $ sudo apt-get -y install xrdp
pi@dex~ $ sudo reboot
```

## リモートデスクトップで接続
Windows10のリモートデスクトップ接続を使ってRaspberryにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/723346d8-0a5f-6939-062d-b33dd1107ee7.png)

繋がりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/7d2a3d2a-58ff-2732-263e-ef8e8c4757a3.png)

# GrovePi Zeroソフトウェアのセットアップ
GrovePi Zeroを使えるようにソフトウェアをセットアップしていきます。

## GrovePi Zeroの初期セットアップ
以下のコマンドでGrovePi Zeroソフトウェアの初期セットアップを行います。
終わったら再起動します。

```shell
pi@dex~ $ sudo curl -kL dexterindustries.com/update_grovepi | bash
pi@dex~ $ sudo reboot
```

## GrovePi Zeroソフトウェアのインストール
GrovePi Zeroソフトウェアをインストールしていきます。
終わったら再起動します。

```shell
pi@dex~ $ cd /home/pi/Desktop/GrovePi/Script
pi@dex~ $ sudo chmod +x install.sh
pi@dex~ $ sudo ./install.sh
pi@dex~ $ sudo pip install grovepi
pi@dex~ $ sudo reboot
```

# LEDチカする
準備ができました。
PythonでLEDチカするプログラムを作ってチカチカしてみましょう。
[Grove - LED Button](http://wiki.seeedstudio.com/Grove-LED_Button/)を使います。これは、0から255の範囲で輝度を変えることができます。また、ボタンにもなっています。

## LED Buttonの接続
LED ButtonをGrovePi ZeroのD3に接続します。

![20190511_105920.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/e912674f-9701-d68a-0a4d-3657282b1337.jpeg)

## プログラム
LEDの輝度を0から255まで変更し、255まで来たら0まで下げるというプログラムを作成します。

```python:ledchika.py
from grovepi import *

# D3に接続
led = 3
data = 0
plus = True

# D3を出力モードに設定
pinMode(led, "OUTPUT")

while True:
  try:
    # 輝度を書き込む
    analogWrite(led, data)

    if(plus == True):
      data += 1
      if(data == 255):
        plus = False
    else:
      data -= 1
      if(data == 0):
        plus = True
  # キーが入力されたらLEDを消灯して終了
  except KeyboardInterrupt:
    digitalWrite(led, 0)
    break
  # エラーなら終了
  except IOError:
    break
```

## 実行
さて、実行してみましょう!!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/e7b854d9-df0b-d413-3d80-87699be88d21.png)

できました！！
![ledchika.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334727/2f72118c-2c5d-8b10-e06d-6e5564263a62.gif)