{"id":47750367,"url":"https://github.com/wjsall/tesla-fsd-controller","last_synced_at":"2026-04-26T09:02:17.675Z","repository":{"id":348401530,"uuid":"1197199610","full_name":"wjsall/tesla-fsd-controller","owner":"wjsall","description":"Tesla FSD CAN Bus Controller — ESP32 WiFi Web 版，手机浏览器实时控制，支持中国模式","archived":false,"fork":false,"pushed_at":"2026-04-06T04:09:16.000Z","size":540,"stargazers_count":13,"open_issues_count":0,"forks_count":8,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-06T06:04:01.244Z","etag":null,"topics":["arduino","can-bus","esp32","fsd","platformio","tesla","tesla-fsd"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wjsall.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-31T12:01:33.000Z","updated_at":"2026-04-06T04:09:19.000Z","dependencies_parsed_at":"2026-04-07T07:00:37.254Z","dependency_job_id":null,"html_url":"https://github.com/wjsall/tesla-fsd-controller","commit_stats":null,"previous_names":["wjsall/tesla-fsd-controller"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/wjsall/tesla-fsd-controller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wjsall%2Ftesla-fsd-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wjsall%2Ftesla-fsd-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wjsall%2Ftesla-fsd-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wjsall%2Ftesla-fsd-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wjsall","download_url":"https://codeload.github.com/wjsall/tesla-fsd-controller/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wjsall%2Ftesla-fsd-controller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31503394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","can-bus","esp32","fsd","platformio","tesla","tesla-fsd"],"created_at":"2026-04-03T03:02:23.002Z","updated_at":"2026-04-26T09:02:17.645Z","avatar_url":"https://github.com/wjsall.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tesla FSD Controller — ESP32 Web 版\n\n\u003cp align=\"right\"\u003e\u003ca href=\"README_EN.md\"\u003eEnglish\u003c/a\u003e | 中文\u003c/p\u003e\n\n\u003e ## 🚫 重要公告：本项目对中国国内车辆已失效\n\u003e\n\u003e 自 **2026 年 3 月 31 日晚 9 时左右**，Tesla 向中国国内车辆远程下发了底层配置，从芯片层面禁用了 FSD 相关功能。**CAN 总线层面的修改已无法绕过此限制，本项目对中国国内车辆不再有效。**\n\u003e\n\u003e 注意：封禁期间 **FSD 账号授权不受影响**，已购买或订阅的 FSD 资格仍然保留，仅本 mod 失效。\n\u003e\n\u003e 海外车辆暂不受影响。本项目代码保留供学习、研究及海外用户使用。\n\n---\n\n基于 [ev-open-can-tools](https://github.com/ev-open-can-tools/ev-open-can-tools)（原 tesla-open-can-mod） 的 ESP32 + WiFi 控制面板版本。\n\n烧录后，ESP32 会创建一个 WiFi 热点，手机连上就能用浏览器实时控制所有参数，**无需重新编程**。\n\n---\n\n## ⚡ 快速刷机（推荐，无需安装任何软件）\n\n\u003e 使用预编译固件，全程用浏览器完成，5 分钟搞定。\n\n### 第一步：选择对应你的板子的固件\n\n\u003e 每个板子有两个固件文件，用途不同：\n\u003e - **`xxx_v1.4.25.bin`**（合并固件）→ 首次刷机用，通过 ESP Web Flasher 写入，地址 `0x0`\n\u003e - **`xxx_v1.4.25_ota.bin`**（OTA 固件）→ 后续无线升级用，通过控制面板「固件更新」上传；或让设备从 GitHub 在线自动拉取\n\u003e\n\u003e 完整最新资产见 [**releases 页面**](https://github.com/wjsall/tesla-fsd-controller/releases/latest)。以下为 **v1.4.25** 直链：\n\n| 板子 / 变体 | 首次刷机 | OTA 升级 | 适用场景 |\n|---|---|---|---|\n| 标准 ESP32 + SN65HVD230 | [esp32_v1.4.25.bin](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32_v1.4.25.bin) | [ota](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32_v1.4.25_ota.bin) | 入门，5V USB 供电 |\n| **Waveshare ESP32-S3-RS485-CAN** | [esp32s3_waveshare_v1.4.25.bin](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32s3_waveshare_v1.4.25.bin) | [ota](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32s3_waveshare_v1.4.25_ota.bin) | 车内永久安装，7–36V 宽压 |\n| ESP32 Wi-Fi 桥接 | [esp32_wifi_v1.4.25.bin](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32_wifi_v1.4.25.bin) | [ota](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32_wifi_v1.4.25_ota.bin) | 给车机提供 Wi-Fi 上行 + DNS 过滤 |\n| Waveshare ESP32-S3 Wi-Fi 桥接 | [esp32s3_waveshare_wifi_v1.4.25.bin](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32s3_waveshare_wifi_v1.4.25.bin) | [ota](https://github.com/wjsall/tesla-fsd-controller/releases/download/v1.4.25/esp32s3_waveshare_wifi_v1.4.25_ota.bin) | 车内安装 + Wi-Fi 桥接 |\n\n\u003e **变体说明**：\n\u003e - **CAN 控制器**：所有固件都接入车辆一路 CAN（X179 或 X652），完成 FSD 注入与遥测。\n\u003e - **Wi-Fi 桥接**：ESP32 作为 STA 连上行 Wi-Fi，并以 AP 方式向车机输出带 DNS 过滤/域名拦截的网络。非必需功能，按需选择。\n\n### 第二步：刷入固件\n\n1. 用 **Chrome 或 Edge** 打开 [ESP Web Flasher](https://esp.huhn.me/)\n2. 板子通过 **Type-C** 连接电脑 → 点击「**Connect**」选择串口\n3. 点「**Add File**」选择刚下载的固件，地址填 `0x0`\n4. 点「**Program**」等待完成\n5. 连接 WiFi 热点 `FSD-Controller`（密码 `12345678`），浏览器访问 `9.9.9.9`\n\n\u003e ⚠️ Safari 不支持 WebUSB，请使用 Chrome 或 Edge。\n\u003e\n\u003e **Waveshare ESP32-S3 进入烧录模式：** 按住板子上的 **BOOT 键不松**，按一下 **RST 键**后松开，再松开 BOOT 键，然后点击 Connect 并在弹出窗口中选择端口。烧录完成后板子会自动重启。\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/screenshot_zh.jpg\" width=\"45%\" alt=\"Web UI - 中文\"\u003e\n  \u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"images/screenshot_en.jpg\" width=\"45%\" alt=\"Web UI - English\"\u003e\n\u003c/p\u003e\n\n---\n\n## ⚠️ 重要声明（请先读完）\n\n1. **仅限已购买 FSD 的车辆** — 本设备只是解锁 CAN 总线层面的限制，Tesla 服务器端必须有有效的 FSD 授权，否则不生效。\n2. **风险自担** — CAN 总线直接连接车辆关键系统，发送错误报文可能导致不可预期的行为或电子部件损坏。本项目仅供学习和测试用途，作者不承担任何因使用本项目造成的车辆损坏、人身伤害或其他损失。\n3. **保修失效** — 对车辆 CAN 总线进行改装可能导致 Tesla 官方保修失效，风险由使用者自行承担，作者对此不承担任何责任。\n4. **遵守当地法律法规** — 在公共道路上使用辅助驾驶功能须符合你所在地区的交通法规。部分功能在特定地区可能存在法律限制，请在使用前自行了解并遵守当地相关法律，作者不对任何法律后果负责。\n5. **交通事故免责** — 使用本设备期间发生的任何交通事故，包括但不限于车辆碰撞、财产损失、人身伤亡，责任由驾驶员本人承担，作者及项目贡献者不承担任何连带责任。驾驶时请始终保持专注，手握方向盘，随时准备接管车辆。\n6. **不适用于公共道路测试** — 初次使用请在私有场地进行，确认功能正常后再上路。\n\n---\n\n## 所需材料\n\n\u003e 以下材料在淘宝/京东均可购买，搜索括号内的关键词即可。\n\n### 方案一：标准 ESP32 开发板（入门推荐）\n\n| 材料 | 说明 | 参考价 |\n|------|------|--------|\n| ESP32 开发板 | 搜「ESP32-DevKitC」或「ESP32 38Pin 开发板」 | ¥20–35 |\n| SN65HVD230 模块 | 搜「SN65HVD230 CAN 模块 3.3V」，注意买 **3.3V** 版本 | ¥5–15 |\n| 杜邦线（母对母）| 搜「杜邦线 母对母 20cm」，买一包备用 | ¥5 |\n| USB 数据线 | Micro-USB 或 Type-C，取决于你的 ESP32 型号，用于烧录 | 通常自备 |\n\n\u003e **为什么选 ESP32？** 内置 WiFi 和原生 CAN（TWAI）控制器，无需额外芯片，成本最低。\n\n### 方案二：Waveshare ESP32-S3-RS485-CAN（推荐车内永久安装）\n\n| 材料 | 说明 | 参考价 |\n|------|------|--------|\n| **Waveshare ESP32-S3-RS485-CAN** | [淘宝购买链接](https://m.tb.cn/h.iGU3p56)，CAN 收发器已集成，导轨安装外壳 | [**¥99**](https://m.tb.cn/h.iGU3p56) |\n| Type-C 数据线 | 烧录或 USB-C 车内供电时使用 | 通常自备 |\n\n\u003e **为什么选这个板？** 支持两种供电方式：**直接接车内 12V**（7–36V 宽压端子供电，无需降压模块）或 **USB-C 供电**。CAN 收发器已集成（TJA1051T），端子排螺丝接线（无需杜邦线），DIN 导轨外壳适合车内隐蔽安装。\n\u003e\n\u003e ⚠️ **120Ω 终端电阻默认已接通**，Tesla 总线两端已有终端电阻，必须把跳线帽从 `ON` 拔下改插到 `NC`，否则总线变 60Ω 会出现 `bus-off TEC=128` 错误。\n\n---\n\n## 接线方法\n\n\u003e 🚫 **禁止使用 OBD2 接口**：OBD2 诊断口连接的是诊断 CAN 总线，经过车辆网关 ECU 隔离，修改后的报文**永远无法到达 Autopilot 电脑**，设备将完全无效。必须直接接车辆内部 CAN 总线（X179 / X652 连接器）。\n\u003e\n\u003e ⚠️ **以下接线位置仅适用于 Model 3 / Model Y，已经过社区验证。Model S、Model X、Model 3 Highland、Model Y Juniper、Cybertruck 等其他车型的连接器位置不同，请勿照搬，必须自行查阅 Tesla 官方服务手册。**\n\u003e\n\u003e - **Model 3 / Model Y（2021 及以后）**：推荐接 \u003ca href=\"https://service.tesla.com/docs/Model3/ElectricalReference/prog-233/connector/x179/\" target=\"_blank\" rel=\"noopener\"\u003eX179 连接器\u003c/a\u003e，Pin 13（CAN-H）/ Pin 14（CAN-L）\n\u003e - **Model 3（2020 及以前旧款）**：推荐接 \u003ca href=\"https://service.tesla.com/docs/Model3/ElectricalReference/prog-187/connector/x652/\" target=\"_blank\" rel=\"noopener\"\u003eX652 连接器\u003c/a\u003e，Pin 1（CAN-H）/ Pin 2（CAN-L）\n\u003e\n\u003e 不确定时请先查阅 Tesla 服务手册，切勿盲目拆车接线。\n\n---\n\n### 方案一：标准 ESP32 + SN65HVD230\n\n**Model 3 / Model Y 2021 及以后（X179）：**\n![接线图 X179](images/wiring.svg)\n\n**Model 3 2020 及以前（X652）：**\n![接线图 X652](images/wiring_x652.svg)\n\n#### ESP32 ↔ SN65HVD230 模块\n\n```\nESP32 GPIO 5  →  SN65HVD230 TX（有的板子标 CTX/D）\nESP32 GPIO 4  →  SN65HVD230 RX（有的板子标 CRX/R）\nESP32 3.3V    →  SN65HVD230 VCC\nESP32 GND     →  SN65HVD230 GND\n```\n\n#### SN65HVD230 ↔ 车辆 CAN 总线\n\n```\nSN65HVD230 CANH  →  车辆 CAN-H（通常为白色/棕色线）\nSN65HVD230 CANL  →  车辆 CAN-L（通常为蓝色/绿色线）\n```\n\n---\n\n### 方案二：Waveshare ESP32-S3-RS485-CAN（推荐车内永久安装）\n\n![接线图 Waveshare](images/wiring_waveshare.svg)\n\n接线极为简单，只需 4 根线，全部拧螺丝端子：\n\n```\n车辆 12V（保险丝盒 ACC 路）→  板子左侧端子 VCC+\n车辆 GND                   →  板子左侧端子 GND\n车辆 CAN-H（X179 Pin 13）  →  板子右侧端子 CAN H\n车辆 CAN-L（X179 Pin 14）  →  板子右侧端子 CAN L\n```\n\n\u003e - **无需** SN65HVD230 模块，CAN 收发器已集成（TJA1051T）\n\u003e - ⚠️ **必须处理 120Ω 终端电阻**：板上跳线默认短接在 `ON`，需拔下跳线帽改插到 `NC`。Tesla 总线两端已有 120Ω，不拔会并联成 60Ω → TEC 爆表 → 持续 bus-off\n\u003e - **无需** USB 常供电，可直接接车内 12V（ACC 路，随车熄火断电）\n\n---\n\n## 第一步：安装软件\n\n![编译烧录步骤](images/compile-steps.svg)\n\n### 1.1 安装 VS Code\n\n1. 打开 [https://code.visualstudio.com](https://code.visualstudio.com)，点击下载并安装。\n2. 安装完成后打开 VS Code。\n\n### 1.2 安装 PlatformIO 插件\n\n1. 点击 VS Code 左侧的「扩展」图标（四个方块的图标）。\n2. 搜索 `PlatformIO IDE`，点击「安装」。\n3. 安装完成后，VS Code 底部状态栏会出现一个小房子图标，表示 PlatformIO 已就绪（可能需要重启 VS Code）。\n\n\u003e **安装很慢？** PlatformIO 第一次启动会下载 ESP32 工具链，大约 200–500 MB，请耐心等待，保持网络畅通。\n\n---\n\n## 第二步：下载并打开项目\n\n1. 点击本页面右上角的绿色「Code」按钮，选择「Download ZIP」。\n2. 解压到任意文件夹，例如 `D:\\tesla-fsd`。\n3. 打开 VS Code，点击菜单「文件 → 打开文件夹」，选择刚才解压的文件夹。\n4. VS Code 右下角可能会弹出「是否信任此文件夹」，点击「是，我信任作者」。\n\n---\n\n## 第三步：修改配置\n\n\u003e 烧录前**无需改任何代码**。WiFi 名称/密码和硬件版本均可在烧录后通过 Web 面板修改，设置自动保存。\n\n### 3.1 修改 WiFi 热点名称和密码\n\n**推荐方式（烧录后在 Web 面板修改）：**\n\n1. 烧录完成后，用手机连上默认热点 `FSD-Controller`，密码 `12345678`。\n2. 浏览器访问 `9.9.9.9`，在「**WiFi 设置**」卡片中填入新名称和新密码。\n3. 点「保存并重启」，设备重启后用新名称/密码重连即可。\n\n**也可以烧录前在代码中修改初始默认值：**\n\n打开文件 `src/main.cpp`，找到第 20–21 行：\n\n```cpp\nstatic char apSSID[33] = \"FSD-Controller\";\nstatic char apPass[64] = \"12345678\";\n```\n\n将引号内的内容改成你自己的名称和密码（密码至少 8 位），烧录后直接生效。\n\n### 3.2 了解你的硬件版本\n\n**不需要改代码。** 烧录完成后，在 Web 控制面板的「硬件版本」下拉菜单中选择即可，设置会自动保存，断电后也不丢失。\n\n烧录前先确认你的版本，以便连上面板后能立刻选对：\n\n| 车机显示 | 软件版本 | FSD 版本 | 控制面板选择 |\n|----------|----------|----------|------|\n| HW4.x | 2026.2.9.x 或更新 | V14 | `HW4` |\n| HW4.x | 2026.8.x 或更旧 | V13 | `HW3` ⚠️ |\n| HW3.x | 任意 | — | `HW3` |\n| HW2.5 或更早 | 任意 | — | `LEGACY` |\n\n\u003e ⚠️ **HW4 硬件 + V13 固件必须选 `HW3`**：HW4 模式专为 FSD V14 设计，在 V13 固件上会导致功能不稳定（时好时坏）。在车机「控制 → 软件」中查看软件版本号来判断。\n\n\u003e **如何判断 HW2.5 还是 HW3？** 在车机「软件」→「额外车辆信息」中查看：有「全自动驾驶计算机」字样 → HW3；没有 → HW2.5，选 `LEGACY`。2019 年中后期起大多数车辆为 HW3，但同年也存在 HW2.5，需以车机实际显示为准。\n\n---\n\n## 第四步：烧录固件\n\n### 连接 ESP32\n\n用 USB 线将 ESP32 连接到电脑。\n\n### 在 VS Code 中烧录\n\n1. 点击 VS Code 底部状态栏左侧的「✓ Build」按钮先编译，确认没有错误。\n2. 编译成功后，点击旁边的「→ Upload」按钮开始烧录。\n3. 烧录成功后，终端会显示 `success`。\n\n\u003e **遇到「上传失败」？**\n\u003e - 检查 USB 线是否支持数据传输（有些线只能充电）。\n\u003e - 在 VS Code 底部状态栏点「端口」，确认已正确识别 ESP32 的 COM 口。\n\u003e - 部分 ESP32 开发板需要在上传时**按住 BOOT 按钮**，直到出现上传进度条后松开。\n\n---\n\n## 第五步：使用控制面板\n\n### 5.1 连接 WiFi\n\n1. 将 ESP32 上电（可以用充电宝供电，也可以直接从 USB 供电）。\n2. 用手机打开 WiFi 设置，找到 `FSD-Controller`（或你修改的名字），输入密码连接。\n3. 连接后，手机浏览器访问 `9.9.9.9`。\n\n### 5.2 控制面板说明\n\n**基础设置**\n\n| 设置项 | 说明 |\n|--------|------|\n| **FSD 开关** | 总开关，关闭后设备不修改任何 CAN 报文 |\n| **硬件版本** | 对应你的车辆硬件，与第 3.2 步一致（可运行时切换，无需重新烧录）|\n| **速度模式** | 控制 FSD 行驶激进程度，见下方速度模式说明 |\n| **模式来源** | 「自动（拨杆）」= 用跟车距离拨杆控制速度模式；「手动」= 用上面的下拉菜单固定 |\n| **限速提示音抑制** | 关闭 ISA 限速提示音（仅 HW4 有效）|\n| **紧急车辆检测** | 启用紧急车辆靠近检测（仅 HW4 FSD V14 有效）|\n| **强制激活** | 适用于「交通灯和停车标志控制」功能在车机 UI 中被隐藏的地区（中国、日本等）。这些地区的触发条件永远不满足，设备完全无反应。开启后强制绕过此判断，直接激活 FSD。 |\n| **AP 自动恢复** | 踩刹车退出 AP 后自动重新激活自动驾驶 |\n| **赛道模式** | HW3 专属，解锁高性能驾驶模式（实验性）|\n| **WiFi 设置** | 修改热点名称（SSID）和密码，点「保存并重启」后设备重启并以新名称/密码创建热点 |\n\n**HW3 速度偏移**\n\n| 设置项 | 说明 |\n|--------|------|\n| **手动偏移** | 限速 × 百分比 的加速比例，例：限速 60 km/h + 偏移 25% → 实际目标 75 km/h |\n| **智能速度偏移** | 按车速自动调整：限速越低偏移越大、限速越高偏移越小，共 5 档（阈值/百分比可自定义）|\n| **≥80 km/h 让原车** | v1.4.17 新增，默认开启；限速 ≥80 km/h 时跳过 mux-2 覆盖，交还 Tesla 原生 EAP 拨杆偏移（+5/+10…）|\n\n**在线 OTA**（v1.4.16+）\n\n| 功能 | 说明 |\n|------|------|\n| **检查更新** | 从 GitHub Releases 拉取最新 tag，对比当前固件版本（需设备能访问 `api.github.com`）|\n| **立即更新** | 直接下载匹配本板子的 `_ota.bin`，写入并重启 |\n| **本地上传** | 也可手动选文件上传 `_ota.bin`（适用于离线环境）|\n\n**扩展页面**\n\n| 页面 | 路径 | 说明 |\n|------|------|------|\n| **车机 UI** | `/car` | 大字号车内显示，同时包含性能测试（0–100 km/h / 100–0 km/h 测试）|\n| **仪表盘** | `/dash` | 速度、电池、扭矩等实时仪表 |\n| **日志** | `/log` | SPIFFS 存储的诊断日志（持久，约 96 KB 循环）|\n| **DNS 过滤** | `/dns`（仅 Wi-Fi 桥接版）| 车机域名拦截配置 |\n\n### 5.3 速度模式对照表\n\n| 设置值 | HW3 显示 | HW4 显示 |\n|--------|---------|---------|\n| 保守 | ❄️ Chill | ❄️ Chill |\n| 默认 | 🟢 Normal | 🟢 Normal |\n| 适中 | ⚡ Hurry | ⚡ Hurry |\n| 激进 | — | 🔥 Max（最快）|\n| 最大 | — | 🐢 Sloth（最慢）|\n\n\u003e 跟车距离拨杆和速度模式的关系：拨杆数字越小 = 越激进；拨杆数字越大 = 越保守。\n\n### 5.4 状态监控\n\n控制面板下方的状态卡片实时显示：\n- **已修改**：本次启动共修改了多少个 CAN 帧（大于 0 说明工作正常）\n- **已接收**：收到的 CAN 帧总数\n- **错误**：CAN 总线错误计数（正常应为 0）\n- **运行时间**：ESP32 已运行时长\n- **CAN 总线**：显示「正常」说明已成功接入车辆 CAN 总线\n- **FSD 已触发**：显示「是」说明 FSD 已被激活\n\n---\n\n## 第六步：无线更新固件（OTA）\n\n修改代码后不需要再插 USB，有**两种方式**更新：\n\n### 方式一：在线自动拉取（推荐，v1.4.16+）\n\n适合使用官方发布版本的普通用户。需要设备能访问互联网（常见做法是通过手机热点或家里 Wi-Fi 作为 STA 连出）。\n\n1. 在控制面板「**在线更新 (从 GitHub)**」卡片中点「**检查更新**」。\n2. 设备查询 `api.github.com/repos/wjsall/tesla-fsd-controller/releases/latest`，显示最新版本号。\n3. 如有新版，点「**立即更新**」。设备自动下载对应 env 的 `_ota.bin`、校验、写入并重启。\n4. 版本比对逻辑：仅当远端 tag 严格大于当前固件版本时允许升级；资产按 `\u003cenv\u003e_v\u003cver\u003e_ota.bin` 命名匹配本板子。\n\n### 方式二：本地上传（开发者 / 离线场景）\n\n1. 在 VS Code 中修改代码并编译（点「Build」）。\n2. 编译完成后，项目根目录会自动生成匹配该 env 的 **`\u003cenv\u003e_v\u003cver\u003e_ota.bin`**（例：`esp32s3_waveshare_v1.4.25_ota.bin`）。\n3. 在控制面板底部「**本地上传**」区域点「选择文件」，选刚才那个 **`_ota.bin`** 文件。\n4. 点「上传固件」，等待进度条完成，设备会自动重启。\n\n\u003e ⚠️ **OTA 必须使用 `_ota.bin` 文件**，不能用合并固件（`\u003cenv\u003e_v\u003cver\u003e.bin`）。合并固件包含 bootloader，OTA 会报 \"Wrong Magic Byte\" 错误。\n\u003e\n\u003e ⚠️ **切换 env 不能走 OTA**：从 esp32 切到 esp32s3_waveshare（或单 CAN 切双 CAN、Wi-Fi 变体）分区布局不同，必须用 USB Web Flasher 重新烧合并固件。\n\n---\n\n## 常见问题\n\n**Q：连上 WiFi 后浏览器打不开 9.9.9.9？**\n\u003e 部分手机在连接无网络的 WiFi 时会自动断开，在手机 WiFi 设置中找到该热点，关闭「自动切换更优网络」或「智能 WiFi」选项。\n\n**Q：CAN 总线显示「异常」？**\n\u003e 检查 CANH/CANL 接线是否正确，确认车辆已上电（至少开到「待机」状态）。CAN 总线只有在车辆通电后才有信号。\n\n**Q：FSD 已触发显示「否」？**\n\u003e 确认车机「控制 → 自动辅助驾驶」中已开启「交通灯和停车标志控制」，这是 FSD 触发的条件。\n\n**Q：需要拆掉 CAN 模块上的 120Ω 终端电阻吗？**\n\u003e Tesla CAN 总线两端已有内置终端电阻，模块上如果再叠加一个会并联成 60Ω，导致信号失真、TEC 爆表持续 bus-off（`bus-off TEC=128 REC=0` 错误就是这症状），**必须确保模块的 120Ω 电阻断开**。\n\u003e - **Waveshare ESP32-S3-RS485-CAN**：⚠️ 板上 120Ω 跳线**默认短接在 `ON`**，收到板子后找到 CAN 端子附近的 **120R** 跳线，把跳线帽**拔下改插到 `NC`** 位置（仅保留在 NC 一侧，或完全拔掉）。这是最容易被漏掉的一步。\n\u003e - **SN65HVD230 模块**：芯片本身不带终端电阻，但部分厂商的模块会在 PCB 上额外加一颗，通过跳线或焊桥控制。收到模块后翻到背面检查 **120R** 标注旁的跳线帽或焊桥，如果已连通需要断开（拔掉跳线帽，或用刀片划断焊桥）。\n\u003e - **MCP2515 蓝色模块**：**必须拆掉**板上的 R1/R2 电阻或切断 J1 跳线。\n\n**Q：「已修改」帧数一直是 0，设备没有反应？（中国、日本等地区）**\n\u003e 开启控制面板中的「**强制激活**」。中国、日本等地区的车机 UI 中没有「交通灯和停车标志控制」选项，该功能被区域限制隐藏，导致设备的触发条件（`UI_fsdStopsControlEnabled` bit）永远为 0，mod 永远不触发。开启强制激活后会绕过此判断，直接激活 FSD。\n\n**Q：设备工作了但 FSD 还是用不了？**\n\u003e 检查 Tesla 账号是否有有效的 FSD 授权（购买或订阅）。设备只处理 CAN 层面，不能绕过 Tesla 服务器的授权验证。\n\n**Q：速度模式设置后没有效果？**\n\u003e 确认「模式来源」设置为「手动」，否则会被拨杆位置覆盖。\n\n**Q：烧录时报错「A fatal error occurred: Failed to connect to ESP32」？**\n\u003e 烧录时按住开发板上的「BOOT」按钮，看到上传进度条出现后松开。\n\n---\n\n## 项目结构（供开发者参考）\n\n整个项目是**单翻译单元架构**：所有模块都以 header 的形式被 `main.cpp` 通过 `handlers.h` 引入，不额外新增 `.cpp` 源文件。\n\n```\nsrc/\n  main.cpp              ← 入口：WiFi AP + Web 服务器 + CAN 任务（双核）\n\ninclude/\n  version.h             ← 固件版本号 + 变体标签\n  handlers.h            ← CAN 报文统一分发（Legacy / HW3 / HW4 + 遥测）\n  fsd_config.h          ← FSDConfig 运行时配置结构（跨核共享状态）\n  can_helpers.h         ← 位操作 / 校验和工具\n  can_frame_types.h     ← CAN 帧数据结构\n\n  # CAN 注入 / 遥测模块\n  mod_fsd.h             ← FSD 注入（Legacy 0x3EE / HW3·HW4 0x3FD）\n  mod_bms.h             ← 电池包电压 / 电流 / SOC / 温度\n  mod_telemetry.h       ← 车速 / 挡位 / 扭矩 / 刹车\n  mod_climate.h         ← 车内外温度（BODY_R1）\n  mod_lighting.h        ← 大灯自适应 / 远光\n  mod_das_status.h      ← DAS 状态 / 限速 / AP / 变道 / FCW\n  mod_perf.h            ← 0–100 km/h 加速 / 100–0 km/h 制动测试\n  mod_ota.h             ← 在线 OTA（GitHub Releases API）\n  mod_log.h             ← SPIFFS 循环诊断日志\n\n  # Wi-Fi 桥接变体专属（esp32_wifi / esp32s3_waveshare_wifi）\n  mod_wifi_bridge.h     ← STA↔AP 桥接 + NAT\n  mod_dns.h             ← 车机 DNS 过滤与拦截\n  mod_thermal.h         ← S3 内部温度监控\n  lwip_hooks.h          ← lwIP IP-forward 钩子（DNS 路由）\n\n  # Web UI（均为 PROGMEM 字符串，编译期压缩）\n  web_ui.h              ← 手机 / 桌面浏览器主界面\n  web_ui_car.h          ← 车机大字号界面（/car）\n  web_ui_dash.h         ← 实时仪表盘（/dash）\n  web_perf.h            ← 独立性能测试页（/perf）\n  web_ui_gz.h           ← 构建脚本自动生成的 gzip 资产\n\n  drivers/\n    can_driver.h        ← 驱动抽象基类\n    twai_driver.h       ← ESP32 TWAI（内置 CAN）\n\nplatformio.ini          ← 4 个 env：esp32 / esp32s3_waveshare /\n                         esp32_wifi / esp32s3_waveshare_wifi\n```\n\n---\n\n## 💰 支持项目\n\n如果这个项目对你有帮助，欢迎打赏支持，让开发工作持续更新！\n\n| 微信打赏 | 支付宝打赏 |\n|---------|---------|\n| ![微信打赏码](https://raw.githubusercontent.com/wjsall/teslamate-chinese-dashboards/main/images/wechat-donate.jpg) | ![支付宝打赏码](https://raw.githubusercontent.com/wjsall/teslamate-chinese-dashboards/main/images/alipay-donate.jpg) |\n\n**您的支持是我持续更新的动力！** ❤️\n\n---\n\n## Credits\n\n本项目基于以下开源项目开发。核心 CAN 报文处理逻辑直接源自 ev-open-can-tools，其他几项作为信号定义、bit 位置和功能扩展的交叉参考：\n\n| 项目 | 用途 | 链接 | 许可证 |\n|------|------|------|--------|\n| ev-open-can-tools | 上游主项目，CAN 帧注入核心逻辑 | [github.com/ev-open-can-tools/ev-open-can-tools](https://github.com/ev-open-can-tools/ev-open-can-tools)（原 tesla-open-can-mod，已迁出 GitLab） | GPLv3 |\n| ev-open-can-tools-plugins | 功能扩展插件库（v1.4.32 起 HW4 offset 上限、TLSSC 旁路依据） | [github.com/ev-open-can-tools/ev-open-can-tools-plugins](https://github.com/ev-open-can-tools/ev-open-can-tools-plugins) | GPLv3 |\n| opendbc | 权威 Tesla DBC 信号定义（bit 位置、width、factor、checksum） | [github.com/commaai/opendbc](https://github.com/commaai/opendbc) | MIT |\n| flipper-tesla-fsd | Flipper Zero 版 FSD 注入实现，bit 提取/checksum 交叉验证 | [github.com/hypery11/flipper-tesla-fsd](https://github.com/hypery11/flipper-tesla-fsd) | GPLv3 |\n\n---\n\n## 许可证\n\nGPLv3 — 基于 [ev-open-can-tools](https://github.com/ev-open-can-tools/ev-open-can-tools)（原 tesla-open-can-mod）（GPLv3）开发。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwjsall%2Ftesla-fsd-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwjsall%2Ftesla-fsd-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwjsall%2Ftesla-fsd-controller/lists"}