Raspberry PiでGroveセンサーを使う

# はじめに
[Raspberry Pi](https://www.raspberrypi.org/)で[Groveセンサー](https://www.seeedstudio.com/category/Grove-c-1003.html)を使おうとすると、まず「[GrovePi+](https://wiki.seeedstudio.com/GrovePi_Plus/)」が思い浮かびますが、今は「[Grove Base HAT for Raspberry Pi](https://wiki.seeedstudio.com/Grove_Base_Hat_for_Raspberry_Pi/)」がありますので、こちらでいろいろ試してみたいと思います。

# 外観
「Grove Base HAT for Raspberry Pi」は、Raspberry PiのGPIO経由でGroveセンサーとやり取りします。

ポートが山ほど用意されており、これで足らないなんて贅沢は言わせません感がたっぷりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/348e49f1-e89a-9e72-562b-4015939c836b.png)

早速我が家のRaspberry Pi 3B+と接続してみます。
![DSC_0005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/b33b5edd-7c4b-267b-1d04-7e4fd3089824.jpeg)

ﾅﾝﾃｺｯﾀ／(＾o＾)＼
ケースがあると刺さりません．．．
ふたははずしましょう。
![DSC_0006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/5f4a5896-b33d-d61b-ac7e-0486d42e3781.jpeg)

反対側が浮いてますので、足は付けたほうがいいかもしれません。
![DSC_0007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/2837fe31-8c6f-fd20-077d-abd1a61a918f.jpeg)

# 準備
使用するにはseeed grove.pyライブラリというものが必要になりますので、まずはこれをインストールします。

いくつかインストールの方法はあるようなのですが、一番簡単な「Online one-click installation」を行います。

```text
$ curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/install.sh | sudo bash -s -
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/d21f4f5e-59fc-d896-4b7e-7f6b0ac0ccaf.png)

結構な種類のセンサーを動かすプログラム（以下を参照）が用意されています。

```text
grove_12_key_cap_i2c_touch_mpr121
grove_16x2_lcd
grove_1wire_thermocouple_amplifier_max31850
grove_3_axis_accelerometer_adxl372
grove_3_axis_compass_bmm150
grove_3_axis_digital_accelerometer
grove_4_digit_display
grove_6_axis_accel_gyro_bmi088
grove_air_quality_sensor_v1_3
grove_button
grove_cap_touch_slider_cy8c
grove_collision_sensor
grove_current_sensor
grove_gesture_sensor
grove_gpio
grove_high_accuracy_temperature
grove_i2c_color_sensor_v2
grove_i2c_motor_driver
grove_i2c_thermocouple_amplifier_mcp9600
grove_imu_9dof_icm20600_ak09918
grove_lcd_1.2inches
grove_led
grove_light_sensor_v1_2
grove_loudness_sensor
grove_mech_keycap
grove_mini_pir_motion_sensor
grove_moisture_sensor
grove_multi_switch
grove_multi_switch_poll
grove_oled_display_128x64
grove_optical_rotary_encoder
grove_piezo_vibration_sensor
grove_pwm_buzzer
grove_recorder_v3_0
grove_relay
grove_rotary_angle_sensor
grove_round_force_sensor
grove_ryb_led_button
grove_servo
grove_slide_potentiometer
grove_sound_sensor
grove_step_counter_bma456
grove_switch
grove_temperature_humidity_bme680
grove_temperature_humidity_sht31
grove_temperature_sensor
grove_thumb_joystick
grove_tilt_switch
grove_time_of_flight_distance
grove_touch_sensor
grove_ultrasonic_ranger
grove_uv_sensor
grove_water_sensor
grove_ws2813_rgb_led_strip
```

この中の「grove_led」を試してみます。
刺せるポートは

```text
==============
 pin | slot
==============
  5  | D5   
 12  | PWM  
 16  | D16  
 18  | D18  
 22  | D22  
 24  | D24  
 26  | D26  
```

とのことなので、D5につないでみます。

```text
$ grove_led 5
Hat Name = 'Grove Base Hat RPi'
```

すると、LEDが一定間隔で点滅します。

![DSC_0008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130771/83805dcf-25b6-c89d-2cc0-4af8f8850671.jpeg)

# プログラミング
用意されているプログラムを動かすだけではつまらないので、自分でやりたいようにプログラムを作成してみます。
（言語はPythonを使います）

とりあえず、先程同じLEDを光らせるプログラムを作ってみます。

[grove.pyライブラリ](https://github.com/Seeed-Studio/grove.py)（ファイル名みたいですけど、ライブラリ名です）を介してアクセスします。

## 準備
GPIOのピンに対する読み書きは「grove.gpio」パッケージの「GPIO」クラスを使用します。

```python
import time
from grove.gpio import GPIO
```

「time」パッケージはON/OFFの時間間隔の指定で使います。

## アクセス
今回は５番ピン（デジタル）に対してON/OFFを送りますので、以下のようにインスタンスを作成します。

```python
led = GPIO(5, GPIO.OUT)
```

## 制御
無限ループでON/OFFを繰り返します。（１秒間隔）

```python
while True:
    led.write(1)
    time.sleep(1)
    led.write(0)
    time.sleep(1)
```

## 実行
作成したプログラムを実行します。
（「led.py」というファイル名で保存したとします）

```text
$ python3 led.py
```

先ほどと同様に、一定間隔でLEDが点滅します。

※Python2でもPython3でも使えます

## おまけ
「grove.py」の資料は[こちら](https://seeed-studio.github.io/grove.py/)にあります。
が、ほとんど内容が無く、なんの参考にもなりません。
サンプルのソースを読むのが一番役に立ちます。

# まとめ
「grove.py」を使用すれば、簡単にPythonからGroveセンサーが使えるようになります。

# 参考URL
https://wiki.seeedstudio.com/Grove_Base_Hat_for_Raspberry_Pi/
https://qiita.com/matsujirushi/items/4d54e076902cbbdd2704
https://github.com/Seeed-Studio/grove.py