3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

家での毎日のピアノ練習時間を可視化する(RaspberryPi + Pixela)

Last updated at Posted at 2020-02-25

はじめに

最近、趣味で電子ピアノを弾くようになったのですが、家での毎日の練習時間を
自動で記録できれば良いなと思い、ピアノの練習時間をPixelaで可視化する仕組みを作ってみました。

システム概要

図1.png

電子ピアノとRaspberryPiをUSBで接続し、USB抜き差し(=ピアノの電源ON/OFF)を
RaspberryPi側で検知します。
ピアノが電源ONとなっている間の時間を計測し、ピアノ練習時間としてPixelaへ記録します。

使用環境

  • 電子ピアノ YAMAHA ARIUS YDP-S34

  • RaspberryPi Zero (別途、無線LANモジュールを用意)

  • Python 3.7.3

  • python3-pyudev 0.21.0-1

※電子ピアノはUSB接続端子が付いているものを使用します。

ピアノの電源ON/OFFを検知

Pythonのpyudevというモジュールで、USBの接続状態を確認します。

※以下の記事を参考にしました。
RaspberryPiでUSBメモリを挿したことをユーザプログラムから認識する

USB接続のaction=addを検知した時間から、action=removeを検知した時間までを計測し、
その日のピアノ練習時間とみなすようにします。

Pixelaに記録

上記で算出したピアノ練習時間を、WebAPI経由でPixelaへ送ります。

同じ日に何回も練習する場合もありえるので、Pixelaから対象日の練習時間を一度取得したあと、
今回分の時間を足してPixelaへ送るようにします。

Pixela
Pixela API Document

まず、事前にPixelaのユーザ作成と、グラフの作成をコマンドラインで行います。
こちらもWebAPI経由で行います。

  • ユーザを作成

<x-user-token>と<username>は適宜置き換えてください。

$ curl -X POST https://pixe.la/v1/users -d '{"token":"<x-user-token>", "username":"<username>", "agreeTermsOfService":"yes", "notMinor":"yes"}'
{"message":"Success.","isSuccess":true}
  • グラフを作成

グラフidは仮で、"piano-time-graph"としておきます。

$ curl -X POST https://pixe.la/v1/users/<username>/graphs -H 'X-USER-TOKEN:<x-user-token>' -d '{"id":"piano-time-graph","name":"piano-time-graph","unit":"minutes","type":"float","color":"shibafu","timezone":"Asia/Tokyo","isSecret":true,"publishOptionalData":true}'
{"message":"Success.","isSuccess":true}

プログラムでは、一度、対象日の練習時間を取得(GET)してから、
今回分の時間を足して、Pixelaへ送信(PUT)するようにします。

単に今回分の時間をPixelaへ送信(PUT)するだけだと、
その日にPixelaへ記録されている時間を上書きしてしまいます。

また、Pixelaにその日の時間が記録されていない場合(その日初めて練習する場合)、
時間を取得(GET)しようとしても正しい値が取れません。

$ curl -X GET https://pixe.la/v1/users/<username>/graphs/piano-time-graph/20200227 -H 'X-USER-TOKEN:<x-user-token>'
{"message":"Specified pixel not found.","isSuccess":false}

ソースコード全文

以下を参照ください。
https://github.com/hillstop/PianoPracticeTime

動かしてみる

PixelaのURLをブラウザで叩きます。
スクリーンショット 2020-02-25 22.14.51.png
何日分か記録してみました。
まだまだ全体的に白いですが、1年くらい続けると見栄えが良くなるかな?と思います。 (先は長い・・・)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?