# gps_nmea_simulation **Repository Path**: viki888/gps_nmea_simulation ## Basic Information - **Project Name**: gps_nmea_simulation - **Description**: 将GPX运动轨迹通过串口模拟输出GPS信号,用于调试单片机处理GPS信号。本项目模拟的是ATGM336H的输出格式。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-20 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GPS NMEA 数据模拟器(ATGM336H) 读取 GPX 轨迹文件,生成 NMEA 0183 语句并通过串口发送,用于在没有真实 GNSS 模块的情况下模拟 **ATGM336H**(中科微 AT6558,GPS+北斗双模)的串口输出,方便调试上位机或嵌入式设备。 ## 功能 - 手动选择 GPX 文件,解析轨迹点(经纬度、海拔、时间、速度) - 缺失速度时按相邻点距离/时间自动推算,并计算航向 - 生成与 ATGM336H 一致的 NMEA 语句组并附带 XOR 校验和 - 手动选择串口与波特率,按设定频率发送 - 可按 GPX 原始时间间隔回放,支持循环播放 - GUI 实时显示当前模拟的 GPS 数据与已发送的 NMEA 报文 ## 环境要求 - Python 3.10+(使用了 `X | None` 类型标注) - Tkinter(Windows 官方 Python 默认自带) - pyserial ```powershell pip install -r requirements.txt ``` ## 运行 ```powershell python main.py ``` ## 使用步骤 1. 点击「选择文件...」加载 GPX 文件,状态栏会显示解析到的轨迹点数量。 2. 在「串口设置」中选择串口(可点「刷新」重新枚举),波特率默认 `9600`(ATGM336H 出厂值)。 3. 在「模拟控制」中设置发送间隔;勾选「使用 GPX 时间间隔」则按轨迹点原始时间差回放,勾选「循环播放」可循环。 4. 点击「开始模拟」,左侧显示当前轨迹点信息,右侧滚动显示发送的 NMEA 报文;点击「停止」结束并自动关闭串口。 > 若没有真实设备,可用虚拟串口工具(如 com0com、VSPD)创建一对串口,一端发送、另一端用串口助手接收验证。 ## 输出格式 每个轨迹点按 ATGM336H 的顺序输出一组语句(行尾为 `\r\n`): `GNGGA` → `GNGLL` → `GPGSA` → `BDGSA` → `GPGSV` → `BDGSV` → `GNRMC` → `GNVTG` → `GNZDA` → `GPTXT` 示例: ```text $GNGGA,141201.000,4347.4619,N,08738.0152,E,1,12,1.2,905.9,M,0.0,M,,*7C $GNGLL,4347.4619,N,08738.0152,E,141201.000,A,A*4C $GPGSA,A,3,01,02,03,04,05,06,07,08,,,,,2.1,1.2,1.7*3C $BDGSA,A,3,01,02,03,04,,,,,,,,,2.1,1.2,1.7*21 $GPGSV,2,1,08,01,26,047,33,02,37,094,38,03,48,141,43,04,59,188,31*73 $BDGSV,1,1,04,01,26,227,33,02,37,274,38,03,48,321,43,04,59,008,31*68 $GNRMC,141201.000,A,4347.4619,N,08738.0152,E,5.17,41.19,190826,,,A*41 $GNVTG,41.19,T,,M,5.17,N,9.58,K,A*19 $GNZDA,141201.000,19,08,2026,00,00*49 $GPTXT,01,01,01,ANTENNA OK*35 ``` 细节说明: - 定位类语句使用 `GN` 前缀,卫星类语句按系统区分 `GP`(GPS)/ `BD`(北斗) - UTC 时间为 `hhmmss.sss`,经纬度为 `ddmm.mmmm` / `dddmm.mmmm` 度分格式 - 默认模拟 8 颗 GPS + 4 颗北斗卫星,`GNGGA` 中卫星数为两者之和 - 卫星数量、DOP 值可在 `nmea_builder.py` 顶部常量中调整 ## 项目结构 | 文件 | 说明 | | --- | --- | | `main.py` | Tkinter GUI 主程序,发送线程与界面更新(通过队列通信) | | `gpx_parser.py` | GPX 解析,支持 `trkpt`/`rtept`/`wpt`,速度与航向推算 | | `nmea_builder.py` | NMEA 语句生成与校验和计算,模拟 ATGM336H 输出 | | `serial_sender.py` | 串口枚举与写入封装 | | `requirements.txt` | 依赖列表 | ## 常见问题 - **无可用串口**:确认 USB 转 TTL 驱动已安装,或先创建虚拟串口对。 - **打开串口失败**:串口被串口助手等其他程序占用,先关闭再重试。 - **接收端乱码**:两端波特率不一致,需保持一致(默认 9600、8N1、无流控)。