feat: init laser shooting system (T11-ready)

This commit is contained in:
二池一
2025-11-21 17:50:02 +08:00
commit f8d12ba10f
3 changed files with 1783 additions and 0 deletions

120
README.md Normal file
View File

@@ -0,0 +1,120 @@
# 🎯 激光射击系统(双版本)
适用于 **MaixPy** 平台支持远程控制、电池监测、Wi-Fi 连接及 OTA 升级。
提供两个独立实现版本,共享相同网络协议与 OTA 机制,便于统一部署管理:
- `main.py`**视觉测距版**
- `laser.py`**激光测距版**
---
## 📁 项目结构
```
laser_shooting_system/
├── README.md
├── main.py # 视觉测距版主程序
└── laser.py # 激光测距版主程序
```
---
## ⚙️ 硬件依赖
| 版本 | 必需硬件 |
|------------|----------------------------------------|
| `main.py` | Maix 系列开发板 + 摄像头 + 其他硬件 |
| `laser.py` | Maix 系列开发板 + 激光测距模块I²C + 摄像头 + 其他硬件) |
> 💡 **注意:引脚复用风险**
> Maix 开发板部分 GPIO 兼容多协议(如 Wi-Fi / I²C 复用 A15/A27
> **Wi-Fi 初始化前禁止提前配置 I²C 引脚!**
### ❗ 关键提示
| 问题场景 | 后果 |
|---------|------|
| 提前初始化 I²C | Wi-Fi 初始化失败、OTA 中断、系统重启 |
**正确做法:**
- **`main.py`(视觉版)&`laser.py`(激光版)**
使用wifi时启用下面代码注释与WiFi复用的
```python
# 以下代码(如有,请启用):
# pinmap.set_pin_function("A15", "I2C5_SCL")
# pinmap.set_pin_function("A27", "I2C5_SDA")
```
## 📡 网络通信协议TCP / JSON
设备上电后自动连预设服务器,支持以下指令:
```json
{"data": {"cmd": N, "ssid": "...", "password": "..."}}
```
| `cmd` | 参数 | 功能说明 |
|-------|---------------------|------------------------------|
| 2 | — | 开启激光校准模式 |
| 3 | — | 关闭激光 |
| 4 | — | 查询电池电量 & 电压 |
| 5 | `ssid`, `password` | 配置 Wi-Fi + 触发 OTA 升级 |
| 6 | — | 返回当前 IP 地址 |
| 7 | — | 已联网时,直接执行 OTA 下载 |
### 示例交互
▶️ 下发指令(服务器 → 设备):
```json
{"data": {"cmd": 6}}
```
◀️ 设备响应(设备 → 服务器):
```json
{"result": "current_ip", "ip": "192.168.1.105"}
```
---
## 🛠️ 部署步骤
1. **选择版本**
- 固定场景 / 低成本 → `main.py`
- 高精度需求 → `laser.py`
2. **烧录程序**
- 将选定文件重命名为 `main.py`,或通过 MaixPy IDE 直接运行
3. **首次配置 Wi-Fi**
- 串口下发,或服务器推送 `cmd=5`
```json
{"data": {"cmd": 5, "ssid": "YourWiFi", "password": "12345678"}}
```
4. **后续 OTA 升级**
- 确保设备在线后,下发 `cmd=7` 即可触发 OTA
---
## 📝 注意事项
- 🔗 **OTA 地址**:由全局变量 `url` 定义,部署前务必修改为实际地址
- 🧵 **线程安全**:通过 `update_thread_started` 标志防止 OTA 并发下载
- ☀️ **视觉版**:光照敏感,建议在均匀光源环境使用
- 📏 **激光版**:确认模块 I²C 地址(默认 `0x29`),避免长线干扰
- 🌐 **网络操作**:均在子线程执行,主线程保持实时响应
## 🔧 打包步骤(命令行)
- 以t11的名称打包或者修改代码升级路径
---
> 文档版本v1.2
> 更新时间2025-11-21
> 维护人ZZH
```