GrovePi Zero を Raspberry Pi Zero (W) で使う

## GrovePi

Raspberry Pi で Grove センサーを使う際に便利に使える拡張ボードです。 [Dexter Industries 社](https://www.dexterindustries.com/grovepi-tutorials-documentation/)が販売しています

Raspberry Pi の GPIO ピンに被せるようにして使います

![](https://github.com/DexterInd/GrovePi/raw/master/GrovePi_Plus_By_Dexter_Industries_For_the_Raspberry_Pi.JPG)

Raspberry Pi 2 や 3 には [GrovePi+](https://www.seeedstudio.com/GrovePi%2B-p-2241.html) を、Raspberry Pi Zero (W も含む) には [GrovePi Zero](https://www.seeedstudio.com/GrovePi-Zero%EF%BC%88GrovePi0%EF%BC%89-p-3011.html) という組み合わせになります

### これを使う利点

- Grove センサーが利用可能
    - Grove コネクタという規格があり、その規格に沿っているセンサーであれば、取り付けに半田付けが不要となる仕組み。ピンを間違うことが無いためセンサーやボードを壊す恐れが無くなります
    - [出回っているセンサーの種類](https://www.seeedstudio.com/category/Sensor-for-Grove-c-24.html)は 180 を超えるらしい
- Raspberry Pi 単体では読み取り事の出来ない「アナログ電圧信号」を読み取り可能
    - A/Dコンバータが GrovePi 上に実装されています

### 購入

[Amazon.co.jp でも買えます](https://www.amazon.co.jp/GrovePi-Zero-Raspberry-Pi/dp/B01M708YKB)が、ちょっと高くありませんか。。。？

そこで [Amazon.com で買って](https://www.amazon.com/gp/product/B01M0K1DSE/)みましょう。商品 26.99 USD + 送料 約 15 USD = 4663円 (110.56円/USD) と1週間で届きました

## 使い方

### ハードウェア面

Raspberry Pi Zero W に GrovePi Zero を取り付けて、 D3 ポートに Grove ブザーを接続した様子
※ GPIO ピンにはシリアルコンソールを接続しています

![a.PNG](https://qiita-image-store.s3.amazonaws.com/0/22754/12e053b1-469e-29ce-6f2f-f682959abb89.png)

### ソフトウェア面

[GitHub DexterInd/GrovePi](https://github.com/DexterInd/GrovePi) に掲載されている通り実行すれば OK です

ただし `git` が必要になりますがすっぴんの Raspbian には入っていませんので、それは手動で入れておきます
インストールには全体で 30 分ほどかかりますので時間のある時に行いましょう（ディスクI/Oが...つらい)

再起動すればモジュールが読み込まれ、使えるようになります

```console
$ sudo apt install -y git
$ curl -kL dexterindustries.com/update_grovepi | sudo bash
$ sudo systemctl reboot
```

## 使ってみる

python で使うのが手軽です

`import grovepi` をすると `grovepi` インスタンスが使えるようになるので、あとは `pinMode()` や `digitalWrite()` を使う形です

```console
$ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import grovepi
>>> grovepi.pinMode(3, "OUTPUT")
1
>>> grovepi.digitalWrite(3, 1)
1
>>> grovepi.digitalWrite(3, 0)
1
```

ブザーやリレー、LED が接続されていれば、これだけで制御できます
[Raspberry Pi Zero W + USB セルラーモデムで SORACOM に接続する](https://qiita.com/ma2shita/items/c9d0e5a981c02cf58c5e) と組み合わせれば、簡単に IoT なプロダクトのプロトタイプができます

### 資料について

ポート番号は[ドキュメント](https://www.dexterindustries.com/GrovePi/engineering/port-description/)に対応表があります
analog は digital として使うこともできます
この辺は [analog のサンプル](https://github.com/DexterInd/GrovePi/blob/master/Software/Python/grove_analog_read.py) や [digital のサンプル](https://github.com/DexterInd/GrovePi/blob/master/Software/Python/grove_buzzer.py) が参考になります

[リファレンス](https://www.dexterindustries.com/GrovePi/programming/python-library-documentation/)を見ると `digitalWrite()` や `analogRead()` といった基本的なメソッドだけでなく、[Grove センサーに対応したメソッド](https://www.dexterindustries.com/GrovePi/programming/python-library-documentation/#8)も準備されているため、より簡単にプログラミングできそうです

### python の REPL 環境について

ちょっと話が外れますが python で Ruby の pry のような REPL (対話型評価環境) をやりたいのであれば [ptpython](https://github.com/jonathanslenders/ptpython) が良いようです

[Pythonメモ : 補完等ができるREPLのptpythonを使ってみる](https://wonderwall.hatenablog.com/entry/2017/07/23/202305)

```console
$ sudo pip install ptpython
```

Raspberry Pi Zero だと、ちょっと動作が重たいかも

## あとがき

１日に２本書いてしまった。まだ資料は 0 byte だ。

EoT