← Back
mx3353672833-debug

mx3353672833-debug/moto-gps-waveshare

MOTO GPS · Waveshare ESP32-S3 1.75C 圆屏导航 + iPhone App | Author: Maler X | Noncommercial, attribution required | Experimental

View on GitHub ↗https://maler.top/ ↗
esp32-s3ioslvglmotorcycle-navigationnoncommercialsource-availablewaveshare
Stars
283
Forks
48
Watchers
283
Open issues
0
Contributors
3
Language
C++
License
Other
Default branch
main
Created Sep 5, 2026Updated Sep 28, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

语言 / Language: 中文 · English

MOTO GPS · Waveshare Edition

Glimpse 官网 · 2026-09-16 近期更新 · Web 调试入口

MOTO GPS 圆屏摩托车导航终端

想自己做一台微雪版?从 购买、固件烧录与 iPhone 安装教程开始。

功能与使用说明书 · 真实导航网关配置

用安卓手机? 用 AI 开发安卓版本:可复制的开发提示词、蓝牙与导航适配、测试及 GitHub 发布步骤。目前尚无现成的 Android App。

欢迎一起共创 Glimpse。 如果你基于这个项目做出了安卓 App,希望你愿意把源码也公开到 GitHub,让其他人能够学习、使用并一起维护。可以先在 Issues 聊想做的功能,再通过 Pull Request 贡献代码、修复或文档;请附上构建说明和已测试的机型。我们会保留贡献者署名,相关代码沿用项目现有许可。具体参与方式见 安卓共创邀请。

当前提供源码自行编译安装;尚无仓库发布的预编译固件、App Store / TestFlight 下载入口。 iOS 0.3.0(5)已加入发布准备改动,尚未通过 TestFlight 分发。 教程包含设备选型、原厂备份、Xcode 个人签名、配对、演示与常见问题。

作者:Maler X · 署名 / 非商业使用 · 实验性样机

一块装在车把上的圆屏,一个放在包里的 iPhone。手机负责定位、搜索与路线计算, 圆屏通过蓝牙显示简洁导航、速度、相对航向,并遥控 Apple Music。

项目基于 Waveshare ESP32-S3-Touch-AMOLED-1.75C, 包含圆屏固件、iOS App、路线网关和网页调试工具。

仓库同时收录自研电路板、V3 外壳、加工审阅资料和完整产品技术方案。 当前运行版本仍是微雪成品板 + iPhone;自研部分按历史工程候选归档,具体版本见下方资料入口。 B1 手机配套主板与 V3 外壳目前暂停推进,现阶段集中完善微雪版本。 首图为产品外观效果图,实物与加工尺寸请以对应版本的工程文件为准。

出发前在手机上搜索目的地、比较路线;开始导航后,车把上的圆屏显示眼前路口、 转向动作和距离。地图围绕固定的车头箭头移动,灰色道路和建筑提供周围环境参照。 滑动屏幕,还可以查看速度、航向,或操作 Apple Music。

功能详解 · 使用流程 · 硬件与开发环境 · 安装与配置 · 开发与测试 · 使用许可

产品参数 · 电路板与外壳 · 技术方案 PDF / DOCX · 资料总目录

电路板、外壳与产品资料

资料 包含内容 入口
产品说明与技术参数 微雪样机与自研 A1 对照、显示与通信、结构尺寸、数据来源与验证状态 产品参数
H0175 EVT A1 自研主板 KiCad 原理图与四层 PCB、项目符号封装库、BOM/CPL、Gerber/钻孔、装配图、ERC/DRC 和 SHA-256 A1 完整审阅包
Rev A0 R4 主板 A1 之前的路由基线与完整电气审阅资料,保留早期修订供比较 R4 审阅包
V3 自研外壳 参数化 CAD、前框/后壳/卡口 STEP 与 STL、装配模型、二维图、结构规格及外观渲染 V3 文件说明
产品技术方案 H0175 EVT A1 与 Rev A0 两版 Markdown、PDF、可编辑 Word,附系统架构与产品配图 阅读与下载
审查与生成工具 器件封装审计、电气检查、候选包导出脚本及硬件发布检查测试 硬件工具

自研 A1 使用 Ø52 mm 四层板,历史方案集成 ESP32-S3、LC76G、IMU、磁力计和 充电电源;V3 外壳名义主体 Ø61 × 16 mm,含卡口约 19 mm。这些参数属于自研 设计资料,与当前微雪板的尺寸和器件配置分开列出。A1、R4 均为工程审阅版本, 保留原有 DO NOT ORDER 标识;上传资料不代表恢复打样或已完成生产验收。

H0175 EVT A1 自研主板正面预览

V3 外壳装配模型

目前有什么

模块 功能
圆屏导航 白色路线、下一动作图标与距离;真实道路限速和红绿灯倒计时尚未接通
iPhone 原生导航栏与分组列表、浅深色与大字体、位置偏置搜索、搜索历史、路线预览与候选选择
导航逻辑 共享 C++ 核心,路线进度、偏航检测、联网重算与周期路线/路况刷新
灰色道路 / 建筑 默认在线加载周边 OSM / Protomaps 底图;支持城市、区县与沿途下载,保留内置济南地图兜底
马表 / 航向 手机定位提供速度与行驶方向,板载 QMI8658 辅助相对转向
音乐 Apple Music 上一首、播放/暂停、下一首
动效 / 触摸 黑白 Logo 淡入淡出、连接状态过渡、滑动切页、指示点自动隐藏、PWR 长按关机
演示 济南大数据产业基地 D 栋附近 → 浪潮总部附近;在线请求与 OSM 离线回退明确区分

功能详解

圆屏导航:把下一个路口看清楚

导航页以黑色为底,白色路线和转向提示是画面的重点。466×466 的圆形显示区域中, 每种元素都有明确含义:

画面元素 表达的信息
固定车头箭头 当前行进位置的视觉锚点,指向屏幕前方
白色粗线 当前导航路线在附近的走向
灰色细线 周围道路的实际几何形状,帮助辨认路口、支路和道路关系
灰色建筑块 OSM 中收录的建筑轮廓,提供街区和园区参照
左下动作图标 下一个路口的直行、左转、右转、掉头等动作
动作旁的大号距离 距离这个动作还有多远,按距离切换 m / km
限速牌 已有显示结构,但真实道路限速尚未接通;缺少数据时隐藏
底部圆弧 路线完成进度,颜色随当前路况状态变化

例如屏幕显示右转箭头和 300 m,意思就是沿当前路线行驶约 300 米后右转。 接近路口时,距离逐渐减少;通过路口后,图标和数字更新为下一项指引。

行驶和转弯时,路线、周边道路和建筑使用同一组位置、航向和缩放参数。 车头箭头保持固定,地图在它下面平移、旋转,便于连续观察前方道路。 圆屏聚焦当前路段,出发前的全程路线由 iPhone 的预览地图展示。

地点搜索与路线选择

iPhone App 使用高德地点搜索与普通驾车路线服务。搜索时会带上手机当前位置, 优先呈现附近、相关度较高的地点。在济南输入“奥体中心”这样的关键词即可开始检索, 也可以输入带城市名的外地地点。 当前是普通驾车路线,不保证避开摩托车禁限行道路。

搜索与选路流程包括:

  • 输入至少两个字开始搜索,连续输入时合并请求,按最新关键词更新结果。
  • 搜索结果显示地点名称、地址或所在区域;有当前位置时可展示距离。
  • 选择地点后保存到最近地点列表,按使用顺序保留 8 条,重启 App 后继续保留。
  • 点击最近地点可重新规划前往该处的路线,也可以一键清空历史。
  • 规划前刷新起点位置,再向网关请求候选路线。
  • 按高德实际返回结果提供 最多 3 条路线,以推荐路线、备选路线展示。

路线确认页会显示起点、终点和整条路线。选中的路线高亮,其余候选以浅色显示。 下方卡片列出各条路线的距离、预计时间和分段路况摘要,例如“路况顺畅”“部分路段缓行”。 点击卡片切换方案,确认后再点击“开始导航”。

开始时会将选中的路线交给导航核心;如果预览后起点已经明显移动,程序会从当前位置 重新规划。路线确认与真机显示的一致性是当前持续回归测试的项目之一。

行驶中的导航更新

导航核心根据连续定位更新路线进度、下一动作距离、剩余路程和预计剩余时间。 手机导航页同时显示目的地、圆屏连接状态、定位状态与当前路况。

偏航判断结合偏离距离与连续定位确认。满足条件后,App 发起重新规划, 取得新路线后将指引同步给圆屏。路况通过周期请求刷新;核心默认配置约每 60 秒 发起一次更新,实际请求节奏还受网络状态、重试和服务配额影响。 当前路线仍以白线显示,按路段着色及未知、过期路况的呈现仍在完善。 红绿灯倒计时和可信的当前道路限速数据尚未接通。

定位质量、请求编号、路线版本都参与状态更新。手机保留当前导航状态, 圆屏重新完成连接和协议握手后,程序会尝试补发最新路线与显示数据。 后台连接和跨城路线的验证进展集中记录在开发进度。

在线周边地图与离线下载

背景小地图使用 OpenStreetMap / Protomaps 道路和建筑数据。配置可用网关后, 导航默认按当前位置在线加载周边底图,保存已访问区域;网络不可用时复用本地数据。 底图已经不限于随包的济南数据,但能否下载及当地道路、建筑完整程度取决于数据源与网络。

在 iPhone 首页进入「地图与离线下载」:

  • 「下载城市地图」可搜索城市或区县,预览范围后下载;范围较大时建议先选区县。
  • 选好路线后,可「下载这条路线周边」,保存沿途约一公里范围的底图。
  • 下载可以暂停、继续和删除;自动缓存最多 128 MB,手动下载最多 512 MB,共用瓦片只保存一份。
  • 离线底图不包含实时路况;搜索地点、规划新路线和联网重算仍需要网络。

原有济南 SQLite 地图库仍随 App 提供,作为覆盖区域内的本地兜底:

当前内置数据包 数量
文件体积 9.73 MiB
道路折线 47,468 条
道路节点 266,985 个
建筑轮廓 26,702 个
建筑节点 148,140 个

导航时,手机从在线瓦片、已保存地图或可用的济南兜底数据中筛选当前位置周围约 500 米 的道路和建筑,再通过 BLE 发给圆屏。查询窗口随位置滚动,圆屏不保存整座城市地图。

目前单个显示窗口最多容纳 24 条背景道路、192 个道路点,以及 16 个建筑、128 个建筑点。 这种分工让手机保存完整区域数据,圆屏负责绘制当前视野。地图密度取决于当地 OSM 收录情况、要素筛选策略和窗口容量;建筑覆盖较完整的区域会有更丰富的街区细节。

路线规划与路况由在线高德服务提供,圆屏灰色环境图层来自 OSM / Protomaps, 手机全程预览底图由 Apple 地图提供。它们是不同数据层,离线下载不等于离线导航。 长期部署需准备稳定、获准使用的数据源,保留 OSM 署名与许可入口。 新流程见近期更新,原有数据库格式和重建工具见 离线地图说明。

马表与航向页

马表页以大号数字显示当前速度,单位为 km/h,外圈刻度和圆弧随速度变化。 页面围绕实时速度设计,适合在圆屏上快速读取。

航向页显示角度、方位字母、旋转刻度和当前速度。手机定位提供行驶方向, 圆屏上的 QMI8658 六轴传感器提供短时角速度,用于补偿转动过程中的显示变化。

手机放在包里时,行驶方向取自位置运动产生的 CLLocation.course; 圆屏的相对转角取自设备自身陀螺仪。低速或静止时冻结不可靠的航向变化并抑制残余速度, 恢复行驶后再由定位航向逐渐校正。静止绝对北向属于后续磁力计扩展的范围。

Apple Music 控制

音乐页通过 iPhone 的系统音乐播放器控制 Apple Music,显示音乐来源、曲目标题、 歌手和播放状态。圆屏提供上一首、播放/暂停、下一首三个操作按钮。

首次使用时,在 iPhone 上授权媒体资料库访问,并在 Apple Music 中准备好播放队列。 触摸圆屏按钮后,命令经 BLE 发送到手机;播放器处理动作后,最新曲目与状态再回传圆屏。 手机授权状态和播放器状态决定音乐功能的可用情况。

声音继续沿用 iPhone 当前的音频输出,例如头盔蓝牙耳机。圆屏承担显示与遥控, 适合与手机现有的音乐播放方式搭配使用。

开机、连接与触摸交互

上电后先显示黑白 MOTO GPS Logo,经过淡入、停留和淡出进入连接界面。 面板在纯黑首帧准备好后点亮,减少启动闪白。

开机 Logo → 准备连接 / 连接中 → 绿色连接成功 → 准备出发 → 导航画面

准备连接时显示连接图形和动画;协议握手完成后,绿色成功状态停留约 0.9 秒, 再进入准备出发页,提示到手机选择目的地。开始规划与取得路线时,页面继续随状态切换。

  • 左右滑动切换导航、马表、航向、音乐页面;音乐页按手机能力开放。
  • 底部指示点用于识别当前页面,停留五秒后自动隐藏。
  • 触摸或换页后,指示点重新出现。
  • 侧面 PWR 按住约三秒,显示关机画面并向 AXP2101 请求关机;USB 供电场景还有深睡处理。

演示导航

App 提供“演示导航”入口,使用以下公共地点作为固定演示场景:

济南大数据产业基地 D 栋附近 → 浪潮集团总部附近。

联网演示优先请求当次高德路线,再沿返回的路线几何连续生成模拟位置。 离线回退使用随仓库提供的 OSM 路线,经过园区车道、新泺大街、崇华路和浪潮路, 全长约 1.49 公里。演示位置同样经过导航核心、BLE 协议和圆屏 UI。

坐在桌前即可观察动作图标与距离的对应关系、地图滚动、转弯旋转、周边灰路与建筑, 也能检查连接状态切换和页面排版。Web 工具提供同源界面的浏览器预览。 演示数据的道路来源、生成方式和 OSM 署名见演示夹具说明。

使用流程

完成首次安装和配置后,一次导航按下面的顺序操作:

  1. 给圆屏上电,在 iPhone 上打开 MOTO GPS。
  2. 查看连接状态;首次配对时按 iOS 提示完成蓝牙配对和权限授权。
  3. 输入目的地,或者从最近地点中选择一个终点。
  4. 在全程地图中查看路线,比较候选卡片的距离、用时与路况。
  5. 选择路线并点击“开始导航”,手机开始更新位置,圆屏显示当前路段和下一动作。
  6. 停车时可滑动查看马表、航向和音乐页面,按需切歌。
  7. 到达后查看到达状态,在手机上结束导航;收车时长按圆屏 PWR 关机。

iPhone 提供网络和定位,圆屏通过 BLE 连接手机。当前后台连接可靠性仍在验证中, 请先在安全静止环境完成锁屏、恢复连接和状态同步测试。 调试及操作请停车后进行,行驶时请结合成熟导航软件核对路线。

硬件与开发环境

终端硬件

项目 当前适配
开发板 Waveshare ESP32-S3-Touch-AMOLED-1.75C
主控 ESP32-S3
存储 32 MB Flash、8 MB PSRAM
显示 1.75 英寸圆形 AMOLED,466×466
显示驱动 CO5300,QSPI,RGB565
触摸 CST9217 电容触摸
运动传感器 QMI8658 六轴 IMU
电源管理 AXP2101,USB-C / 配套锂电池
手机连接 BLE,自定义导航 GATT 服务

准备一条支持数据传输的 USB-C 线。使用电池时,按微雪对 1.75C 的规格、 插头和极性要求选择。刷写前请核对完整板型;板级连接与固件步骤见 ESP32 说明。

软件工具

用途 环境
iPhone App iOS 17+;Mac、Xcode 16+ / Swift 6 工具链、XcodeGen
圆屏固件 ESP-IDF 5.5.5,Waveshare BSP 3.0.0
共享 UI LVGL 9.5.0 对应固定提交
路线网关 Node.js 20+;建议 Node.js 24+ 运行本文配置示例
C++ 测试 CMake、支持 C++17 的编译器
Web 预览 Emscripten、CMake、HTTP 静态服务器
地图重建 Node.js 24+、osmium-tool、jq

真实导航需要配置自己的高德 Key、HTTPS 网关和 Apple 开发者签名。

安装与配置

1. 获取源码

git clone --recurse-submodules https://github.com/mx3353672833-debug/moto-gps-waveshare.git
cd moto-gps-waveshare

上述命令会同时获取固定版本的 LVGL。使用 GitHub 的 Download ZIP 时, 还需将 LVGL 提交 85aa60d18b3d5e5588d7b247abf90198f07c8a63 的源码放入 third_party/lvgl/。

下面的命令均以仓库根目录为起点。

2. 配置路线网关

也可以选择新增的 Cloudflare Workers + R2 部署,无需维护 Node 服务器。下面仍是原有服务器方案。

网关将 App 的搜索和路线请求转换为高德 Web 服务请求,再返回统一格式的导航数据。 高德 Key 保存在服务端环境变量中。

先运行后端自动测试,再创建自己的配置文件:

npm ci --prefix backend
npm --prefix backend test
cp backend/.env.example backend/.env

编辑 backend/.env:

配置项 填写内容
MOTO_PROVIDER 真实导航填写 amap;本地协议测试用 fixture;待配置服务用 disabled
AMAP_WEB_SERVICE_KEY 自己申请的高德 Web 服务 Key
PORT 后端监听端口,默认 8787
WEB_ORIGIN 使用 Web 工具时填写网页的实际 Origin
MOTO_MAP_PMTILES_URL auto 选择兼容的 Protomaps 构建;也可指定自己的 HTTPS PMTiles 地址,disabled 关闭在线底图
MOTO_MAP_CACHE_DIR 地图缓存目录,默认 .cache/map-tiles
MOTO_MAP_CACHE_MAX_BYTES 服务端缓存字节上限,默认 1073741824

用 Node.js 24+ 显式加载配置并启动:

node --env-file=backend/.env backend/src/server.js

服务默认监听 127.0.0.1:8787。部署时,用自己的 HTTPS 反向代理把 /moto-gps/api/ 转发到这个服务,供手机访问。 检查 /healthz 中的 provider 为 amap、ready_for_live_navigation 为 true, 再完成一次真实地点搜索与路线请求,确认账号权限、配额和网络。

对公网部署时,请配置访问控制、TLS、配额限制和日志脱敏。 完整 API 与部署说明见路线网关文档。

3. 构建并安装 iPhone App

也可以直接下载 IPA,在 App 中填写网关地址,无需自己用 Mac 编译:IPA 安装说明。

编辑 platforms/ios/project.yml,设置:

  • MOTOGPSGatewayBaseURL:自己的 HTTPS 网关地址,例如 https://YOUR-DOMAIN/moto-gps/api/。
  • PRODUCT_BUNDLE_IDENTIFIER:自己可用的唯一标识;App 与两个测试目标分别设置。
  • DEVELOPMENT_TEAM:自己的签名团队,也可以在 Xcode 中选择。

App 默认网关为示例地址 https://example.invalid/moto-gps/api/,使用前替换成自己的服务。 配置来源是 project.yml,XcodeGen 会据此更新工程与 Info.plist。

(cd platforms/ios && xcodegen generate)
open platforms/ios/MotoGPS.xcodeproj

连接并信任自己的 iPhone,按 Xcode 提示启用开发者模式,选择 MotoGPS scheme、 自己的设备和签名团队,再点击 Run 安装。 首次运行按提示允许定位、精确位置、蓝牙及所需媒体权限。 详细步骤和签名说明见iOS 文档。

4. 构建并刷入圆屏

安装、激活 ESP-IDF 5.5.5 环境后执行:

idf.py -C platforms/esp32 set-target esp32s3
idf.py -C platforms/esp32 build

构建会获取固定依赖,在 platforms/esp32/build/ 生成应用、bootloader 和分区表。 首次刷写前,按固件文档的备份步骤 核对型号、Flash 容量和安全状态,保存原厂完整备份。

确认备份完成并接受替换原厂应用后,将 PORT 换成实际 USB 串口:

idf.py -C platforms/esp32 -p PORT flash monitor

设备启动后以 MOTO GPS 广播。打开 iPhone App 完成配对与握手, 圆屏进入准备出发页后,即可按照上面的使用流程选择路线。

5. 在浏览器预览界面

安装并激活 Emscripten 后,构建共享 LVGL WebAssembly 运行时:

./scripts/build_web.sh
python3 -m http.server 4173 --directory .

浏览器打开:

http://127.0.0.1:4173/platforms/web/shell/index.html?demo=1

也可以分别预览连接状态,把查询参数改为 ?deviceState=connecting、 ?deviceState=success、?deviceState=ready 或 ?deviceState=planning。 这些状态使用共享 LVGL 界面渲染,适合开发时检查动画和排版。

查看和调试界面可用 Web 调试工具,使用时保持网页前台亮屏。 线上调试入口是 /moto-gps/ride.html; Glimpse 官网 位于域名首页,网站本身不开源。 手机后台定位和 BLE 连接由 iOS App 负责,当前验证进度见已知问题。

实现方式

iPhone 负责位置、完整路线、地图下载与缓存,ESP32 负责接收显示状态、处理本机运动输入、 绘制圆屏和回传触摸命令。后端负责高德服务调用、Protomaps 数据读取、格式转换与缓存。

高德 Web 服务 ───────┐
OSM / Protomaps ─────┴→ HTTPS 网关与缓存 ←→ iPhone App
                                      │
                Core Location + 共享导航核心 + 在线 / 离线地图查询
                                      │ BLE
                                      ▼
                   ESP32 接收状态 + QMI8658 相对转向
                                      │
                           NavPresenter → LVGL → 圆屏

圆屏触摸 / 音乐操作 ─────── BLE ───────→ iPhone

共享导航与界面

路线进度、偏航状态和显示数据结构放在共享 C++ 模块中。iOS 通过 Objective-C++ 桥接调用 导航核心;Web 和 ESP32 共同编译 NavPresenter 与 LVGL UI。 调整圆屏布局、动作图标或地图绘制时,可以先用 Web 观察,再在实机验证。

完整路线保存在手机端,圆屏接收当前视野所需的路线几何与周边环境窗口。 请求位置使用 WGS84,导航几何统一为 GCJ-02;地图预览按平台坐标要求进行转换。 相关约定见架构说明和路线协议。

BLE 数据与连接

设备以 GATT peripheral 工作,iPhone 作为 central 连接。 协议包含连接状态、心跳、导航快照、路线几何、路况、道路/建筑窗口、媒体状态和设备命令。

传输层实现分片重组、CRC 校验、消息序号、会话隔离、控制命令 ACK 与超时重试。 手机到圆屏的导航快照最高按 5 Hz 调度,位置和转向动画由终端进一步插值。 配对采用加密 BLE 连接与 bonding;连接恢复仍在持续测试。 心跳只发送当前应用会话的已用时间,不发送手机系统启动时长。 GATT UUID、字节格式与黄金测试数据见BLE 协议。

显示与流畅度

固件使用 PSRAM 绘图缓冲与直接 DMA,让 LVGL 绘制和 QSPI 传输衔接。 CO5300 的 TE 信号用于帧首同步,地图、插值和渲染任务按 25 ms 的目标节拍协调。 实际帧率、快速转向时的撕裂感和持续运行功耗,仍以实机测量与观察为准。

源码结构

platforms/ios       iPhone 定位、路线预览、BLE、Apple Music、在线 / 离线地图
backend            Node.js 高德服务与 Protomaps 地图网关、缓存(Key 只在服务端)
platforms/esp32     Waveshare 板级适配、BLE、QMI8658、显示与电源
shared             共享导航核心、协议、LVGL UI、OSM 演示及地图数据
platforms/web      LVGL / Wasm 调试外壳
website            Glimpse 官网源码与部署说明
tests              C++ 原生测试
scripts            Web 构建、字体与 OSM 地图工具

详见 架构与数据边界、测试方式、 已知问题、第三方许可证。

开发与测试

运行自动测试

在仓库根目录执行:

cmake -S . -B build/native -DMOTO_BUILD_WEB=OFF -DMOTO_BUILD_TESTS=ON
cmake --build build/native --parallel 4
ctest --test-dir build/native --output-on-failure

npm ci --prefix backend
npm --prefix backend test
swift test --package-path platforms/ios

node scripts/generate_jinan_demo_fixture.mjs --check
node scripts/offline_map/validate_jinan_sqlite.mjs

2026-09-16 本轮通过 9 组 C++ 原生测试、60 项后端测试、12 项 Swift 核心测试, 并有 13 项 BLE 策略测试通过记录;演示夹具一致性与地图数据库完整性检查通过。 这些结果验证代码和数据路径,不代表真实道路、长时间锁屏或续航验收完成。 本轮范围见近期更新;首次公开快照的历史结果保留在 发布检查记录,提交后的检查结果见 GitHub Actions。

从哪里开始修改

想调整的内容 主要入口
圆屏布局、颜色、图标、状态动画 shared/nav_ui/src/moto_nav_ui.cpp
地图投影与显示数据转换 shared/nav_presenter/src/moto_nav_presenter.cpp
偏航、到达、定位有效期和路况刷新默认配置 shared/nav_core/nav_core.hpp 中的 NavCoreConfig
手机搜索、历史记录、路线确认流程 platforms/ios/App/AppModel.swift、ContentView.swift
全程路线地图与候选展示 platforms/ios/App/RouteOverviewMap.swift
BLE 握手、发送调度与恢复连接 iOS 的 ESP32BLECentral.swift 与 ESP32 的 ble_nav_transport_nimble.cpp
当前窗口道路与建筑筛选 platforms/ios/App/Adapters/OfflineMap/
Apple Music 遥控 platforms/ios/App/Adapters/Media/AppleMusicRemoteController.swift
CO5300 显示、TE 同步与电源 platforms/esp32/main/board_port_waveshare_1_75c.cpp
地图数据重建 scripts/offline_map/

修改协议时请同步更新两端实现和 golden fixture;修改地图时保留 OSM 来源、许可和署名。 贡献流程见CONTRIBUTING。

开发进度

当前版本处于实机验证阶段,接下来重点回归:

  • iPhone 锁屏、切换网络和离开原环境后的 BLE 连接恢复。
  • 跨城候选路线生成,以及手机选中路线与圆屏显示的一致性。
  • 在线与离线地图切换、下载中断恢复,以及路况分段显示和过期状态。
  • 快速转向时的刷新连续性、TE 同步表现和持续帧率。
  • USB、电池及组合供电下的关机、唤醒、续航和温升。

功能说明描述的是当前源码实现;最新发布与验证边界见近期更新, 历史问题见已知问题。提交问题时请附上板型、固件版本、iOS 版本、 复现步骤与脱敏日志,便于区分定位、网关、协议和显示环节。

使用许可与署名

项目原创代码和设计素材使用 PolyForm Noncommercial 1.0.0。 允许许可范围内的个人学习、研究、非商业使用和修改;分发源码、修改版、固件或 App 时必须携带许可证及 NOTICE 中的作者声明,注明 Maler X 和本仓库来源。 App 待机界面和 Web 状态页也提供可见署名入口。

仅限非商业使用。 销售预装设备、收费分发固件、用于商业产品或收费服务等用途, 须另行联系作者取得商业授权。具体授权范围以 LICENSE.md 正文为准。

授权类型为 source-available(公开源码、非商业授权)。 第三方库、字体和 OSM 数据分别遵循原许可证;地图服务须按服务商协议使用。

© 2026 Maler X · 地图数据 © OpenStreetMap contributors(ODbL 1.0)。