【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境监测
本帖最后由 zygalaxy 于 2024-10-31 19:56 编辑##【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境监测模块开发
## 一、模块概述
本环境监测模块旨在通过温湿度传感器,实时监测室内温度和湿度,并将数据展示在LCD触摸屏和手机APP上。当温湿度参数超出正常范围时,系统会自动报警,提醒用户采取措施改善环境。
## 二、功能需求
1. **温湿度监测**
- 利用空气温湿度传感器监测室内温度和湿度。
2. **环境信息展示**
- 在LCD触摸屏和手机APP上实时展示温湿度等环境信息。
- 以直观的图表和数字形式呈现,方便用户查看。
3. **报警系统**
- 当温湿度参数超出正常范围时,自动报警。
- 报警方式可以是声音、震动、推送通知等。
## 三、硬件需求
1. **空气温湿度传感器**:监测室内温度和湿度。
2. **ESP32 评估板**:负责数据处理和传输。
3. **LCD 触摸屏显示器**:显示环境信息。
4. **手机 APP**:用户可以通过手机APP查看环境数据。
## 四、软件设计
1. **数据采集**
- 通过温湿度传感器持续采集室内环境数据。
- 确保数据采集的准确性和稳定性。
2. **数据处理**
- 对采集到的数据进行处理和分析,提取有用的环境信息。
- 计算温湿度的平均值、最大值和最小值等统计信息。
3. **数据传输**
- 通过 ESP32 模块将处理后的数据传输至 LCD 触摸屏显示器和用户手机APP。
- 确保数据传输的实时性和可靠性。
4. **报警触发**
- 当检测到温湿度参数超出正常范围时,自动触发报警。
- 根据不同的参数设置不同的报警阈值。
## 五、用户界面设计
1. **LCD 触摸屏显示器界面**
- 显示温湿度等环境信息。
- 提供简洁明了的图表和数字显示,方便用户查看。
- 可以设置报警阈值,当数据超出阈值时自动报警。
2. **手机 APP 界面**
- 实时显示室内环境数据。
- 提供历史数据查询功能,用户可以查看过去一段时间的环境数据。
- 推送报警通知,当检测到异常情况时及时提醒用户。
## 六、部分代码
硬件代码:
```c
// #include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// WiFi network credentials
const char *ssid = "ExclusiveForQuZhihang";
const char *password = "quzhihang1314!";
// MQTT broker settings
const char *mqtt_server = "192.168.2.105";
const int mqtt_port = 1883;
const char *clientId = "humidity_1";
const char *mqtt_user = "zygalaxy";
// 温湿度主题
const char *humidity_topic = "t/humidity";
// 'payload': '{"humidity": 57, "temperature": 25}'
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++)
{
Serial.print((char)payload);
}
Serial.println();
}
void reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
if (client.connect(clientId))
{
Serial.println(" connected");
}
else
{
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
while (!Serial)
;
Serial.println("Ready");
Serial.println(F("DHTxx test!"));
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
int a = 0;
void loop()
{
if (!client.connected())
{
reconnect();
}
// 读取温湿度
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
client.loop();
// 定义发送的数据
String payload = "{\"humidity\":" + String(h) + ",\"temperature\":" + String(t) + "}";
client.publish(humidity_topic, payload.c_str());
delay(200);
}
```
软件代码:
```python
# 温湿度
@app.route('/humidity', methods=['POST'])
def humidity():
reply = {"result": "ok", "message": "success"}
raw_data = request.get_json()
print(raw_data)
if raw_data['event'] == 'message.publish':
device_id = raw_data['clientid']
device = DeviceInfo.query.filter_by(device_id=device_id).first()
if device:
if device.device_type == 'humidity':
"""
{'publish_received_at': 1723617041052, 'pub_props': {'User-Property': {}}, 'peerhost': '112.224.169.80', 'qos': 0, 'topic': 't/humidity', 'clientid': 'humidity_1',
'payload': '{"humidity": 57, "temperature": 25}',
'username': 'your_username', 'event': 'message.publish', 'metadata': {'rule_id': 'humidity_WH_D'}, 'timestamp': 1723617041052, 'node': 'emqx@172.17.0.4', 'id': '00061F9EDD75F3A432490013C2880018', 'flags': {'retain': False, 'dup': False}}
"""
# payload转化为 json
payload = json.loads(raw_data['payload'])
humidity_data = HumidityData(
device_id=device_id,
timestamp=datetime.utcnow(),
user_id=device.user_id,
humidity=payload['humidity'],
temperature=payload['temperature']
)
print(humidity_data)
db.session.add(humidity_data)
db.session.commit()
socketio.emit('message', '设备:' + device_id + ' 触发了温湿度检测')
return json.dumps(reply), 200
```
### 总结
通过本项目,我们构建了一个基于温湿度传感器的环境监测模块,能够实时监测并展示室内温度和湿度。该系统不仅提供了直观的数据展示,还具备智能报警功能,确保用户能够及时了解并应对环境变化。结合LCD触摸屏和手机APP,用户可以随时随地获取最新的环境数据,为创造一个舒适健康的居住环境提供支持。
页:
[1]