物联网智能疏散指示系统:集成Bootstrap、MQTT、树莓派和 Flask 框架(代码示例)

项目概述

随着城市建筑的不断增多,火灾等突发事件的发生频率也在逐渐上升。传统的疏散指示系统往往无法实时响应火灾现场的变化,导致人员疏散不畅,甚至造成严重后果。为了提高人员疏散效率,我们设计了一种智能疏散指示系统。该系统基于嵌入式设备和传感器网络,能够实时监控建筑物内的火灾情况,并根据火灾位置和人员分布情况,动态调整疏散指示灯和紧急出口的指示方向。系统采用MQTT协议进行数据传输,并结合信息可视化平台提供实时疏散指示,确保在紧急情况下人员能够快速、安全地疏散。

系统设计

硬件设计

本系统的硬件主要包括以下部分:

  1. 传感器模块

    • 温度传感器:用于监测建筑内的温度变化,以判断是否发生火灾。
    • 烟雾传感器:实时检测空气中的烟雾浓度,进一步确认火灾的发生。
    • 人员分布传感器:使用红外传感器或超声波传感器,实时监测建筑内人员的分布情况。
  2. 嵌入式控制器

    • 采用树莓派或Arduino作为主控单元,负责数据采集与处理,控制疏散指示灯的状态。
  3. 疏散指示灯

    • LED灯组,根据指示灯的颜色和闪烁方式,向人员提供疏散方向指示。
  4. 通信模块

    • 采用Wi-Fi或Zigbee模块,确保各个设备之间的实时数据传输。

软件设计

系统的软件架构分为以下几个模块:

  1. 数据采集模块

    • 从各个传感器获取实时数据,并进行初步处理。
  2. 数据传输模块

    • 使用MQTT协议将传感器数据上传至云服务器,保证数据传输的可靠性和实时性。
  3. 决策模块

    • 根据当前火灾位置、人员分布情况,动态调整疏散指示灯的状态与方向。
  4. 可视化平台

    • 提供一个用户界面,实时显示火灾位置、人员分布以及疏散指示信息。

代码实现

以下是实现智能疏散指示系统的部分关键代码示例:

1. 数据采集模块

python 复制代码
import Adafruit_DHT
import paho.mqtt.client as mqtt
import time

# 温湿度传感器配置
DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4

# MQTT配置
MQTT_BROKER = "your_mqtt_broker"
MQTT_TOPIC = "building/fire_alert"

def read_sensor():
    humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
    return temperature, humidity

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

# 初始化MQTT客户端
client = mqtt.Client()
client.on_connect = on_connect
client.connect(MQTT_BROKER, 1883, 60)

while True:
    temperature, humidity = read_sensor()
    if temperature is not None:
        alert_message = f"Temperature: {temperature}, Humidity: {humidity}"
        client.publish(MQTT_TOPIC, alert_message)
    time.sleep(5)

代码讲解

  • 使用Adafruit_DHT库读取温湿度传感器数据。
  • 利用MQTT将数据发送到指定的主题。
  • read_sensor函数定期读取传感器数据,并通过MQTT发布。

2. 疏散指示灯控制模块

python 复制代码
import RPi.GPIO as GPIO
import paho.mqtt.client as mqtt

# GPIO配置
LED_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)

# MQTT配置
MQTT_BROKER = "your_mqtt_broker"
MQTT_TOPIC = "building/evacuation"

def on_connect(client, userdata, flags, rc):
    client.subscribe(MQTT_TOPIC)

def on_message(client, userdata, msg):
    control_lights(msg.payload.decode())

def control_lights(message):
    if message == "fire":
        # 火灾发生,红灯闪烁
        for _ in range(5):
            GPIO.output(LED_PIN, GPIO.HIGH)  # 打开红灯
            time.sleep(0.5)                   # 保持0.5秒
            GPIO.output(LED_PIN, GPIO.LOW)   # 关闭红灯
            time.sleep(0.5)                   # 保持0.5秒
    else:
        GPIO.output(LED_PIN, GPIO.LOW)  # 默认情况下关闭灯

# 初始化MQTT客户端
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(MQTT_BROKER, 1883, 60)

# 循环等待消息
client.loop_forever()

代码讲解

  • control_lights函数根据接收到的消息控制LED灯的状态。如果消息是"fire",则红灯开始闪烁,模拟火灾警报的效果。
  • 使用GPIO库控制树莓派的GPIO口,点亮或熄灭LED灯。
  • 使用client.loop_forever()保持MQTT客户端持续监听消息。

3. 数据可视化模块

为了实现信息的可视化,我们可以使用 Flask 框架搭建一个简单的Web服务器,实时显示火灾位置、人员分布和疏散指示信息。

python 复制代码
from flask import Flask, render_template
import paho.mqtt.client as mqtt
import json

app = Flask(__name__)

# 存储实时数据
fire_data = {}
evacuation_data = {}

# MQTT回调函数
def on_message(client, userdata, msg):
    global fire_data, evacuation_data
    if msg.topic == "building/fire_alert":
        fire_data = json.loads(msg.payload.decode())
    elif msg.topic == "building/evacuation":
        evacuation_data = json.loads(msg.payload.decode())

client = mqtt.Client()
client.on_connect = lambda client, userdata, flags, rc: client.subscribe([("building/fire_alert", 0), ("building/evacuation", 0)])
client.on_message = on_message
client.connect(MQTT_BROKER, 1883, 60)
client.loop_start()

@app.route('/')
def index():
    return render_template('index.html', fire_data=fire_data, evacuation_data=evacuation_data)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

代码讲解

  • 使用Flask框架创建一个Web应用,设置一个根路由/来显示实时数据。
  • 在MQTT的回调函数on_message中,我们根据接收到的消息更新fire_dataevacuation_data字典。
  • client.loop_start()用于在后台运行MQTT客户端,使其能够接收消息而不阻塞Flask主线程。

4. HTML模板(index.html)

以下是一个简单的HTML模板,用于展示实时的火灾数据和疏散指示信息。

html 复制代码
<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>智能疏散指示系统</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/4.5.2/css/bootstrap.min.css">
</head>

<body>
    <div class="container">
        <h1 class="mt-5">智能疏散指示系统</h1>
        <h2 class="mt-4">火灾数据</h2>
        <div class="alert alert-danger">
            <p>温度: {{ fire_data.temperature }} °C</p>
            <p>湿度: {{ fire_data.humidity }} %</p>
        </div>

        <h2 class="mt-4">疏散指示</h2>
        <div class="alert alert-info">
            <p>当前疏散状态: {{ evacuation_data.status }}</p>
            <p>疏散方向: {{ evacuation_data.direction }}</p>
        </div>
    </div>
</body>

</html>

代码讲解

  • 使用Bootstrap框架美化页面。
  • 显示实时的火灾数据(温度和湿度)以及当前的疏散状态和方向。

项目总结

本项目的智能疏散指示系统通过嵌入式设备和传感器网络,实现了对建筑内火灾情况的实时监控和动态疏散指示。以下是项目的主要成果和经验总结:

主要成果

  1. 实时监测:系统能够实时监测建筑内的温度、湿度和烟雾浓度,及时发现火灾隐患,并通过MQTT协议将数据传输到云端,确保信息的快速响应。

  2. 动态指示:根据火灾位置和人员分布情况,系统能够动态调整疏散指示灯的状态,优化人员疏散路线,大幅提高人员在紧急情况下的疏散效率。

  3. 可视化展示:通过搭建Flask Web应用,系统实现了数据的可视化展示,用户可以实时查看火灾数据和疏散状态,提高了指挥调度的效率。

  4. 异常情况报警:系统设计了异常情况报警功能,例如在疏散通道堵塞时,系统能够及时发出警报,指引疏散人员选择其他安全出口。

相关推荐
2401_857610032 分钟前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
秀儿还能再秀1 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
阿_旭2 小时前
如何使用OpenCV和Python进行相机校准
python·opencv·相机校准·畸变校准
幸运的星竹2 小时前
使用pytest+openpyxl做接口自动化遇到的问题
python·自动化·pytest
杨哥带你写代码2 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_2 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端
白总Server2 小时前
JVM解说
网络·jvm·物联网·安全·web安全·架构·数据库架构
清尘沐歌2 小时前
有什么好用的 WebSocket 测试工具吗?
websocket·网络协议·测试工具
背水2 小时前
初识Spring
java·后端·spring
清尘沐歌2 小时前
有什么好用的 WebSocket 调试工具吗?
网络·websocket·网络协议