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回:デバイスにディスプレイを付けてモチベーションアップ!