树莓派结合ZigBee通讯实现宿舍安全管理系统:Flask、React Native

一、项目概述

随着智能技术的发展和物联网(IoT)技术的广泛应用,高校宿舍的安全和生活智能化需求日益迫切。我们设计的智能校园宿舍系统,旨在通过实时监测学生宿舍的用电安全、实施火灾应急措施和实现日常物件的智能化管理,为学生提供一个安全、便捷且舒适的住宿环境。

目标与用途

本项目的主要目标是构建一个基于ZigBee和树莓派的智能校园宿舍系统。该系统可以实时监测宿舍的安全状况,支持远程操作宿舍内的灯光、窗帘和门锁等设备,并通过APP实现环境检测和数据分析。这不仅为学生提供了便利,也极大地提高了宿舍的安全性,降低了火灾等安全隐患的风险。

解决的问题与价值

  1. 用电安全监测:通过对宿舍用电情况的实时监测,及时发现异常用电,防止火灾隐患。

  2. 火灾应急措施:系统可实现火灾报警功能,及时通知相关人员并启动应急措施。

  3. 智能控制:用户可通过手机APP远程控制宿舍内的设备,提高生活便利性。

  4. 数据分析:系统能够对宿舍环境进行实时数据分析,帮助学生更好地管理自身的生活。

二、系统架构

系统架构设计

为了满足项目需求,我们设计了如下系统架构:

  • 硬件部分:包括传感器模块(温度、湿度、烟雾传感器)、控制模块(ZigBee模块、树莓派)、执行器(灯光、窗帘、门锁)。

  • 软件部分:包括宿舍环境监测APP、后端服务器、数据处理模块。

选型与技术栈

  • 单片机:树莓派(Raspberry Pi),负责数据处理和设备控制。

  • 通信协议:ZigBee,适合低功耗、短距离无线通信。

  • 传感器:温湿度传感器、烟雾传感器、燃气传感器。

  • 无线通信模块:ZigBee模块(如XBee)。

架构图

控制指令 数据传输 监测数据 控制指令 实时数据 用户APP 后端服务器 树莓派 传感器模块 执行器

三、环境搭建

软件与硬件环境

  • 硬件环境:

    • 树莓派 3B+

    • ZigBee模块

    • 各类传感器(温湿度、烟雾、火焰等)

    • 执行器(灯光、窗帘、门锁等)

  • 软件环境:

    • Raspberry Pi OS

    • Python 3.x

    • Flask(后端框架)

    • React Native(移动端开发框架)

安装步骤与配置

  1. 树莓派系统安装:

    • 下载树莓派操作系统镜像,并使用Etcher工具将其烧录到SD卡。

    • 插入SD卡并启动树莓派,进行基本配置(网络、用户等)。

  2. Python环境安装:

    bash 复制代码
    sudo apt updatesudo apt install python3 python3-pip
  3. Flask安装:

    bash 复制代码
    pip3 install Flask
  4. React Native环境配置:

    bash 复制代码
    npm install -g react-native-cli
    • 安装Node.js和npm。

    • 使用npm安装React Native CLI:

配置示例与注意事项

  • 确保ZigBee模块正确连接到树莓派的GPIO接口。

  • 在Python代码中,确保正确引用所需的库并处理相应的异常情况。

四、代码实现

功能模块实现

根据系统架构,我们逐步实现各功能模块。以下是关键代码示例:

1. 传感器数据读取
python 复制代码
import Adafruit_DHT

# 读取温湿度传感器数据
def read_sensor():
    humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
        if humidity is not None and temperature is not None:
        print('Temp={0:0.1f}*C  Humidity={1:0.1f}%'.format(temperature, humidity))
        return {'temperature': temperature, 'humidity': humidity}
    else:
        print('Failed to get reading. Try again!')
        return None
2. 烟雾传感器数据读取
python 复制代码
import RPi.GPIO as GPIO
import time

# 设置 GPIO 模式
GPIO.setmode(GPIO.BCM)
smoke_sensor_pin = 17
GPIO.setup(smoke_sensor_pin, GPIO.IN)

def read_smoke_sensor():
    smoke_detected = GPIO.input(smoke_sensor_pin)
    if smoke_detected:
        print("Smoke detected!")
        return True
    else:
        return False
3. 控制模块(灯光、窗帘、门锁)
python 复制代码
import RPi.GPIO as GPIO

# 初始化 GPIO 引脚
light_pin = 18
curtain_pin = 23
door_lock_pin = 24

GPIO.setup(light_pin, GPIO.OUT)
GPIO.setup(curtain_pin, GPIO.OUT)
GPIO.setup(door_lock_pin, GPIO.OUT)

def control_light(state):
    GPIO.output(light_pin, state)
    print(f"Light {'on' if state else 'off'}")

def control_curtain(state):
    GPIO.output(curtain_pin, state)
    print(f"Curtain {'opened' if state else 'closed'}")

def control_door_lock(state):
    GPIO.output(door_lock_pin, state)
    print(f"Door lock {'engaged' if state else 'disengaged'}")
4. Flask后端实现
python 复制代码
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/sensor-data', methods=['GET'])
def get_sensor_data():
    data = read_sensor()
    smoke = read_smoke_sensor()
    response = {
        'sensor_data': data,
        'smoke_detected': smoke
    }
    return jsonify(response)

@app.route('/control', methods=['POST'])
def control_device():
    device = request.json.get('device')
    state = request.json.get('state')
    
    if device == 'light':
        control_light(state)
    elif device == 'curtain':
        control_curtain(state)
    elif device == 'door_lock':
        control_door_lock(state)
    
    return jsonify({'status': 'success', 'device': device, 'state': state})

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

5. 移动端APP实现

基本的React Native应用结构
js 复制代码
import React, { useState, useEffect } from 'react';
import { View, Button, Text, StyleSheet } from 'react-native';

const App = () => {
    const [sensorData, setSensorData] = useState({});

    useEffect(() => {
        // 定时获取传感器数据
        const interval = setInterval(() => {
            fetch('http://<树莓派IP>:5000/sensor-data')
                .then(response => response.json())
                .then(data => setSensorData(data))
                .catch(error => console.error('Error fetching sensor data:', error));
        }, 5000);

        return () => clearInterval(interval);
    }, []);

    const controlDevice = (device, state) => {
        fetch('http://<树莓派IP>:5000/control', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ device, state }),
        })
        .then(response => response.json())
        .then(data => console.log('Control response:', data))
        .catch(error => console.error('Error controlling device:', error));
    };

    return (
        <View style={styles.container}>
            <Text style={styles.text}>温度: {sensorData.sensor_data?.temperature} °C</Text>
            <Text style={styles.text}>湿度: {sensorData.sensor_data?.humidity} %</Text>
            <Text style={styles.text}>{sensorData.smoke_detected ? "烟雾检测到!" : "无烟雾"}</Text>

            <View style={styles.buttonContainer}>
                <Button title="打开灯光" onPress={() => controlDevice('light', true)} />
                <Button title="关闭灯光" onPress={() => controlDevice('light', false)} />
                <Button title="打开窗帘" onPress={() => controlDevice('curtain', true)} />
                <Button title="关闭窗帘" onPress={() => controlDevice('curtain', false)} />
                <Button title="锁上门" onPress={() => controlDevice('door_lock', true)} />
                <Button title="解锁门" onPress={() => controlDevice('door_lock', false)} />
            </View>
        </View>
    );
};

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        padding: 20,
    },
    text: {
        fontSize: 18,
        marginVertical: 10,
    },
    buttonContainer: {
        marginTop: 20,
    },
});

export default App;

五、项目总结

主要功能
  1. 实时数据监测:系统能够实时获取宿舍内的温度、湿度和烟雾浓度,并在APP上显示。

  2. 远程控制:用户可以通过APP远程控制宿舍内的灯光、窗帘和门锁,提升了生活的便利性。

  3. 安全预警:当烟雾传感器检测到烟雾时,系统会立即向用户发送警告信号,确保学生的安全。

  4. 数据分析与反馈:通过收集环境数据,系统能够进行基本的环境分析,为用户提供建议和反馈。

实现过程
  1. 需求分析:明确项目目标,确定系统需要监测的环境参数及控制的设备。

  2. 系统架构设计:根据需求设计系统架构,选择合适的硬件(树莓派、传感器、ZigBee模块等)和软件技术栈(Flask、React Native等)。

  3. 环境搭建:为树莓派安装操作系统,配置开发环境,包括所需的库和工具。

  4. 功能模块开发:逐步实现传感器数据读取、设备控制和后端API,确保各模块功能的完整性和稳定性。

  5. 移动端开发:开发移动端应用,使用户能够方便地获取宿舍环境数据并控制设备。

  6. 测试与优化:对系统进行全面测试,确保各项功能正常运行,并根据反馈不断优化用户体验。

相关推荐
2401_857610038 分钟前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
Hacker_Nightrain41 分钟前
网络安全CTF比赛规则
网络·安全·web安全
看山还是山,看水还是。1 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
学编程的小程1 小时前
【安全通信】告别信息泄露:搭建你的开源视频聊天系统briefing
安全·开源·音视频
网络安全指导员1 小时前
恶意PDF文档分析记录
网络·安全·web安全·pdf
杨哥带你写代码2 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_2 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端
渗透测试老鸟-九青2 小时前
通过投毒Bingbot索引挖掘必应中的存储型XSS
服务器·前端·javascript·安全·web安全·缓存·xss
vortex52 小时前
蓝队基础之网络七层杀伤链:从识别到防御的全方位策略
安全·网络安全·蓝队
白总Server2 小时前
JVM解说
网络·jvm·物联网·安全·web安全·架构·数据库架构