2024-7-18 11:02:34 [显示全部楼层]
41072浏览
查看: 41072|回复: 0

基于Firebeetle ESP32-C6智能室内环境监测系统

[复制链接]
本文介绍了一种基于ESP32开发板、SHT31温湿度传感器、ENS160空气质量传感器和锂电池的室内环境监测系统。通过整合这些先进的硬件设备,系统能够实时监测和记录室内的温度、湿度、空气质量指数(AQI)、挥发性有机化合物(TVOC)和eCO2等关键参数。本文详细描述了硬件的选择和连接方式,以及如何利用ESP32开发环境进行数据采集、处理和传输的技术细节。该系统不仅能提供实时监测数据,还通过智能分析和用户界面展示,帮助用户有效管理室内空气质量,为健康和舒适创造理想的居住环境。

引言
项目背景
在现代社会,人们大部分时间都在室内工作和生活,因此室内空气质量对健康和舒适感影响重大。不良的室内空气质量可能导致健康问题,如过敏反应、呼吸道疾病等。传统的空气质量监测方法往往昂贵且复杂,难以普及到普通家庭和办公场所。随着物联网技术的进步和低成本传感器的发展,基于ESP32等开源硬件平台的室内环境监测系统成为了解决这一问题的新途径。

项目目的
本项目旨在设计和实现一种可靠、精确的室内环境监测系统,通过集成ESP32、SHT31温湿度传感器、ENS160空气质量传感器和锂电池,实现对室内环境关键指标的持续监测和数据记录。具体目标包括:
  • 实时监测与数据采集:利用SHT31传感器实时监测室内的温度和湿度变化,ENS160传感器则负责监测空气中的AQI、TVOC和eCO2等污染物浓度。
  • 数据处理与分析:通过ESP32开发环境,采集、处理和传输传感器数据,将结果反映到用户界面或远程服务器,使用户能够实时了解室内空气质量状况。
  • 用户友好性与实用性:设计简洁直观的用户界面,提供数据可视化和警报功能,帮助用户快速响应并改善室内环境,提升生活质量和工作效率。

硬件清单
硬件连接
基于Firebeetle ESP32-C6智能室内环境监测系统图2


软件设计
数据采集与处理
在本项目中,ESP32微控制器作为核心处理单元,负责采集传感器数据、处理和分析数据,并通过无线通信将数据传输至服务器。以下是具体的软件逻辑设计:
1.电池电压采集:
   a.使用ESP32的IO0引脚采集电池电压。
   b.通过模拟数字转换(ADC),将采集到的模拟电压信号转换为数字信号,便于后续处理。
2.温湿度、空气质量数据采集:
   a.使用ESP32的I2C读取传感器的数据。
3.数据上报:
   a.使用ESP32的WiFi模块连接至无线网络。
   b.通过HTTP协议,将采集到的数据上报至服务器,便于远程监控和管理。
以下是具体的软件实现代码示例:
  1. #include <WiFi.h>
  2. #include <HTTPClient.h>
  3. #include <DFRobot_SHT3x.h>
  4. #include <DFRobot_ENS160.h>
  5. DFRobot_SHT3x   sht3x;
  6. DFRobot_ENS160_I2C ENS160(&Wire, /*iicAddr*/ 0x53);
  7. // #define DATA_SEND_INTERVAL_MS 15 * 60 * 1000
  8. #define DATA_SEND_INTERVAL_MS 60 * 1000
  9. int lastDataSentTimestamp = 0;
  10. unsigned long previousMillis = 0;
  11. unsigned long interval = 30000;
  12. // WiFi 网络信息
  13. const char* ssid = "your_SSID";
  14. const char* password = "your_PASSWORD";
  15. // 服务器URL
  16. const char* serverName = "http://192.168.1.236:5000/update";
  17. const char* serverToken = "your_influx_token";
  18. // 定义ADC引脚
  19. const int batteryPin = 0; // IO0
  20. void sendData() {
  21.   // 采集电池电压
  22.   int batteryVoltage = analogReadMilliVolts(batteryPin)*2;
  23.   Serial.print("BAT millivolts value = ");
  24.   Serial.print(batteryVoltage);
  25.   Serial.println("mV");
  26.   
  27.   //采集温湿度
  28.   float temperature = sht3x.getHumidityRH();
  29.   Serial.print("Temperature(C):");
  30.   Serial.println(temperature);
  31.   
  32.   float humidity = sht3x.getTemperatureC();
  33.   Serial.print("Humidity(RH):");
  34.   Serial.println(humidity);
  35.   
  36.   //采集空气质量
  37.   ENS160.setTempAndHum(temperature, humidity);
  38.   
  39.   uint8_t AQI = ENS160.getAQI();
  40.   Serial.print("AIQ : ");
  41.   Serial.println(AQI);
  42.   
  43.   uint16_t TVOC = ENS160.getTVOC();
  44.   Serial.print("TVOC(ppb): ");
  45.   Serial.println(TVOC);
  46.   
  47.   uint16_t ECO2 = ENS160.getECO2();
  48.   Serial.print("ECO2(ppm): ");
  49.   Serial.println(ECO2);
  50.   
  51.   // 创建HTTP客户端
  52.   if (WiFi.status() == WL_CONNECTED) {
  53.     HTTPClient http;
  54.     http.begin(serverName);
  55.     http.addHeader("Content-Type", "text/plain");
  56.     http.addHeader("authorization", serverToken);
  57.     // 创建POST数据
  58.     String httpRequestData = "batteryVoltage=" + String(batteryVoltage) + "&Temperature=" + String(temperature) + "&Humidity=" + String(humidity) + "&AIQ=" + String(AQI) + "&TVOC=" + String(TVOC) + "&ECO2=" + String(ECO2);
  59.    
  60.    
  61.     // 发送HTTP POST请求
  62.     int httpResponseCode = http.POST(httpRequestData);
  63.    
  64.     // 打印响应结果
  65.     if (httpResponseCode > 0) {
  66.       String response = http.getString();
  67.       Serial.println(httpResponseCode);
  68.       Serial.println(response);
  69.     } else {
  70.       Serial.print("Error on sending POST: ");
  71.       Serial.println(httpResponseCode);
  72.     }
  73.     // 结束HTTP请求
  74.     http.end();
  75.   }
  76. }
  77. void setup() {
  78.   Serial.begin(115200);
  79.   //初始化SHT31
  80.   while (sht3x.begin() != 0) {
  81.     Serial.println("SHT31 error");
  82.     delay(1000);
  83.    }
  84.   // 初始化ENS160
  85.   while( NO_ERR != ENS160.begin() ){
  86.     Serial.println("ENS160 error");
  87.     delay(1000);
  88.   }
  89.   ENS160.setPWRMode(ENS160_STANDARD_MODE);
  90.   
  91.   // 连接WiFi
  92.   WiFi.begin(ssid, password);
  93.   while (WiFi.status() != WL_CONNECTED) {
  94.     delay(1000);
  95.     Serial.println("Connecting to WiFi...");
  96.   }
  97.   Serial.println("Connected to WiFi");
  98.   Serial.print("IP address: ");
  99.   Serial.println(WiFi.localIP());
  100.   sendData();
  101. }
  102. void loop() {
  103.   unsigned long currentMillis = millis();
  104.   // if WiFi is down, try reconnecting
  105.   if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >= interval)) {
  106.     Serial.print(millis());
  107.     Serial.println("Reconnecting to WiFi...");
  108.     WiFi.disconnect();
  109.     WiFi.reconnect();
  110.     previousMillis = currentMillis;
  111.   }
  112.   if (millis() > lastDataSentTimestamp + DATA_SEND_INTERVAL_MS) {
  113.     sendData();
  114.     Serial.print("Millis since last measurement: ");
  115.     Serial.println(millis() - lastDataSentTimestamp);
  116.     lastDataSentTimestamp = millis();
  117.   }
  118. }
复制代码
服务器搭建
在电脑端进行以下操作
1. 安装python 3
2. 安装flask
   2.1 按下Win+R,输入cmd,进入命令面板
   2.2 输入"pip install flask" 安装flask
3. 在命令行中运行python代码
  1. from flask import Flask, request, jsonify
  2. app = Flask(__name__)
  3. # Endpoint to handle data from Arduino
  4. @app.route('/update', methods=['POST'])
  5. def update():
  6.     auth_header = request.headers.get('authorization')
  7.     if auth_header == 'your_influx_token':
  8.         data = request.data.decode('utf-8')
  9.         print(f"Received data: {data}")
  10.         # Process the data sent from Arduino here, such as storing it in a database
  11.         return jsonify({"status": "success", "message": "Data received"}), 200
  12.     else:
  13.         return jsonify({"status": "error", "message": "Unauthorized"}), 401
  14. @app.route('/')
  15. def home():
  16.     return "Hello from Flask server!", 200
  17. if __name__ == '__main__':
  18.     app.run(host='0.0.0.0', port=5000)
复制代码
最终结果如下

基于Firebeetle ESP32-C6智能室内环境监测系统图1


结论
项目成果
本文详细介绍了基于ESP32开发板、SHT31温湿度传感器、ENS160空气质量传感器和锂电池的室内环境监测系统的设计与实现。通过整合这些先进的硬件设备和物联网技术,我们成功地实现了对室内空气质量关键参数的实时监测和数据分析。以下是本项目的主要成果和结论:
1. 精准的监测能力:SHT31温湿度传感器和ENS160空气质量传感器的结合,使系统能够精确地监测室内的温度、湿度、PM2.5、CO2、TVOC和eCO2等重要参数,为用户提供全面的空气质量信息。
2. 实时数据反馈:通过ESP32开发环境,我们实现了数据的即时采集、处理和传输,用户可以通过手机应用或网页实时查看室内环境数据,并根据需要采取相应的措施。
3. 用户友好的界面设计:设计简洁直观的用户界面,使用户能够轻松理解监测数据,并通过可视化图表了解空气质量的变化趋势,帮助他们做出更好的决策。
4. 节能和可持续发展:系统采用太阳能板和锂电池供电,有效减少能源消耗,保证系统长期稳定运行,同时降低了对外部电源的依赖,符合节能减排的环保理念。

未来展望
在未来,我们可以进一步优化系统的算法和数据处理能力,增加更多的智能功能。例如,引入机器学习算法对数据进行分析,预测空气质量的变化趋势,提前采取措施改善环境;或者结合人工智能技术,实现对室内环境的自动调节和优化。
功能扩展:
除了个人家庭使用外,该系统还有广泛的应用潜力,可以应用于办公楼、学校、医院等公共场所,帮助管理者监测和改善室内空气质量,提升工作和学习效率,促进员工和学生的健康。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail