# car_web **Repository Path**: machine_-project/car_web ## Basic Information - **Project Name**: car_web - **Description**: 小车项目树莓派上位机web程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-08-06 - **Last Updated**: 2026-08-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 树莓派智能小车控制终端 基于 Flask 的树莓派 Web 控制应用,用于 STM32F407 小车的运动控制与超声波雷达数据可视化。 ## 功能特性 - **小车运动控制**:前进、后退、左转、右转、停止 - **三挡速度调节**:低速(30%)、中速(60%)、高速(100%) - **180° 雷达扫描**:实时超声波探测数据可视化 - **雷达动画效果**:扫描线拖尾、探测点缓灭淡出 - **响应式设计**:支持桌面端与移动端操作 - **键盘快捷键**:方向键控制移动,空格键停止 ## 项目结构 ``` Pi/ ├── app.py # Flask 应用主入口 ├── config.py # 配置文件 ├── requirements.txt # Python 依赖 ├── README.md # 本说明文档 ├── modules/ │ ├── __init__.py │ ├── protocol.py # 二进制私有协议封装 │ ├── car_controller.py # 小车控制逻辑 │ └── radar_service.py # 雷达数据采集服务 ├── static/ │ ├── css/ │ │ └── style.css # 前端样式 │ └── js/ │ ├── radar.js # 雷达 Canvas 动画 │ └── control.js # 控制交互逻辑 └── templates/ └── index.html # 主页面模板 ``` ## 环境要求 - Python 3.8+ - 树莓派(Raspberry Pi 3/4/5) - STM32F407 小车通过串口连接 - 推荐操作系统:Raspberry Pi OS (64-bit) ## 安装步骤 ### 1. 安装系统依赖 ```bash sudo apt update sudo apt install -y python3-pip python3-venv ``` ### 2. 创建虚拟环境并安装依赖 ```bash cd ~/Pi python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` ### 3. 配置串口权限 ```bash sudo usermod -a -G dialout $USER # 重新登录使权限生效 ``` ### 4. 配置串口设备(可选) 默认使用 `/dev/ttyUSB0`,可通过环境变量修改: ```bash export STM32_PORT=/dev/ttyACM0 export STM32_BAUDRATE=115200 ``` ## 运行应用 ### 开发模式 ```bash source venv/bin/activate python app.py ``` ### 生产模式(使用 Gunicorn) ```bash source venv/bin/activate pip install gunicorn gunicorn -w 1 --threads 4 -b 0.0.0.0:5000 app:app ``` ### 系统服务(推荐) 创建 `/etc/systemd/system/car-control.service`: ```ini [Unit] Description=Car Control Flask App After=network.target [Service] User=pi WorkingDirectory=/home/pi/Pi Environment="PATH=/home/pi/Pi/venv/bin" Environment="STM32_PORT=/dev/ttyUSB0" ExecStart=/home/pi/Pi/venv/bin/gunicorn -w 1 --threads 4 -b 0.0.0.0:5000 app:app Restart=always [Install] WantedBy=multi-user.target ``` 启用并启动服务: ```bash sudo systemctl daemon-reload sudo systemctl enable car-control sudo systemctl start car-control ``` ## 访问应用 - 树莓派本地:`http://localhost:5000` - 局域网访问:`http://<树莓派IP>:5000` ## 通讯协议 ### 帧格式 | 字段 | 长度 | 说明 | |------|------|------| | HEAD | 1B | 帧头 0xAA | | LEN | 1B | 数据长度(含CMD+DATA+CHK) | | CMD | 1B | 命令类型 | | DATA | N B | 数据载荷 | | CHK | 1B | 校验和(HEAD到DATA累加和取低8位) | | TAIL | 1B | 帧尾 0x55 | ### 命令定义 | 命令 | 值 | 数据 | 说明 | |------|-----|------|------| | MOVE | 0x01 | [方向, 速度挡] | 运动控制 | | STOP | 0x02 | 无 | 停止 | | SET_SPEED | 0x03 | [速度挡] | 设置速度 | | RADAR_DATA | 0x10 | [角度高,角度低,距离高,距离低] | 雷达数据 | ### 方向定义 - 0x01: 前进 - 0x02: 后退 - 0x03: 左转 - 0x04: 右转 ## API 接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | /api/car/move | 运动控制 `{direction: "forward"}` | | POST | /api/car/stop | 停止 | | POST | /api/car/speed | 设置速度 `{level: 1\|2\|3}` | | GET | /api/car/status | 获取状态 | | GET | /api/radar/state | 获取雷达状态 | | WS | /ws/radar | 雷达实时数据 WebSocket | ## 性能优化建议 1. **Canvas 渲染**:使用 `requestAnimationFrame` 确保动画流畅 2. **WebSocket**:单连接推送,减少轮询开销 3. **串口读取**:非阻塞读取,超时自动重连 4. **树莓派限制**:建议单 worker 运行,避免 GPIO/串口竞争 ## 故障排查 ### 串口无法连接 ```bash # 检查设备 ls /dev/tty* # 检查权限 groups $USER # 临时测试 sudo chmod 666 /dev/ttyUSB0 ``` ### WebSocket 连接失败 检查防火墙是否放行 5000 端口: ```bash sudo ufw allow 5000/tcp ``` ### 雷达无数据 确认 STM32 端是否正确发送 `RADAR_DATA` 帧,可通过串口助手抓包验证。 ## 许可证 MIT License