zygalaxy 发表于 2024-10-31 20:29

【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]
查看完整版本: 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境监测