# 🎯 激光射击系统(双版本) 适用于 **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 ```