当前位置: 首页 > news >正文

基于 Python 的智能家居控制系统

基于 Python 的智能家居控制系统

1. 项目背景

智能家居控制系统是现代物联网技术的典型应用之一。通过传感器采集环境数据,结合 Python 的数据处理和 Web 开发能力,用户可以实时监控家居环境并远程控制设备。本项目将模拟一个智能家居系统,包括环境数据采集、数据存储、Web 界面和设备控制功能。


2. 功能需求

  • 环境数据采集:模拟传感器采集温度、湿度和光照数据。
  • 数据存储:将采集的数据存储到数据库中。
  • Web 界面:提供实时数据展示和设备控制界面。
  • 设备控制:允许用户通过 Web 界面控制灯光和空调。

3. 技术选型

  • 编程语言:Python
  • Web 框架:Flask(轻量级 Web 框架)
  • 数据库:SQLite(轻量级数据库)
  • 前端技术:HTML、CSS、JavaScript(用于 Web 界面)
  • 数据可视化:Chart.js(用于绘制实时数据图表)

4. 系统设计

4.1 数据库设计
  • 环境数据表(EnvironmentData)
    • id:数据编号(主键)
    • timestamp:时间戳
    • temperature:温度
    • humidity:湿度
    • light:光照强度
  • 设备状态表(DeviceStatus)
    • id:设备编号(主键)
    • name:设备名称(如“灯光”、“空调”)
    • status:设备状态(如“开”或“关”)
4.2 功能模块
  • 数据采集模块:模拟传感器数据并存储到数据库。
  • Web 服务模块:提供 Web 界面和数据接口。
  • 设备控制模块:通过 Web 界面控制设备状态。

5. 核心代码实现

5.1 数据库初始化
import sqlite3

# 连接数据库
conn = sqlite3.connect('smart_home.db')
cursor = conn.cursor()

# 创建环境数据表
cursor.execute('''
CREATE TABLE IF NOT EXISTS EnvironmentData (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
    temperature REAL,
    humidity REAL,
    light REAL
)
''')

# 创建设备状态表
cursor.execute('''
CREATE TABLE IF NOT EXISTS DeviceStatus (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    status TEXT NOT NULL
)
''')

# 初始化设备状态
cursor.execute('INSERT OR IGNORE INTO DeviceStatus (name, status) VALUES ("灯光", "关")')
cursor.execute('INSERT OR IGNORE INTO DeviceStatus (name, status) VALUES ("空调", "关")')
conn.commit()
5.2 数据采集模块
import random
from datetime import datetime

def simulate_sensor_data():
    # 模拟传感器数据
    temperature = round(random.uniform(20, 30), 2)  # 温度在 20℃ 到 30℃ 之间
    humidity = round(random.uniform(40, 80), 2)     # 湿度在 40% 到 80% 之间
    light = round(random.uniform(0, 100), 2)        # 光照强度在 0 到 100 之间
    return temperature, humidity, light

def save_sensor_data():
    temperature, humidity, light = simulate_sensor_data()
    cursor.execute('''
    INSERT INTO EnvironmentData (temperature, humidity, light)
    VALUES (?, ?, ?)
    ''', (temperature, humidity, light))
    conn.commit()
5.3 Web 服务模块
from flask import Flask, render_template, jsonify, request

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/api/data')
def get_data():
    # 获取最新的环境数据
    cursor.execute('SELECT * FROM EnvironmentData ORDER BY timestamp DESC LIMIT 10')
    data = cursor.fetchall()
    return jsonify(data)

@app.route('/api/devices', methods=['GET', 'POST'])
def control_devices():
    if request.method == 'GET':
        # 获取设备状态
        cursor.execute('SELECT * FROM DeviceStatus')
        devices = cursor.fetchall()
        return jsonify(devices)
    elif request.method == 'POST':
        # 更新设备状态
        device_id = request.json.get('id')
        new_status = request.json.get('status')
        cursor.execute('UPDATE DeviceStatus SET status = ? WHERE id = ?', (new_status, device_id))
        conn.commit()
        return jsonify({"message": "设备状态更新成功"})
5.4 前端界面(HTML + JavaScript)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>智能家居控制系统</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <h1>智能家居控制系统</h1>
    <div>
        <h2>环境数据</h2>
        <canvas id="environmentChart" width="400" height="200"></canvas>
    </div>
    <div>
        <h2>设备控制</h2>
        <button onclick="toggleDevice(1)">切换灯光</button>
        <button onclick="toggleDevice(2)">切换空调</button>
    </div>

    <script>
        const ctx = document.getElementById('environmentChart').getContext('2d');
        const chart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: [],
                datasets: [
                    { label: '温度 (℃)', data: [], borderColor: 'red' },
                    { label: '湿度 (%)', data: [], borderColor: 'blue' },
                    { label: '光照强度', data: [], borderColor: 'green' }
                ]
            },
            options: { responsive: true }
        });

        // 获取环境数据
        function fetchData() {
            fetch('/api/data')
                .then(response => response.json())
                .then(data => {
                    chart.data.labels = data.map(d => d[1]);  // 时间戳
                    chart.data.datasets[0].data = data.map(d => d[2]);  // 温度
                    chart.data.datasets[1].data = data.map(d => d[3]);  // 湿度
                    chart.data.datasets[2].data = data.map(d => d[4]);  // 光照
                    chart.update();
                });
        }

        // 切换设备状态
        function toggleDevice(deviceId) {
            fetch('/api/devices', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ id: deviceId, status: '开' })  // 简化逻辑
            }).then(() => location.reload());
        }

        // 每 5 秒更新一次数据
        setInterval(fetchData, 5000);
        fetchData();
    </script>
</body>
</html>

6. 运行效果

  1. 环境数据监控
    • 实时显示温度、湿度和光照强度的折线图。
    • 数据每 5 秒更新一次。
  2. 设备控制
    • 用户可以通过按钮控制灯光和空调的开关状态。
  3. Web 界面
    • 提供直观的数据展示和设备控制界面。

7. 总结

通过本项目的开发,我们实现了一个基于 Python 的智能家居控制系统,涵盖了数据采集、数据存储、Web 服务和设备控制等功能。Python 的灵活性和丰富的库使得该项目易于实现和扩展。未来可以进一步优化系统,例如:

  • 接入真实的传感器硬件。
  • 添加用户认证和权限管理。
  • 支持移动端应用(如通过 React Native 开发)。

希望这篇文章能为你的毕业设计提供帮助!如果需要更多功能或优化建议,可以随时告诉我!😊

相关文章:

  • 源码压缩包泄露
  • 旋转位置编码(ROPE)与信号处理的深层联系:从傅里叶变换到调制与卷积
  • Visionpro cogToolBlockEditV2.Refresh()
  • 多态 作业
  • apple watch真机开发第一步连接xcode详细教程,开启watch开发者模式真的很坑啊啊啊啊啊
  • 在Linux桌面上创建Idea启动快捷方式
  • 计算机网络之传输层(传输层的功能)
  • 设计模式 之 生产消费者模型 (C++)
  • 计算机网络之传输层(传输层提供的服务)
  • 现在有什么赛道可以干到退休?
  • VM虚拟机安装与配置Ubuntu Linux操作系统详细教程~
  • HBuilderx 插件开发变量名称翻译 ,中文转(小驼峰,大驼峰,下划线,常量,CSS类名)
  • Redis 高可用性:如何让你的缓存一直在线,稳定运行?
  • buuctf-简单注册器题解
  • uniapp h5页面获取跳转传参的简单方法
  • 全星FMEA软件系统是一款高效、智能的失效模式及影响分析工具,广泛应用于汽车、电子、机械等行业
  • LLC谐振变换器恒压恒流双竞争闭环simulink仿真
  • 内容中台的企业CMS架构是什么?
  • Rk3568驱动开发_驱动编写和挂载_2
  • SpringBoot整合Mybatis-Plus+Druid实现多数据源
  • jsp网站开发公司/最优化方法
  • 建设工程类招标信息发布网站/bing搜索引擎入口官网
  • 网站建设便宜的公司/百度广告联盟
  • 如何做网站的seo/数据查询网站
  • 国家建设部官方网站/买链接网站
  • html国外网站源码/百度搜索引擎入口登录