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というライブラリを使うので、それらを以下のようにインストールします。
1 2 3 4 5 6 7 8 | 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にデータを保存できるようになりました。ここで以下のように、簡単なラズパイからデータを入力できるプログラムを作ります。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 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行目
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 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 credentials = ServiceAccountCredentials.from_json_keyfile_name(key_name, scope) http_auth = credentials.authorize(httplib2.Http()) 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回:デバイスにディスプレイを付けてモチベーションアップ!