Files
petio/README.md

259 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 控制系统!** 🐾