Google Driveと連携して縄跳び結果を保存・チェック
第1回:縄跳び計測デバイスで、目指せ運動不足解消!
第2回:センサメダルで縄跳びの回数を計測し表示させる
こんにちは、ヨシケンです!
運動不足解消のための縄跳びデバイスを作るこの連載。第3回となる今回は、加速度センサから跳んだ回数をカウントする事ができたら、それをGoogle Sheetsに保存、加工する手順を紹介します。今まで跳んだ回数、時間や、総カロリ量などが分かると、今後の運動のモチベーションアップにつながるかもしれません。それでは早速やってみましょう!


今回の記事で必要な物一覧
縄跳びジャンプロープ

ロームセンサメダル(SensorMedal-EVK-002)

ラズパイ・ゼロ(Raspberry Pi Zero W)

4文字LEDハット

今回の記事の流れ
1. Google Sheetsの設定
縄跳びを跳んだ回数をカウントできるようになったら、それを保存したり、これまでどれだけ跳んだか確認したくなりますよね。
そのために毎回跳んだ回数などを、Googleのクラウドのスプレッドシートに保存するようにしましょう。Googleのクラウドサービスはある一定までは無料で使えますので、気軽に始めることができます。
まず、以下のGoogleコンソールにアクセスします。Googleアカウントや最初に使い始める登録などはこちらで行って下さい。
https://console.developers.google.com/
Googleアカウントの初期設定が済んだら、コンソール上からSheetsというAPIを検索します。そこにGoogle Sheets APIが出てくるので、これを選びます。

ここで左側の青いボタンの「有効化」を押してSheets APIを使えるようにします。

次に左側メニューの「認証情報」に移動します。

認証画面上部の「認証情報を作成」から、「サービスアカウント」を選択します。

サービスアカウントの作成画面で、適当なアカウント名やIDをつけて「作成」を押します。

「アクセスの許可」でもプロジェクトオーナーなどの権限を付けて「続行」します。

こうするとサービスアカウントが作成されます。ここで、以下のような秘密鍵の作成ボタンを押して、JSON形式のファイルをダウンロードしておきます。


JSONファイルをダウンロードしたらそれを開いて、mail情報にあたる xxx@yyy.iam.gserviceaccount.com のアドレスを保存しておきます。また、このJSONファイルをラズパイに転送しておきます。

事前の設定が済んだら、Google Sheetsにアクセスして、スプレッドシートを作ってみます。Google Driveにアクセスするか、以下のリンクを使います。
https://docs.google.com/spreadsheets/create
Google Sheetsの新規シートが立ち上がったら、左上の名前の所に適当なシート名を入力します。(この時は”Jump_Count”としました)
さらに、右側の「共有」ボタンを押して、先ほど保存したアカウント情報( xxx@yyy.iam.gserviceaccount.com )を入力して、完了します。

2. ラズパイからGoogleへのアップロード
さあ、ここまででGoogle側の設定は終わったので、早速ラズパイから使えるようにしましょう。ラズパイを立ち上げて、ターミナルを開きます。
Google Sheetsを使うために、各種認証とgspreadというライブラリを使うので、それらを以下のようにインストールします。
pi@raspizero:~/Programs $ sudo pip3 install oauth2client pi@raspizero:~/Programs $ sudo pip3 install httplib2 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting httplib2 Downloading 100% |████████████████████████████████| 102kB Installing collected packages: httplib2 pi@raspizero:~/Programs $ sudo pip3 install gspread
これでSheetsにデータを保存できるようになりました。ここで以下のように、簡単なラズパイからデータを入力できるプログラムを作ります。
pi@raspizero:~/Programs $ sudo vi spreadsheet.py --------- #!/usr/bin/python # -*- coding: utf-8 -*- import gspread from oauth2client.service_account import ServiceAccountCredentials key_name = ‘xxx.json’ # Use your own information sheet_name = 'jump_count' # Use sheets API scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name(key_name, scope) gc = gspread.authorize(credentials) # Enter TEST to Sell A1 cell_number = 'A1' input_value = 'Total Jump' wks = gc.open(sheet_name).sheet1 wks.update_acell(cell_number, input_value)
このプログラムを流してみると、ラズパイからクラウドのシートに”Jump Data”のデータが挿入されました。

3. 縄跳び&保存、表示!
それでは縄跳びプログラムを改変して、跳んだ回数をGoogleにアップロードできるようにします。

まず自分のシートのsheet_id(以下URLの赤枠の部分)を記録しておきます。

スプレッドシート上では、A列・B列に日付・時間、C列に跳んだ回数、D列に実施時間(秒)、E列はカロリ量を保存していきます。シート上のC1、D1、E1に合計の式を入れておくと、跳んだトータルの回数や総消費カロリ量などを自動で計算してくれます。

次に、ble_jump_4d.pyプログラムに追記する形で、ble_jump_4d_sheets.pyを作ります。跳んだ回数をGoogle Sheetsに保存するため、以下の部分を追加しています。
- 9〜42行目
- 49〜50行目
- 57〜69行目
- 76〜77行目
pi@raspizero:~/Programs $ sudo cp ble_jump_4d.py ble_jump_4d_sheets.py
--- 以下、変更・追記部分を黄色表示 ---
#!/usr/bin/env python3
# coding: utf-8
---
import gspread
from apiclient import discovery
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
import numpy as np
from datetime import datetime
key_name = "xxx.json" # Use your JSON file name
sheet_name= “jump_count” # Sheet name
sheet_id = “zzz” # Sheet Id
class SpreadSheet(object):
def __init__(self, sheet_id):
self.sheetId = sheet_id
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(key_name, scope)
http_auth = credentials.authorize(httplib2.Http())
discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?''version=v4')
self.service = discovery.build('sheets', 'v4', http=http_auth, discoveryServiceUrl=discoveryUrl)
def append(self, values): # Append data in Google Sheets
assert np.array(values).shape==(5,) , "The shape of value %s must be 5" % (np.array(values).shape)
value_range_body = {'values':[values]}
result = self.service.spreadsheets().values().append(spreadsheetId=self.sheetId,
range=APPEND_RANGE, valueInputOption='USER_ENTERED', body=value_range_body).execute()
print(result)
spread_sheet = SpreadSheet(sheet_id)
APPEND_RANGE = 'sheet1!A1:E1'
start_time= datetime.now()
last_time = datetime.now()
last_cnt = 0
last_cal = 0
last_dur = 0
scanner = btle.Scanner()
while True:
---
fourletterphat.print_str("JUMP")
fourletterphat.show()
---
SEQ = sensors['SEQ']
jump_cnt = sensors['Steps']
if SEQ in [255,0,1] and jump_cnt == 0:
start_seq+= 1
start_time= datetime.now()
print(start_time.strftime('%H:%M:%S')+" Start Jumping!")
if last_cnt!=0:
spread_sheet.append([last_time.strftime('%Y/%m/%d'), last_time.strftime('%H:%M:%S'),
last_cnt, last_dur, last_cal])
else:
last_time= start_time
last_cnt = jump_cnt
cur_time= datetime.now()
if start_seq >= 1:
dur_time= cur_time - start_time
dur_seconds = dur_time.seconds
cur_cnt = jump_cnt
cur_cal = round(cur_cnt*0.1,1)
jump_text= str(cur_cnt)+" Jump "+str(cur_cal)+" Cal "+str(dur_seconds)+" s"
print(jump_text)
fourletterphat.print_number_str(cur_cnt)
fourletterphat.show()
last_dur = dur_seconds
last_cal = cur_cal
'''
for key, value in sorted(sensors.items(), key=lambda x:x[0]):
print(' ',key,'=',value)
'''
このプログラムを流して、センサメダルのボタンを押した後、何回か跳んでみましょう。

インターネットがつながる所で、ボタンを押して縄跳びを跳ぶたびに、回数を保存してくれるようになります。このような形でシートに跳んだ回数が保存されたと思います。
4. まとめ
この連載ではラズパイとセンサメダルを使って、縄跳びをデジタル化、IoT化してきました。
第3回の今回は、跳んだ回数をカウントするだけでなく、その度に回数などをGoogle Sheetsにアップロードして結果を残せるようにしました。Google Sheetsは、合計値を出したり、グラフにしたりするのも簡単なので、縄跳び結果を手軽に見るのにピッタリです。
最終回となる次回は、跳んだ回数と今回保存させたデータを使って、縄跳びをさらに楽しく、モチベーション高くやれるような仕組みを作ります。
次回もお楽しみに!
今回の連載の流れ
第1回:縄跳び計測デバイスで、目指せ運動不足解消!
第2回:センサメダルで縄跳びの回数を計測し表示させる
第3回:Google Driveと連携して縄跳び結果を保存・チェック(今回)
第4回:デバイスにディスプレイを付けてモチベーションアップ!



