t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

ラズパイでソケット通信で受信したデータをCSVに書き込むPythonプログラム

今回も最近作り始めたカロリー記録システムの進捗紹介。

前回はM5 Stack Basicからラズパイにデータを送って画面表示するところまで作成した。
thom.hateblo.jp

今回はCSVにデータをOutputするところまで作成。地味ぃ。。

本当にやりたいのはMatplotlibでグラフ表示なんだけど、元データが集まらないとグラフも作りようがないし、適当なダミーで作り始めてもいつまでかかるか分からないので、それはそれで運用が始まらない。

ということでとりあえずは記録することから本運用を始めることにした。

動作中の画面

ネタも地味なら画面も地味。左上のターミナルがサーバーが受信時刻とデータを画面表示してるところで、右下のターミナルが記録されたcsvを表示したところ。
f:id:t-hom:20210219225648p:plain

コード

import socket
import time
import csv
import os
from datetime import datetime

def record_calorie(cal):
    file_path = '/home/pi/calorie.csv'
    with open(file_path,'a',newline='') as f:
        w = csv.writer(f)
        timestamp =  datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        w.writerow([timestamp, cal])
        print([timestamp, cal])

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(("", 49152))
    while True:
        s.listen(1)
        conn, addr = s.accept()
        try:
            data = conn.recv(16).decode('utf8')
            record_calorie(data)
            time.sleep(1)
        except socket.error:
            pass
        except KeyboardInterrupt:
            conn.close()
            s.close()
        conn.close()

まぁコードも特に大きな工夫はない。前回単純にprintしていたところをrecord_calorieという関数に置き換えてその中でCSV書き込みと画面出力を行っている。

以上。地味回でごめん。。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。