基于Firebeetle ESP32-C6智能室内环境监测系统
本文介绍了一种基于ESP32开发板、SHT31温湿度传感器、ENS160空气质量传感器和锂电池的室内环境监测系统。通过整合这些先进的硬件设备,系统能够实时监测和记录室内的温度、湿度、空气质量指数(AQI)、挥发性有机化合物(TVOC)和eCO2等关键参数。本文详细描述了硬件的选择和连接方式,以及如何利用ESP32开发环境进行数据采集、处理和传输的技术细节。该系统不仅能提供实时监测数据,还通过智能分析和用户界面展示,帮助用户有效管理室内空气质量,为健康和舒适创造理想的居住环境。引言
项目背景
在现代社会,人们大部分时间都在室内工作和生活,因此室内空气质量对健康和舒适感影响重大。不良的室内空气质量可能导致健康问题,如过敏反应、呼吸道疾病等。传统的空气质量监测方法往往昂贵且复杂,难以普及到普通家庭和办公场所。随着物联网技术的进步和低成本传感器的发展,基于ESP32等开源硬件平台的室内环境监测系统成为了解决这一问题的新途径。
项目目的
本项目旨在设计和实现一种可靠、精确的室内环境监测系统,通过集成ESP32、SHT31温湿度传感器、ENS160空气质量传感器和锂电池,实现对室内环境关键指标的持续监测和数据记录。具体目标包括:
[*]实时监测与数据采集:利用SHT31传感器实时监测室内的温度和湿度变化,ENS160传感器则负责监测空气中的AQI、TVOC和eCO2等污染物浓度。
[*]数据处理与分析:通过ESP32开发环境,采集、处理和传输传感器数据,将结果反映到用户界面或远程服务器,使用户能够实时了解室内空气质量状况。
[*]用户友好性与实用性:设计简洁直观的用户界面,提供数据可视化和警报功能,帮助用户快速响应并改善室内环境,提升生活质量和工作效率。
硬件清单
[*]FireBeetle 2 ESP32 C6开发板
[*]Fermion: SHT31数字温湿度传感器
[*]Fermion: ENS160 空气质量传感器
[*]锂电池
硬件连接
软件设计
数据采集与处理
在本项目中,ESP32微控制器作为核心处理单元,负责采集传感器数据、处理和分析数据,并通过无线通信将数据传输至服务器。以下是具体的软件逻辑设计:
1.电池电压采集:
a.使用ESP32的IO0引脚采集电池电压。
b.通过模拟数字转换(ADC),将采集到的模拟电压信号转换为数字信号,便于后续处理。
2.温湿度、空气质量数据采集:
a.使用ESP32的I2C读取传感器的数据。
3.数据上报:
a.使用ESP32的WiFi模块连接至无线网络。
b.通过HTTP协议,将采集到的数据上报至服务器,便于远程监控和管理。
以下是具体的软件实现代码示例:
#include <WiFi.h>
#include <HTTPClient.h>
#include <DFRobot_SHT3x.h>
#include <DFRobot_ENS160.h>
DFRobot_SHT3x sht3x;
DFRobot_ENS160_I2C ENS160(&Wire, /*iicAddr*/ 0x53);
// #define DATA_SEND_INTERVAL_MS 15 * 60 * 1000
#define DATA_SEND_INTERVAL_MS 60 * 1000
int lastDataSentTimestamp = 0;
unsigned long previousMillis = 0;
unsigned long interval = 30000;
// WiFi 网络信息
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// 服务器URL
const char* serverName = "http://192.168.1.236:5000/update";
const char* serverToken = "your_influx_token";
// 定义ADC引脚
const int batteryPin = 0; // IO0
void sendData() {
// 采集电池电压
int batteryVoltage = analogReadMilliVolts(batteryPin)*2;
Serial.print("BAT millivolts value = ");
Serial.print(batteryVoltage);
Serial.println("mV");
//采集温湿度
float temperature = sht3x.getHumidityRH();
Serial.print("Temperature(C):");
Serial.println(temperature);
float humidity = sht3x.getTemperatureC();
Serial.print("Humidity(RH):");
Serial.println(humidity);
//采集空气质量
ENS160.setTempAndHum(temperature, humidity);
uint8_t AQI = ENS160.getAQI();
Serial.print("AIQ : ");
Serial.println(AQI);
uint16_t TVOC = ENS160.getTVOC();
Serial.print("TVOC(ppb): ");
Serial.println(TVOC);
uint16_t ECO2 = ENS160.getECO2();
Serial.print("ECO2(ppm): ");
Serial.println(ECO2);
// 创建HTTP客户端
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "text/plain");
http.addHeader("authorization", serverToken);
// 创建POST数据
String httpRequestData = "batteryVoltage=" + String(batteryVoltage) + "&Temperature=" + String(temperature) + "&Humidity=" + String(humidity) + "&AIQ=" + String(AQI) + "&TVOC=" + String(TVOC) + "&ECO2=" + String(ECO2);
// 发送HTTP POST请求
int httpResponseCode = http.POST(httpRequestData);
// 打印响应结果
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
} else {
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
// 结束HTTP请求
http.end();
}
}
void setup() {
Serial.begin(115200);
//初始化SHT31
while (sht3x.begin() != 0) {
Serial.println("SHT31 error");
delay(1000);
}
// 初始化ENS160
while( NO_ERR != ENS160.begin() ){
Serial.println("ENS160 error");
delay(1000);
}
ENS160.setPWRMode(ENS160_STANDARD_MODE);
// 连接WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
sendData();
}
void loop() {
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >= interval)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
if (millis() > lastDataSentTimestamp + DATA_SEND_INTERVAL_MS) {
sendData();
Serial.print("Millis since last measurement: ");
Serial.println(millis() - lastDataSentTimestamp);
lastDataSentTimestamp = millis();
}
}
服务器搭建
在电脑端进行以下操作
1. 安装python 3
2. 安装flask
2.1 按下Win+R,输入cmd,进入命令面板
2.2 输入"pip install flask" 安装flask
3. 在命令行中运行python代码
from flask import Flask, request, jsonify
app = Flask(__name__)
# Endpoint to handle data from Arduino
@app.route('/update', methods=['POST'])
def update():
auth_header = request.headers.get('authorization')
if auth_header == 'your_influx_token':
data = request.data.decode('utf-8')
print(f"Received data: {data}")
# Process the data sent from Arduino here, such as storing it in a database
return jsonify({"status": "success", "message": "Data received"}), 200
else:
return jsonify({"status": "error", "message": "Unauthorized"}), 401
@app.route('/')
def home():
return "Hello from Flask server!", 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)最终结果如下
结论项目成果本文详细介绍了基于ESP32开发板、SHT31温湿度传感器、ENS160空气质量传感器和锂电池的室内环境监测系统的设计与实现。通过整合这些先进的硬件设备和物联网技术,我们成功地实现了对室内空气质量关键参数的实时监测和数据分析。以下是本项目的主要成果和结论:1. 精准的监测能力:SHT31温湿度传感器和ENS160空气质量传感器的结合,使系统能够精确地监测室内的温度、湿度、PM2.5、CO2、TVOC和eCO2等重要参数,为用户提供全面的空气质量信息。2. 实时数据反馈:通过ESP32开发环境,我们实现了数据的即时采集、处理和传输,用户可以通过手机应用或网页实时查看室内环境数据,并根据需要采取相应的措施。3. 用户友好的界面设计:设计简洁直观的用户界面,使用户能够轻松理解监测数据,并通过可视化图表了解空气质量的变化趋势,帮助他们做出更好的决策。4. 节能和可持续发展:系统采用太阳能板和锂电池供电,有效减少能源消耗,保证系统长期稳定运行,同时降低了对外部电源的依赖,符合节能减排的环保理念。
未来展望在未来,我们可以进一步优化系统的算法和数据处理能力,增加更多的智能功能。例如,引入机器学习算法对数据进行分析,预测空气质量的变化趋势,提前采取措施改善环境;或者结合人工智能技术,实现对室内环境的自动调节和优化。功能扩展:除了个人家庭使用外,该系统还有广泛的应用潜力,可以应用于办公楼、学校、医院等公共场所,帮助管理者监测和改善室内空气质量,提升工作和学习效率,促进员工和学生的健康。
页:
[1]