一、项目概述
随着智能技术的发展和物联网(IoT)技术的广泛应用,高校宿舍的安全和生活智能化需求日益迫切。我们设计的智能校园宿舍系统,旨在通过实时监测学生宿舍的用电安全、实施火灾应急措施和实现日常物件的智能化管理,为学生提供一个安全、便捷且舒适的住宿环境。
目标与用途
本项目的主要目标是构建一个基于ZigBee和树莓派的智能校园宿舍系统。该系统可以实时监测宿舍的安全状况,支持远程操作宿舍内的灯光、窗帘和门锁等设备,并通过APP实现环境检测和数据分析。这不仅为学生提供了便利,也极大地提高了宿舍的安全性,降低了火灾等安全隐患的风险。
解决的问题与价值
-
用电安全监测:通过对宿舍用电情况的实时监测,及时发现异常用电,防止火灾隐患。
-
火灾应急措施:系统可实现火灾报警功能,及时通知相关人员并启动应急措施。
-
智能控制:用户可通过手机APP远程控制宿舍内的设备,提高生活便利性。
-
数据分析:系统能够对宿舍环境进行实时数据分析,帮助学生更好地管理自身的生活。
二、系统架构
系统架构设计
为了满足项目需求,我们设计了如下系统架构:
-
硬件部分:包括传感器模块(温度、湿度、烟雾传感器)、控制模块(ZigBee模块、树莓派)、执行器(灯光、窗帘、门锁)。
-
软件部分:包括宿舍环境监测APP、后端服务器、数据处理模块。
选型与技术栈
-
单片机:树莓派(Raspberry Pi),负责数据处理和设备控制。
-
通信协议:ZigBee,适合低功耗、短距离无线通信。
-
传感器:温湿度传感器、烟雾传感器、燃气传感器。
-
无线通信模块:ZigBee模块(如XBee)。
架构图
三、环境搭建
软件与硬件环境
-
硬件环境:
-
树莓派 3B+
-
ZigBee模块
-
各类传感器(温湿度、烟雾、火焰等)
-
执行器(灯光、窗帘、门锁等)
-
-
软件环境:
-
Raspberry Pi OS
-
Python 3.x
-
Flask(后端框架)
-
React Native(移动端开发框架)
-
安装步骤与配置
-
树莓派系统安装:
-
下载树莓派操作系统镜像,并使用Etcher工具将其烧录到SD卡。
-
插入SD卡并启动树莓派,进行基本配置(网络、用户等)。
-
-
Python环境安装:
sudo apt updatesudo apt install python3 python3-pip
-
Flask安装:
pip3 install Flask
-
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 True
else:
return False
3. 控制模块(灯光、窗帘、门锁)
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后端实现
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应用结构
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;
五、项目总结
主要功能
-
实时数据监测:系统能够实时获取宿舍内的温度、湿度和烟雾浓度,并在APP上显示。
-
远程控制:用户可以通过APP远程控制宿舍内的灯光、窗帘和门锁,提升了生活的便利性。
-
安全预警:当烟雾传感器检测到烟雾时,系统会立即向用户发送警告信号,确保学生的安全。
-
数据分析与反馈:通过收集环境数据,系统能够进行基本的环境分析,为用户提供建议和反馈。
实现过程
-
需求分析:明确项目目标,确定系统需要监测的环境参数及控制的设备。
-
系统架构设计:根据需求设计系统架构,选择合适的硬件(树莓派、传感器、ZigBee模块等)和软件技术栈(Flask、React Native等)。
-
环境搭建:为树莓派安装操作系统,配置开发环境,包括所需的库和工具。
-
功能模块开发:逐步实现传感器数据读取、设备控制和后端API,确保各模块功能的完整性和稳定性。
-
移动端开发:开发移动端应用,使用户能够方便地获取宿舍环境数据并控制设备。
-
测试与优化:对系统进行全面测试,确保各项功能正常运行,并根据反馈不断优化用户体验。