はじめに ラズパイでロードセルの値を拾うことでできたが、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 import timeimport sysEMULATE_HX711=False referenceUnit = 1 if not EMULATE_HX711:import RPi.GPIO as GPIOfrom hx711 import HX711else :from emulated_hx711 import HX711def 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 import timeimport sysimport csvimport datetimeEMULATE_HX711=False referenceUnit = 1 if not EMULATE_HX711:import RPi.GPIO as GPIOfrom hx711 import HX711else :from emulated_hx711 import HX711def 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