# 智能家居监测系统 ## 原始需求 硬件部分:ESP32 开发板、温湿度传感器 DHT22、光敏电阻、舵机、蜂鸣器、OLED 显示器、LED 灯、空气质量传感器 软件部分:使用微信小程序平台对智能卧室环境监测系统进行应用开发,构建用户交互界面(UI),提供与硬件通信的 API,ESP32 设备端通过 WiFi 连接到云平台,手机端 APP 直接与云平台通信,查询设备状态和发送指令,实现远程监控和智能联动。 功能设计: 当用户回家,连接上家里 WiFi 后,系统触发“到家状态”;当监测不到用户连接到 WiFi 时,暂停当前模式的继续运行,进入“待机状态”。 ESP32 在传感器数据发生 ​​ 变化时 ​​ 或 ​​ 达到阈值时 ​​ 主动上报数据到云平台,获取当前环境监测数据,执行对应的模式。当该系统正在运行的模式与当前监测环境相符时,不会中断模式继续运行,直到接收到下一信号。 每次手机端 APP 发送指令后,APP 应等待 ESP32 通过云平台返回的“执行成功”确认消息,再更新 UI 状态,避免误操作。 到家状态:激活“到家状态”会进行 5000ms 的入户等待时间,然后在进行模式判断。 待机状态:每经过 500ms 会监测用户是否通过手机控制端进行远程操控。 1. 起床模式:用户可以在移动控制端设置起床时间,舵机会在用户预设时间的前 3 分钟打开窗帘,到了起床时间蜂鸣器会发出声音提醒用户起床。初始值设置在早上 8 点。 2. 白天模式:在早上六点到晚上六点之间,光敏电阻获取当前光照强度判断是否关闭窗帘和是否打开 LED 灯。用户可以在手机控制端进行时间设置。 3. 夜间模式:在晚上六点到早上六点之间,舵机控制窗帘关闭,并且打开 LED 灯进行照明。用户可以在手机控制端进行时间设置。 4. 降温模式:用户可以设置预期的开启降温模式的温度,通过温湿度传感器获取当前环境温度,读取到的当前温度与用户设定的目标温度进行比较,当温度不在预期范围内,自动打开风扇进行降温。如果当前温度高于 ​​ 目标温度,ESP32 会发送开启降温指令给风扇,风扇开启吹风模式进行物理降温。 5. 高温提醒模式:当温湿度传感器监测到室内温度高于 35°C 时,手机端 APP 弹出室内高温警告,并且蜂鸣器发出提示音。 6. 显示屏常亮模式:当在“回家状态”时打开显示屏,在“待机模式”时关闭显示屏。屏幕里实时显示温度、湿度、空气质量和当地时间。触发某种模式的时候,屏幕出现三秒钟模式名称。 7. 自动通风控制模式模块:空气质量检测 CO2>1000ppm 时,ESP32 上报事件,触发自动通风控制模式,打开风扇转动进行空气流通,蜂鸣器发出轻微提示音,小程序发送通知告诉用户卧室需要通风。 手机控制端:实时显示卧室参数,如温度、湿度、光照强度、空气质量等,用户可以对不同的模式进行私人设置。手机端 APP 小程序可以远程操控窗帘开关、灯光开关和亮度百分比(小程序用滑块)、风扇开关、蜂鸣器闹钟开关和可设置蜂鸣器闹钟时间。功能模块的都有开关按钮和可以设置时间。 物理端:需要按钮对硬件控制器进行物理开关。 OLED 显示器:屏幕里实时显示温度、湿度和当地时间。触发某种模式的时候,屏幕出现三秒钟模式名称。 网络断开时,ESP32 应能依靠本地传感器继续执行部分核心自动化,按钮开关。 每种模式都互不冲突。 判断窗帘当前状态:每次舵机运行前进行读取控制角度判断窗帘开关状态。 ## 硬件需求 | 组件名称 | 数量 | ESP32 连接引脚 | 通信协议/类型 | 电源需求 | 备注 | | ---------------------------- | ---- | -------------------------------------- | ------------- | -------- | ---------------------------- | | **ESP32 开发板** | 1 | - | - | 5V/1A | 主控制器 | | **DHT22 温湿度传感器** | 1 | **GPIO 4** | 单总线 | 3.3V | 需 4.7KΩ 上拉电阻 | | **光敏电阻** | 1 | **GPIO 34** | ADC 输入 | 3.3V | ADC1_CH6,配合 10KΩ 分压电阻 | | **舵机(窗帘控制)** | 1 | **GPIO 13** | PWM | 5V | 频率 50Hz,需外部供电 | | **蜂鸣器(有源)** | 1 | **GPIO 12** | 数字输出 | 3.3V | 高电平触发 | | **OLED 显示屏** | 1 | **GPIO 21 (SDA)**
**GPIO 22 (SCL)** | I2C | 3.3V | 地址 0x3C,SSD1306 | | **LED 灯(PWM 调光)** | 1 | **GPIO 14** | PWM | 3.3V | 频率 1000Hz,串联 220Ω 电阻 | | **空气质量传感器(MQ-135)** | 1 | **GPIO 32** | ADC 输入 | 5V | ADC1_CH4,需加热电压 | | **物理按钮 1(窗帘控制)** | 1 | **GPIO 25** | 数字输入 | 3.3V | 内部上拉,按下接地 | | **物理按钮 2(灯光控制)** | 1 | **GPIO 26** | 数字输入 | 3.3V | 内部上拉,按下接地 | | **物理按钮 3(风扇控制)** | 1 | **GPIO 27** | 数字输入 | 3.3V | 内部上拉,按下接地 | - 测量时 I2C 频率在 10K~400KHz 之间,不宜过高,且采集数据周期应大于 1 秒/1 次 - 1,要接外部 32.768khz 晶振,否则系统不会进入 stop 状态,省电效果不大 - 2,在 config 中,要把 freertos 的时基调整到 1000,开启 rtos, 还要开启 32.768khz ## 软件架构设计 ### 整体架构 ┌─────────────────────┐ │ 第一层:微信小程序 │ │ (用户交互层) │ │ 功能:控制/展示 │ └──────────┬──────────┘ │ MQTT/HTTP ┌──────────▼──────────┐ │ 第二层:物联网云平台 │ │ (核心中转层) │ │ 功能:转发/存储 │ └──────────┬──────────┘ │ MQTT ┌──────────▼──────────┐ │ 第三层:ESP32 设备 │ │ (感知执行层) │ │ 功能:采集/执行 │ └─────────────────────┘ ### 通信协议设计 1. MQTT 主题设计 home/bedroom/state # 设备状态上报 home/bedroom/command # 设备指令下发 home/bedroom/sensor # 传感器数据 home/bedroom/response # 执行响应 2. JSON 消息格式 ```json // 传感器数据上报 { "device_id": "bedroom_001", "timestamp": 1640995200, "temperature": 25.5, "humidity": 60, "light": 300, "air_quality": 800, "curtain_position": 90 } // 指令下发 { "cmd_id": "CMD_001", "command": "set_mode", "mode": "daytime", "params": { "curtain_auto": true, "light_threshold": 200 } } ``` ## ESP32 固件设计 1. 程序结构 1. WiFi 管理模块 2. MQTT 通信模块 3. 传感器读取模块 4. 执行器控制模块 5. 状态机管理模块 6. OLED 显示模块 7. 本地存储模块 2. 核心状态机设计 ```C enum SystemState { STATE_HOME, // 到家状态 STATE_STANDBY, // 待机状态 STATE_MORNING, // 起床模式 STATE_DAYTIME, // 白天模式 STATE_NIGHT, // 夜间模式 STATE_COOLING, // 降温模式 STATE_VENT // 通风模式 }; enum DeviceState { CURTAIN_OPEN, CURTAIN_CLOSED, LIGHT_ON, LIGHT_OFF, FAN_ON, FAN_OFF }; ``` ## 微信小程序设计 ### 界面布局 首页(仪表盘): ├── 顶部:房间名称、网络状态 ├── 中部:环境数据卡片(温度、湿度、光照、空气质量) ├── 底部:模式切换卡片 └── 浮动按钮:设备控制面板 控制面板: ├── 窗帘控制:开关、百分比滑块 ├── 灯光控制:开关、亮度滑块、色温选择 ├── 风扇控制:开关、风速档位 ├── 蜂鸣器:开关、闹钟设置 └── 模式设置:各模式的参数配置 设置页面: ├── WiFi 配置 ├── 设备管理 ├── 时间设置 └── 阈值配置 ## 配网 1. ESP32 上电 → 自动开启【WiFi 热点】(名称如:卧室智能设备\_配网) 2. 手机/电脑 连接这个 WiFi 热点(无密码) 3. 打开手机/电脑浏览器 → 输入地址:192.168.4.1 → 弹出配置网页 4. 网页填写:WiFi 名称、WiFi 密码、MQTT 服务器地址、MQTT 端口 5. 点击【保存配置】,配置自动写入 ESP32 闪存,永久保存 6. ESP32 自动重启 → 读取配置 → 自动连接家里的 WiFi → 自动接入填写的 MQTT 服务器 7. 完成!后续上电全自动化运行,想换参数/服务器,重复 1-5 步即可 - 大概界面 ┌────────────────────────────────────────┐ │ ESP32 智能卧室 配置页面 │ │ (无需登录,连接热点即可访问 192.168.4.1)│ ├────────────────────────────────────────┤ │ WiFi 配置: │ │ WiFi 名称(SSID) :□**\*\*\*\***\_\_\_\_**\*\*\*\*** │ │ WiFi 密码(PWD) :□**\*\*\*\***\_\_\_\_**\*\*\*\*** │ ├────────────────────────────────────────┤ │ MQTT 服务器配置:(自由填写任意服务器) │ │ 服务器地址 :□**\*\*\*\***\_\_\_\_**\*\*\*\*** │ │ 服务器端口 :□ 1883 │ │ 用户名 :□**\*\*\*\***\_\_\_\_**\*\*\*\*** │ │ 密码 :□**\*\*\*\***\_\_\_\_**\*\*\*\*** │ ├────────────────────────────────────────┤ │ [保存配置] [重启设备] │ └────────────────────────────────────────┘