This commit is contained in:
MiaoMint
2025-08-12 04:24:15 +08:00
commit 4dcbb9c05b
21 changed files with 3289 additions and 0 deletions

267
README.md Normal file
View File

@@ -0,0 +1,267 @@
# PetIO 控制系统
一个基于 ESP8266 的智能引脚定时控制系统,支持 Web 界面管理和 WiFi 配置。
## 功能特性
### 🎯 定时器管理
- ✅ 设置任意引脚在指定时间点开启指定时长
- ✅ 支持多个定时器同时运行
- ✅ 可启用/禁用单个定时器
-**每天重复功能** - 可设置定时器每天自动重复
-**单次执行功能** - 执行一次后自动禁用
- ✅ 定时器状态实时显示
- ✅ 持### 3. 定时器不工作
- 确认设备已连接 WiFiAP 模式下定时器功能受限)
- 检查系统时间是否已同步(状态页面会显示时间来源)
- 确认定时器已启用且设置正确
- 检查引脚连接
### 4. 时间不准确
- 确认设备已连接到互联网
- 检查时区设置是否正确
- 尝试手动触发时间同步(重启设备)配置
-**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 控制系统!** 🐾