温湿度可视化展示

温湿度可视化展示

本项目实现了一个从esp32-dht22模块读取温湿度数据发送到flask, 通过echarts显示在页面的效果
仓库地址:
https://github.com/BBBlllack/ESP32_DHT22_TH
https://github.com/BBBlllack/flask_dht22_th

Flask后端部分

本项目后端使用flask + echarts, 其中flask的/recv路由用于接收esp发来的温湿度数据。

  • /index 可视化页面
  • /recv?temp=&humid= 分别为温度和湿度
  • 其中cache为列表, 由于本次flask需要部署在pad上, 考虑到性能有限,故未使用数据库, 使用了class序列为json存到文件中, 引入列表作为cache, 每3个或者更多一存
  • 每天的数据存储格式为yyyy-MM-dd.txt
@app.get("/recv")
def recv():
    data_file_name = getDataFileName()
    t = int(time.time())
    temp = float(request.args.get('temp', None))
    humid = float(request.args.get('humid', None))
    data = Data(t, temp, humid)
    cache.append(str(data.__dict__))
    if len(cache) >= 3:
        with open(data_file_name, "a") as f:
            f.write("\n".join(cache) + "\n")
        cache.clear()
    print(data.__dict__)
    if temp and humid:
        return "ok"
    return "err"

ESP32, DHT22硬件部分

本项目使用了DHT22作为数据传感器, 使用的开发平台为platfromio, 使用的依赖为

[env:adafruit_metro_esp32s3]
platform = espressif32
board = adafruit_metro_esp32s3
framework = arduino
board_build.flash_mode = dio
monitor_speed = 115200
lib_deps = adafruit/DHT sensor library@^1.4.6

数据发送函数, 我的server本地地址为192.168.1.150, flask开在5000端口

void sendReq(vector<float> data){
  String api = "http://192.168.1.150:5000/recv?temp=";
  api.concat(String(data[0]));
  api.concat("&humid=");
  api.concat(String(data[1]));
  http.begin(String(api));
  int http_code = http.GET();
  if (http_code == HTTP_CODE_OK)
  {
    api.concat(", ");
    api.concat(http.getString());
    Serial0.println(api);
  }
}

项目效果为

featured

为了测效果我把取暖关闭了, 冻死我了昨晚呜呜呜