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

devtools/2024/9/23 12:28:39/

一、项目概述

随着智能技术的发展和物联网(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环境安装:

    sudo apt updatesudo apt install python3 python3-pip
    
  3. Flask安装:

    pip3 install Flask
    
  4. React Native环境配置:

    npm install -g react-native-cli
    
    • 安装Node.js和npm。

    • 使用npm安装React Native CLI:

配置示例与注意事项

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

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

四、代码实现

功能模块实现

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

1. 传感器数据读取
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. 烟雾传感器数据读取
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 Trueelse:return False
3. 控制模块(灯光、窗帘、门锁)
import RPi.GPIO as GPIO# 初始化 GPIO 引脚
light_pin = 18
curtain_pin = 23
door_lock_pin = 24GPIO.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后端实现
from flask import Flask, jsonify, requestapp = 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应用结构
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. 测试与优化:对系统进行全面测试,确保各项功能正常运行,并根据反馈不断优化用户体验。


http://www.ppmy.cn/devtools/99875.html

相关文章

基于微信小程序靓丽内蒙古APP(源码+定制+辅导)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

wpf livechart 绘制笛卡尔曲线

先上图&#xff1a; 代码部分&#xff1a; <GroupBox Header"各生产线生产量趋势"><Grid><Grid.RowDefinitions><RowDefinition Height"45"/><RowDefinition Height"auto"/><RowDefinition/></Grid.RowD…

强大的 solidity 框架:Foundry 之命令行工具 — Cast

什么是 cast? Cast 是 Foundry 用于执行以太坊 RPC 调用的命令行工具。 我们可以使用 Cast 进行智能合约调用、发送交易或检索任何类型的链数据。 常用命令 cast chain-id&#xff1a;获取当前链的 ID cast chain&#xff1a;获取当前链的名称 cast client&#xff1a;获取…

21.3 Netty终章

21.3 Netty终章 一. 聊天消息1. 发送消息给某用户多端设备2. 多端同步自己的消息2.1 `UserChannelSession`会话管理2.2 `WSHandler`中处理本人的消息同步2.3 表情类型消息收发二.====================================================一. 聊天消息 1. 发送消息给某用户多端设…

天童美语:处暑有三候

随着八月的脚步渐近&#xff0c;我们迎来了处暑节气。这是二十四节气中的第十四个节气&#xff0c;标志着炎热夏日的结束和秋天凉爽的序幕。"处"意为“终止”&#xff0c;"暑"自然是指夏天的热气。所以&#xff0c;处暑便是夏天炎热天气即将结束的信号。  …

selenium-java实现自动登录跳转页面

如果要一直刷新一个网页&#xff0c;总不能人工一直去点&#xff0c;所以想到大学时候学过selenium技术&#xff0c;写个脚本来一直刷新&#xff0c;因为经常写java语言&#xff0c;所以选用java语言来写 实验环境 注意&#xff0c;需要先准备好Google浏览器和Chrome-Driver驱…

口语笔词——高频介词

中间 between&#xff1a;两者中间 He is sitting between me and my friend. among&#xff1a; 多者的中间 He is sitting among the kids. 我坐在一群孩子的中间 in the middle of : 正中间 I’m in the middle of the work. 我正在忙着工作Tom stands in the middle …

uni-app常用标签

一.uni-app常用标签 uni-app标签 名称作用view类似于HTML中的div标签通常用于布局和包裹其他标签 scroll-view 可滚动视图区域。用于区域滚动 swiper 一般用于左右滑动或上下滑动&#xff0c;比如banner轮播图image类似于HTML中的img标签,用于存放图片text文本组件。用于包裹文…