Raspberry Pi + Grove Pi + Node-RED で取得したデータをGoogleスプレッドシートへ

# 今回すること

センシングデータをRaspberry Piを使ってGoogleスプレッドシートへ送ります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/88aa5b40-7a28-6237-c76b-e1b74c78bb52.jpeg" width="70%">


### 使用するもの

- Raspberry Pi 3
- Grove Pi
- Grove 超音波センサー
- プログラム環境：Node-RED


<br>

# 準備
まず、

Raspberry Pi にNodeREDをインストールする。

こちらをご参考

https://qiita.com/tatsuya1970/items/027c123a8f9746fb229f

次に
Gorve Pi　を　NodeRED で使えるようにする。

こちらをご参考

https://qiita.com/tatsuya1970/items/a7fdfd8538347b40da28

# Googleスプレッドシートの設定

## Google Sheets APIの有効化

Google Cloud Platform を開く
https://console.cloud.google.com/
<br>
以下の画像の矢印のところをクリック
[![Image from Gyazo](https://i.gyazo.com/e80233d636bb7aefb88b39ed932b7a20.png)](https://gyazo.com/e80233d636bb7aefb88b39ed932b7a20)
<br>
「新しいプロジェクト」をクリック
[![Image from Gyazo](https://i.gyazo.com/7b2add2ac3508b881b74bef478b4b38f.png)](https://gyazo.com/7b2add2ac3508b881b74bef478b4b38f)
<br>
新しいプロジェクトができたら

「ＡＰＩとサービスの有効化」
[![Image from Gyazo](https://i.gyazo.com/8f17f2f9539e8ab34cbc77cf70601b65.png)](https://gyazo.com/8f17f2f9539e8ab34cbc77cf70601b65)

APIライブラリが開いたら、
「Google Sheets API」 を検索
[![Image from Gyazo](https://i.gyazo.com/e0dbfea7ebada5bef5d9ad61c60f9306.png)](https://gyazo.com/e0dbfea7ebada5bef5d9ad61c60f9306)
<br>
「Google Sheets API」をクリック
[![Image from Gyazo](https://i.gyazo.com/1a37aa056847bdba0e7fc71542b61bfc.png)](https://gyazo.com/1a37aa056847bdba0e7fc71542b61bfc)
<br>
「Google Sheets API」の
「有効にする」をクリック
[![Image from Gyazo](https://i.gyazo.com/2f9cf13739d7b137d5790ec84f52ebd9.png)](https://gyazo.com/2f9cf13739d7b137d5790ec84f52ebd9)


## サービスアカウントと秘密鍵の作成

コンソールメニューから
「IAMと管理」＞「サービスアカウント」

[![Image from Gyazo](https://i.gyazo.com/7009e86224cb58b32289640cbd313d80.png)](https://gyazo.com/7009e86224cb58b32289640cbd313d80)
<br>
「サービスアカウント作成」をクリック
[![Image from Gyazo](https://i.gyazo.com/884d078f1369074b6a7c9b6de646789e.png)](https://gyazo.com/884d078f1369074b6a7c9b6de646789e)


<br>
「サービスアカウント名」を入力し、
メールアドレスをどこかに控え
「完了」

[![Image from Gyazo](https://i.gyazo.com/ee3e360bf72caeabf9d3bf1a7aea55b8.png)](https://gyazo.com/ee3e360bf72caeabf9d3bf1a7aea55b8)

<br>
「鍵を管理」

[![Image from Gyazo](https://i.gyazo.com/4ce52400edc08f839a18a1ae7f5a4509.png)](https://gyazo.com/4ce52400edc08f839a18a1ae7f5a4509)

<br>

「キーを追加」＞「新しい鍵を作成」
[![Image from Gyazo](https://i.gyazo.com/57bb54816a044453e11a58b83858887f.png)](https://gyazo.com/57bb54816a044453e11a58b83858887f)

<br>

JSONを選択して、作成
[![Image from Gyazo](https://i.gyazo.com/da670603eaa51a98de4476acb41b8a08.png)](https://gyazo.com/da670603eaa51a98de4476acb41b8a08)

<br>

秘密鍵をパソコンに保存する。
[![Image from Gyazo](https://i.gyazo.com/1fe540a099f76d9d0a833f911cb7094c.png)](https://gyazo.com/1fe540a099f76d9d0a833f911cb7094c)


## 共有設定

Googleスプレッドシートで新規作成し、
右上の「共有」をクリック

[![Image from Gyazo](https://i.gyazo.com/d38387f94e9ad891742503425ee1711e.png)](https://gyazo.com/d38387f94e9ad891742503425ee1711e)

　ここにさきほど作成した秘密鍵のアドレスを入れる
[![Image from Gyazo](https://i.gyazo.com/7a3b00db0eb7e231b863b0b21a99531a.png)](https://gyazo.com/7a3b00db0eb7e231b863b0b21a99531a)

<br>

# Node-RED

## ノード追加
node-red-contrib-google-sheets のインストール

パレットの管理
[![Image from Gyazo](https://i.gyazo.com/6fbf15db47b7caa0845c1e72a8d4676f.png)](https://gyazo.com/6fbf15db47b7caa0845c1e72a8d4676f)

<br>
パレット　＞　ノードを追加
node-red-contrib-google-sheets　を選択し、
「ノードを追加」をクリック

[![Image from Gyazo](https://i.gyazo.com/bf3f4afbc3fa624578dd26b510ebf0e5.png)](https://gyazo.com/bf3f4afbc3fa624578dd26b510ebf0e5)

<br>

## フロー作成

以下のフローを作成
[![Image from Gyazo](https://i.gyazo.com/c7f86f770c4a0ea3338b8a3f859afbae.png)](https://gyazo.com/c7f86f770c4a0ea3338b8a3f859afbae)

<br>

### Injectionノード（タイムスタンプと表示されてるノード）

ノードをダブルクリックし、以下設定。
[![Image from Gyazo](https://i.gyazo.com/96a73eee4c849d152d1f9c759a513322.png)](https://gyazo.com/96a73eee4c849d152d1f9c759a513322)

### GrovePi超音波距離センサーノード

以下のように設定
[![Image from Gyazo](https://i.gyazo.com/f43d7511e3814d92ba944cb7fcd41ed5.png)](https://gyazo.com/f43d7511e3814d92ba944cb7fcd41ed5)


### Gsheetノード
Gsheet ノードをダブルクリック
credsの横にある「＋」をクリック

[![Image from Gyazo](https://i.gyazo.com/c8de72af8a4756b3f04929a5057b8fc6.png)](https://gyazo.com/c8de72af8a4756b3f04929a5057b8fc6)

<br>

ここにさきほどの秘密鍵の内容をペーストし、「追加」

[![Image from Gyazo](https://i.gyazo.com/0800dc8a86546585b995546feb8ae087.png)](https://gyazo.com/0800dc8a86546585b995546feb8ae087)

<br>

他の項目を埋める。
Method: Append Row
SpreadSheetID: スプレッドシートのURLの以下のXXXXXの部分
Cells : シート名＋セル

```
 （例）
https://docs.google.com/spreadsheets/d/XXXXX/edit?gid=0#gid=0
```

[![Image from Gyazo](https://i.gyazo.com/f420fb86fc3779d7c925a2aa32e8aa27.png)](https://gyazo.com/f420fb86fc3779d7c925a2aa32e8aa27)



## デプロイ

「デプロイ」

[![Image from Gyazo](https://i.gyazo.com/b7c05a2165f50616000d6b67642983c0.png)](https://gyazo.com/b7c05a2165f50616000d6b67642983c0)


<br>
センサーデータがGoogleスプレッドシートに書き込まれた。

![0fc94f321dbc96023d1ff750b14364c1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291592/8cec7d92-b721-0375-07d3-d4e9f997e834.gif)




# その他

立ちあげたとき、
たまにデバッグ画面にこういうエラーがでるけど、
ほうっておくと直る。

```
"Auth Error: Error: invalid_grant: 
Invalid JWT: Token must be a short-lived token (60 minutes) 
and in a reasonable timeframe. 
Check your iat and exp values in the JWT claim."
```


<br>

以上