出力されたロードセルの値を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
#! /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
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
-        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
#! /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

コメント