259 lines
6.1 KiB
Markdown
259 lines
6.1 KiB
Markdown
# PetIO 控制系统
|
||
|
||
一个基于 ESP8266 的智能引脚定时控制系统,支持 Web 界面管理和 WiFi 配置。
|
||
|
||
## 功能特性
|
||
|
||
### 🎯 定时器管理
|
||
- ✅ 设置任意引脚在指定时间点开启指定时长
|
||
- ✅ 支持多个定时器同时运行
|
||
- ✅ 可启用/禁用单个定时器
|
||
- ✅ **每天重复功能** - 可设置定时器每天自动重复
|
||
- ✅ **单次执行功能** - 执行一次后自动禁用
|
||
- ✅ 定时器状态实时显示
|
||
- ✅ 持久化配置储存
|
||
- ✅ **NTP 时间同步** - WiFi 连接时自动同步网络时间
|
||
|
||
### 🔌 引脚控制
|
||
- ✅ 支持所有 ESP8266 可用引脚 (0,1,2,3,4,5,12,13,14,15,16)
|
||
- ✅ 实时显示引脚状态
|
||
- ✅ 手动开关控制
|
||
- ✅ 定时开启功能
|
||
- ✅ 引脚占用状态提示
|
||
|
||
### 📶 WiFi 管理
|
||
- ✅ 自动连接已保存的 WiFi
|
||
- ✅ **无密码 AP 模式** - 无配置时自动启动无密码热点
|
||
- ✅ Web 界面配置 WiFi
|
||
- ✅ 支持重置为 AP 模式
|
||
- ✅ 连接状态监控和自动重连
|
||
- ✅ **智能功能限制** - AP 模式下自动隐藏定时器功能
|
||
|
||
### 🌐 Web 界面
|
||
- ✅ 响应式设计,支持手机和电脑
|
||
- ✅ 实时数据更新
|
||
- ✅ 现代化 UI 设计
|
||
- ✅ 多标签页管理
|
||
- ✅ 操作反馈和状态提示
|
||
- ✅ **改进的时间选择器** - 使用 HTML5 time 输入控件
|
||
- ✅ **智能功能显隐** - 根据连接状态自动调整界面
|
||
|
||
## 硬件要求
|
||
|
||
- ESP8266 开发板 (ESP-12E/NodeMCU/Wemos D1 等)
|
||
- 连接到引脚的负载设备(继电器、LED、水泵等)
|
||
|
||
## 快速开始
|
||
|
||
### 1. 编译和上传
|
||
```bash
|
||
# 使用 PlatformIO 编译并上传
|
||
pio run --target upload
|
||
|
||
# 或使用 Arduino IDE
|
||
# 选择板子: ESP8266 -> Generic ESP8266 Module
|
||
# 上传速度: 921600
|
||
# Flash Size: 4MB
|
||
```
|
||
|
||
### 2. 首次配置
|
||
1. 上传程序后,ESP8266 会自动启动 AP 模式
|
||
2. 用手机或电脑连接热点:
|
||
- **SSID**: `PetIO_Setup`
|
||
- **密码**: 无密码(开放网络)
|
||
3. 打开浏览器访问:`http://192.168.4.1`
|
||
4. 在 "WiFi 设置" 标签页配置你的 WiFi
|
||
5. 配置成功后设备会自动重启并连接到你的 WiFi
|
||
|
||
### 3. 正常使用
|
||
- WiFi 连接成功后,可通过设备的 IP 地址访问控制界面
|
||
- 串口监视器会显示设备的访问地址
|
||
- **注意**: 只有在 WiFi 连接状态下,定时器功能才能正常工作(需要 NTP 时间同步)
|
||
|
||
## API 接口文档
|
||
|
||
### 系统状态
|
||
```
|
||
GET /api/status
|
||
返回: {
|
||
"wifiConnected": boolean,
|
||
"localIP": "192.168.1.100",
|
||
"apIP": "192.168.4.1",
|
||
"isAPMode": boolean,
|
||
"currentTime": "12:30",
|
||
"activeTimers": 2,
|
||
"totalTimers": 5
|
||
}
|
||
```
|
||
|
||
### 定时器管理
|
||
```
|
||
# 获取所有定时器
|
||
GET /api/timers
|
||
|
||
# 添加定时器
|
||
POST /api/timers
|
||
Body: {
|
||
"pin": 2,
|
||
"hour": 12,
|
||
"minute": 30,
|
||
"duration": 60,
|
||
"repeatDaily": true
|
||
}
|
||
|
||
# 更新定时器
|
||
PUT /api/timers/{index}
|
||
Body: {
|
||
"pin": 2,
|
||
"hour": 12,
|
||
"minute": 30,
|
||
"duration": 60,
|
||
"enabled": true,
|
||
"repeatDaily": true
|
||
}
|
||
|
||
# 删除定时器
|
||
DELETE /api/timers/{index}
|
||
|
||
# 清除所有定时器
|
||
POST /api/timers/clear
|
||
```
|
||
|
||
### 引脚控制
|
||
```
|
||
# 获取引脚状态
|
||
GET /api/pins
|
||
|
||
# 手动控制
|
||
POST /api/manual
|
||
Body: {
|
||
"pin": 2,
|
||
"duration": 0 // 0=切换状态,>0=开启指定秒数
|
||
}
|
||
```
|
||
|
||
### WiFi 配置
|
||
```
|
||
# 保存WiFi配置
|
||
POST /api/wifi
|
||
Body: {
|
||
"ssid": "My_WiFi",
|
||
"password": "password123"
|
||
}
|
||
|
||
# 重置为AP模式
|
||
POST /api/wifi/reset
|
||
```
|
||
|
||
## 引脚说明
|
||
|
||
### ESP8266 可用引脚
|
||
| 引脚 | 说明 | 注意事项 |
|
||
|------|------|----------|
|
||
| 0 | GPIO0 | 启动时需要为 HIGH |
|
||
| 1 | TX | 串口发送,调试时避免使用 |
|
||
| 2 | GPIO2 | 启动时需要为 HIGH,有板载 LED |
|
||
| 3 | RX | 串口接收,调试时避免使用 |
|
||
| 4 | GPIO4 | 安全的通用 IO |
|
||
| 5 | GPIO5 | 安全的通用 IO |
|
||
| 12 | GPIO12| 安全的通用 IO |
|
||
| 13 | GPIO13| 安全的通用 IO |
|
||
| 14 | GPIO14| 安全的通用 IO |
|
||
| 15 | GPIO15| 启动时需要为 LOW |
|
||
| 16 | GPIO16| 无中断功能,适合简单输出 |
|
||
|
||
### 推荐用法
|
||
- **GPIO 4, 5, 12, 13, 14**: 最安全的选择,适合连接继电器等设备
|
||
- **GPIO 2**: 适合连接 LED 指示灯
|
||
- **GPIO 16**: 适合简单的开关控制
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/
|
||
├── main.cpp # 主程序入口
|
||
├── config.h # 配置文件和常量定义
|
||
├── wifi_manager.h/cpp # WiFi 连接管理
|
||
├── timer_manager.h/cpp # 定时器功能管理
|
||
├── time_manager.h/cpp # NTP 时间同步管理
|
||
├── web_server.h/cpp # Web 服务器和 API
|
||
└── web_pages.h # HTML 页面模板
|
||
```
|
||
|
||
## 自定义配置
|
||
|
||
### 修改默认 AP 信息
|
||
在 `config.h` 中修改:
|
||
```cpp
|
||
#define DEFAULT_AP_SSID "Your_AP_Name"
|
||
#define DEFAULT_AP_PASSWORD "" // 保持为空表示无密码
|
||
```
|
||
|
||
### 调整时间同步设置
|
||
```cpp
|
||
#define NTP_SERVER "your.ntp.server"
|
||
#define TIME_ZONE 8 // 修改为你的时区
|
||
#define NTP_UPDATE_INTERVAL 3600000 // 同步间隔(毫秒)
|
||
```
|
||
|
||
### 调整定时器数量
|
||
```cpp
|
||
#define MAX_TIMERS 20 // 增加到 20 个定时器
|
||
```
|
||
|
||
### 添加新引脚
|
||
```cpp
|
||
const int AVAILABLE_PINS[] = {0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17};
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
### 1. 无法连接 WiFi
|
||
- 检查 SSID 和密码是否正确
|
||
- 确认路由器是 2.4GHz 频段
|
||
- 尝试重置为 AP 模式重新配置
|
||
|
||
### 2. 定时器不工作
|
||
- 检查系统时间是否正确(当前为简化版本,基于运行时间)
|
||
- 确认定时器已启用
|
||
- 检查引脚连接
|
||
|
||
### 3. 网页无法访问
|
||
- 确认设备已连接到正确的网络
|
||
- 检查 IP 地址是否正确
|
||
- 尝试重启设备
|
||
|
||
### 4. 引脚无响应
|
||
- 检查硬件连接
|
||
- 确认引脚编号正确
|
||
- 检查负载是否正常
|
||
|
||
## 开发和扩展
|
||
|
||
### 添加新功能
|
||
项目采用模块化设计,可以轻松添加新功能:
|
||
|
||
1. **定时功能**: 修改 `timer_manager.cpp`
|
||
2. **网页界面**: 修改 `web_pages.h`
|
||
3. **API 接口**: 修改 `web_server.cpp`
|
||
4. **WiFi 功能**: 修改 `wifi_manager.cpp`
|
||
|
||
### 调试模式
|
||
启用详细日志输出:
|
||
```cpp
|
||
// 在 Serial.begin() 后添加
|
||
Serial.setDebugOutput(true);
|
||
```
|
||
|
||
## 许可证
|
||
|
||
MIT License - 可自由使用、修改和分发。
|
||
|
||
## 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request!
|
||
|
||
---
|
||
|
||
**享受你的智能 PetIO 控制系统!** 🐾
|