出力されたロードセルの値をCSVに落とし込んでみる

はじめに

ラズパイでロードセルの値を拾うことでできたが、csv にも残せたらグラフに表せたりするため、解析等が楽になると思った。

目次

1.ソースを見る

githubの example.py を見る。

example.py
1
2
3
4
5
6
7
8
9
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
#! /usr/bin/python2

import time
import sys

EMULATE_HX711=False

referenceUnit = 1

if not EMULATE_HX711:
import RPi.GPIO as GPIO
from hx711 import HX711
else:
from emulated_hx711 import HX711

def cleanAndExit():
print("Cleaning...")

if not EMULATE_HX711:
GPIO.cleanup()

print("Bye!")
sys.exit()

hx = HX711(5, 6)
hx.set_reading_format("MSB", "MSB")
hx.set_reference_unit(referenceUnit)
hx.reset()
hx.tare()

print("Tare done! Add weight now...")

while True:
try:
val = hx.get_weight(5)
print(val)
hx.power_down()
hx.power_up()
time.sleep(0.1)

except (KeyboardInterrupt, SystemExit):
cleanAndExit()

雰囲気、54 行目の while 文の try の中にある

example.py
57
58
val = hx.get_weight(5)
print(val)

ここを書き換えれば csv に落とせるのではないかと考えた。
While 文とは、条件式が真の間だけ、繰り返し実行するものである。

2.実装する

まずプログラムに必要なものを取り込まなくてはならない。今回は csv と時間が欲しいため、csv のアクセスを可能とするcsvと時間を取得するdatetimeを 4 行目以降に書き込んだ。

_config.icarus.yml
1
2
3
4
5
6
import time
import sys

- import csv
- import datetime

そして 54 行目付近の

_config.icarus.yml
65
66
val = hx.get_weight(5)
print(val)

を書き換える。

今回は配列を使うことにした。
配列とは変数に比べ、複数の要素を含むことができるもののことだ。

_config.icarus.yml
65
66
67
68
69
70
71
72
73
74
75
76
77

- val = hx.get_weight(5)
- print(val)

* val = [0,0] #配列を用意する
* val[0] = datetime.datetime.now() #現在時間の取得(Raspberry Pi側で設定されている時間に依存する)
* val[1] = hx.get_weight(5) #ロードセルからの値を拾う
* print('now time ' + str(val[0]) + ',' + ' now wight ' + str(val[1])) #時間,値となるようにターミナルに出力する

* with open('./weight.csv', 'a') as f: #./にweight.csvを生成する、そこに追記するように書き込む('a')
* writer = csv.writer(f)
* writer.writerow(val) #配列の中身を書き込む

以上だ。配列の中に代入したものを取り出し、csv に書き込むことができるようになった。

このようになった

_config.icarus.yml
1
2
3
4
5
6
7
8
9
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
#! /usr/bin/python2

import time
import sys
import csv
import datetime

EMULATE_HX711=False

referenceUnit = 1

if not EMULATE_HX711:
import RPi.GPIO as GPIO
from hx711 import HX711
else:
from emulated_hx711 import HX711

def cleanAndExit():
print("Cleaning...")

if not EMULATE_HX711:
GPIO.cleanup()

print("Bye!")
sys.exit()

hx = HX711(5, 6)

hx.set_reading_format("MSB", "MSB")

hx.set_reference_unit(referenceUnit)

hx.reset()

hx.tare()

print("Tare done! Add weight now...")

while True:
try:
val = [0,0]
val[0] = datetime.datetime.now()
val[1] = hx.get_weight(5)
print('now time ' + str(val[0]) + ',' + ' now weight ' + str(val[1]))

with open('./weight.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow(val)

hx.power_down()
hx.power_up()

except (KeyboardInterrupt, SystemExit):
cleanAndExit()

4.動作確認

terminal
python example.py
now time 2021-03-06 19:59:06.036324, now weight -52

ターミナルからはnow time 2021-03-06 19:59:06.036324, now weight -52と出力され、csv には2021-03-06 19:59:26.693445,562と保存されるようになった。
これで Google Sheets に落とし込んでグラフ化したり、JavaScript でグラフを作り、Web 上で公開することができるようになった。

5.最後に

Python は扱いやすい言語と言われているが本当にそう感じた。JavaScript を用いてグラフ出力をやってみたいと思っている。

参考

Python で CSV ファイルを読み込み・書き込み(入力・出力)
prog-8.com

コメント