ネットを介した熱処理炉の温度モニタシステム作成

経緯

研究で熱処理炉を4つほど使用していますが,どれも制御温度(設定温度)と実際の炉内温度の間に差が出てしまいます, 大きいものでは15\circ程度の差が出てしまい,正確な熱処理を行うことができません. 本来ならば炉内の熱電対を温調機にアナログ入力して制御できるのがベストなのですが,温調機の説明書がないためできません. ということで,raspberry piを用いて炉内温度をモニターし,あとで人間の目で見て校正するといった少々力業とも言える手法をとることにしました.

仕様

  • Raspberry PiとK型熱電対をMAX6675モジュールを介して接続し温度計測
  • 計測した温度データを予め作成したAPIサーバーにPOSTリクエストを送信
  • APIサーバーでデータを蓄積
  • 予め作成しておいたwebページにユーザがアクセスするとAPIサーバーにGETリクエストを送信.レスポンスとしてフロント側に温度データを返してグラフ描画する.

APIサーバーの構築(Python)

APIサーバーはpythonのflaskで作成しました.以下ソースコード

import os
from flask import Flask, render_template, request, redirect, url_for, send_from_directory, session
import json
from flask_cors import CORS
import csv

app = Flask(__name__)
CORS(app)

@app.route('/')
def index():
    return 'Hello World!'

@app.route('/post', methods=['POST'])
def post_json():
    posteddata = request.data.decode('utf-8') # POSTされたデータを読み込む
    data = json.loads(posteddata) # POSTされたbytes形式のファイルをjsonファイルに変換する
    date = data['date']
    temp = data['temp']

    with open(fn, 'a') as f:
        writer = csv.writer(f)
        writedata = [date, temp]
        writer.writerow(writedata)

    return str(data)

# GET REQUESTの場合
@app.route('/get', methods=['GET'])
def get_json():
    datelst = []
    templst = []
    with open(fn, 'r') as f:
        for row in csv.DictReader(f):
            templst.append(float(row['temp']))
            datelst.append(row['date'])

    rejsondata = {'date' : datelst, 'temp' : templst}
    return json.dumps(rejsondata).encode('utf-8')

    #return 'This is get method!'


if __name__ == '__main__':

    # 記録用csvファイルを作成する
    fn = 'data.csv' # ファイル名の設定
    # ファイルが存在しない場合の処理 -> csvファイルを作る
    if os.path.exists(fn) == False:
        with open(fn, 'w') as f:
            writer = csv.writer(f)
            writer.writerow(['date', 'temp']) # csv headers
    app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))