できること

ラズパイとセンサメダルで作るIoT縄跳びデバイス【第3回】

Google Driveと連携して縄跳び結果を保存・チェック

 

第1回:縄跳び計測デバイスで、目指せ運動不足解消!
第2回:センサメダルで縄跳びの回数を計測し表示させる

 

こんにちは、ヨシケンです!

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

raspberrypi-iot-jumprope-device-03-01

raspberrypi-iot-jumprope-device-03-02

 

今回の記事で必要な物一覧

縄跳びジャンプロープ

raspberrypi-iot-jumprope-device-01-03

 

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

raspberrypi-iot-jumprope-device-01-04

 

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

raspberrypi-iot-jumprope-device-01-05

 

4文字LEDハット

raspberrypi-iot-jumprope-device-01-06

 

今回の記事の流れ

  1. Google Sheetsの設定
  2. ラズパイからGoogleへのアップロード
  3. 縄跳び結果を保存、表示
  4. まとめ

 

1. Google Sheetsの設定

縄跳びを跳んだ回数をカウントできるようになったら、それを保存したり、これまでどれだけ跳んだか確認したくなりますよね。

そのために毎回跳んだ回数などを、Googleのクラウドのスプレッドシートに保存するようにしましょう。Googleのクラウドサービスはある一定までは無料で使えますので、気軽に始めることができます。

まず、以下のGoogleコンソールにアクセスします。Googleアカウントや最初に使い始める登録などはこちらで行って下さい。
https://console.developers.google.com/

Googleアカウントの初期設定が済んだら、コンソール上からSheetsというAPIを検索します。そこにGoogle Sheets APIが出てくるので、これを選びます。

raspberrypi-iot-jumprope-device-03-03

 

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

raspberrypi-iot-jumprope-device-03-04

 

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

raspberrypi-iot-jumprope-device-03-05

 

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

raspberrypi-iot-jumprope-device-03-06

 

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

raspberrypi-iot-jumprope-device-03-08

 

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

raspberrypi-iot-jumprope-device-03-07

 

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

raspberrypi-iot-jumprope-device-03-09

 

raspberrypi-iot-jumprope-device-03-10

 

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

raspberrypi-iot-jumprope-device-03-11

 

事前の設定が済んだら、Google Sheetsにアクセスして、スプレッドシートを作ってみます。Google Driveにアクセスするか、以下のリンクを使います。
https://docs.google.com/spreadsheets/create

Google Sheetsの新規シートが立ち上がったら、左上の名前の所に適当なシート名を入力します。(この時は”Jump_Count”としました)

さらに、右側の「共有」ボタンを押して、先ほど保存したアカウント情報( xxx@yyy.iam.gserviceaccount.com )を入力して、完了します。

raspberrypi-iot-jumprope-device-03-12

 

2. ラズパイからGoogleへのアップロード

さあ、ここまででGoogle側の設定は終わったので、早速ラズパイから使えるようにしましょう。ラズパイを立ち上げて、ターミナルを開きます。

Google Sheetsを使うために、各種認証とgspreadというライブラリを使うので、それらを以下のようにインストールします。

Code-Example
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にデータを保存できるようになりました。ここで以下のように、簡単なラズパイからデータを入力できるプログラムを作ります。

Code-Example
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”のデータが挿入されました。

raspberrypi-iot-jumprope-device-03-13

 

3. 縄跳び&保存、表示!

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

raspberrypi-iot-jumprope-device-03-14

 

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

raspberrypi-iot-jumprope-device-03-15

 

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

raspberrypi-iot-jumprope-device-03-16

 

次に、ble_jump_4d.pyプログラムに追記する形で、ble_jump_4d_sheets.pyを作ります。跳んだ回数をGoogle Sheetsに保存するため、以下の部分を追加しています。

  • 9〜42行目
  • 49〜50行目
  • 57〜69行目
  • 76〜77行目
Code-Example
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())
    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)
                '''

 

このプログラムを流して、センサメダルのボタンを押した後、何回か跳んでみましょう。

raspberrypi-iot-jumprope-device-03-17

 

インターネットがつながる所で、ボタンを押して縄跳びを跳ぶたびに、回数を保存してくれるようになります。このような形でシートに跳んだ回数が保存されたと思います。

 

4. まとめ

この連載ではラズパイとセンサメダルを使って、縄跳びをデジタル化、IoT化してきました。

第3回の今回は、跳んだ回数をカウントするだけでなく、その度に回数などをGoogle Sheetsにアップロードして結果を残せるようにしました。Google Sheetsは、合計値を出したり、グラフにしたりするのも簡単なので、縄跳び結果を手軽に見るのにピッタリです。

最終回となる次回は、跳んだ回数と今回保存させたデータを使って、縄跳びをさらに楽しく、モチベーション高くやれるような仕組みを作ります。

次回もお楽しみに!

 

 

今回の連載の流れ

第1回:縄跳び計測デバイスで、目指せ運動不足解消!
第2回:センサメダルで縄跳びの回数を計測し表示させる
第3回:Google Driveと連携して縄跳び結果を保存・チェック(今回)
第4回:デバイスにディスプレイを付けてモチベーションアップ!

アバター画像

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net


Arduino互換機(M5Stick-C)とセンサを使った衝突回避機能付きリモコンカーをつくろう!