English | 中文
自 2026 年 3 月 31 日晚 9 时左右,Tesla 向中国国内车辆远程下发了底层配置,从芯片层面禁用了 FSD 相关功能。CAN 总线层面的修改已无法绕过此限制,本项目对中国国内车辆不再有效。
注意:封禁期间 FSD 账号授权不受影响,已购买或订阅的 FSD 资格仍然保留,仅本 mod 失效。
海外车辆暂不受影响。本项目代码保留供学习、研究及海外用户使用。
基于 tesla-open-can-mod 的 ESP32 + WiFi 控制面板版本。
烧录后,ESP32 会创建一个 WiFi 热点,手机连上就能用浏览器实时控制所有参数,无需重新编程。
使用预编译固件,全程用浏览器完成,5 分钟搞定。
每个板子有两个固件文件,用途不同:
xxx_v1.4.21.bin(合并固件)→ 首次刷机用,通过 ESP Web Flasher 写入,地址0x0xxx_v1.4.21_ota.bin(OTA 固件)→ 后续无线升级用,通过控制面板「固件更新」上传;或让设备从 GitHub 在线自动拉取完整最新资产见 releases 页面。以下为 v1.4.21 直链:
| 板子 / 变体 | 首次刷机 | OTA 升级 | 适用场景 |
|---|---|---|---|
| 标准 ESP32 + SN65HVD230 | esp32_v1.4.21.bin | ota | 入门,5V USB 供电 |
| Waveshare ESP32-S3-RS485-CAN | esp32s3_waveshare_v1.4.21.bin | ota | 车内永久安装,7–36V 宽压 |
| ESP32 Wi-Fi 桥接 | esp32_wifi_v1.4.21.bin | ota | 给车机提供 Wi-Fi 上行 + DNS 过滤 |
| Waveshare ESP32-S3 Wi-Fi 桥接 | esp32s3_waveshare_wifi_v1.4.21.bin | ota | 车内安装 + Wi-Fi 桥接 |
变体说明:
- CAN 控制器:所有固件都接入车辆一路 CAN(X179 或 X652),完成 FSD 注入与遥测。
- Wi-Fi 桥接:ESP32 作为 STA 连上行 Wi-Fi,并以 AP 方式向车机输出带 DNS 过滤/域名拦截的网络。非必需功能,按需选择。
- 用 Chrome 或 Edge 打开 ESP Web Flasher
- 板子通过 Type-C 连接电脑 → 点击「Connect」选择串口
- 点「Add File」选择刚下载的固件,地址填
0x0 - 点「Program」等待完成
- 连接 WiFi 热点
FSD-Controller(密码12345678),浏览器访问9.9.9.9
⚠️ Safari 不支持 WebUSB,请使用 Chrome 或 Edge。Waveshare ESP32-S3 进入烧录模式: 按住板子上的 BOOT 键不松,按一下 RST 键后松开,再松开 BOOT 键,然后点击 Connect 并在弹出窗口中选择端口。烧录完成后板子会自动重启。
- 仅限已购买 FSD 的车辆 — 本设备只是解锁 CAN 总线层面的限制,Tesla 服务器端必须有有效的 FSD 授权,否则不生效。
- 风险自担 — CAN 总线直接连接车辆关键系统,发送错误报文可能导致不可预期的行为或电子部件损坏。本项目仅供学习和测试用途,作者不承担任何因使用本项目造成的车辆损坏、人身伤害或其他损失。
- 保修失效 — 对车辆 CAN 总线进行改装可能导致 Tesla 官方保修失效,风险由使用者自行承担,作者对此不承担任何责任。
- 遵守当地法律法规 — 在公共道路上使用辅助驾驶功能须符合你所在地区的交通法规。部分功能在特定地区可能存在法律限制,请在使用前自行了解并遵守当地相关法律,作者不对任何法律后果负责。
- 交通事故免责 — 使用本设备期间发生的任何交通事故,包括但不限于车辆碰撞、财产损失、人身伤亡,责任由驾驶员本人承担,作者及项目贡献者不承担任何连带责任。驾驶时请始终保持专注,手握方向盘,随时准备接管车辆。
- 不适用于公共道路测试 — 初次使用请在私有场地进行,确认功能正常后再上路。
以下材料在淘宝/京东均可购买,搜索括号内的关键词即可。
| 材料 | 说明 | 参考价 |
|---|---|---|
| ESP32 开发板 | 搜「ESP32-DevKitC」或「ESP32 38Pin 开发板」 | ¥20–35 |
| SN65HVD230 模块 | 搜「SN65HVD230 CAN 模块 3.3V」,注意买 3.3V 版本 | ¥5–15 |
| 杜邦线(母对母) | 搜「杜邦线 母对母 20cm」,买一包备用 | ¥5 |
| USB 数据线 | Micro-USB 或 Type-C,取决于你的 ESP32 型号,用于烧录 | 通常自备 |
为什么选 ESP32? 内置 WiFi 和原生 CAN(TWAI)控制器,无需额外芯片,成本最低。
| 材料 | 说明 | 参考价 |
|---|---|---|
| Waveshare ESP32-S3-RS485-CAN | 淘宝购买链接,CAN 收发器已集成,导轨安装外壳 | ¥99 |
| Type-C 数据线 | 烧录或 USB-C 车内供电时使用 | 通常自备 |
为什么选这个板? 支持两种供电方式:直接接车内 12V(7–36V 宽压端子供电,无需降压模块)或 USB-C 供电。CAN 收发器已集成(TJA1051T),端子排螺丝接线(无需杜邦线),DIN 导轨外壳适合车内隐蔽安装。120Ω 终端电阻默认未接入,无需处理。
🚫 禁止使用 OBD2 接口:OBD2 诊断口连接的是诊断 CAN 总线,经过车辆网关 ECU 隔离,修改后的报文永远无法到达 Autopilot 电脑,设备将完全无效。必须直接接车辆内部 CAN 总线(X179 / X652 连接器)。
⚠️ 以下接线位置仅适用于 Model 3 / Model Y,已经过社区验证。Model S、Model X、Model 3 Highland、Model Y Juniper、Cybertruck 等其他车型的连接器位置不同,请勿照搬,必须自行查阅 Tesla 官方服务手册。
- Model 3 / Model Y(2021 及以后):推荐接 X179 连接器,Pin 13(CAN-H)/ Pin 14(CAN-L)
- Model 3(2020 及以前旧款):推荐接 X652 连接器,Pin 1(CAN-H)/ Pin 2(CAN-L)
不确定时请先查阅 Tesla 服务手册,切勿盲目拆车接线。
Model 3 / Model Y 2021 及以后(X179):
ESP32 GPIO 5 → SN65HVD230 TX(有的板子标 CTX/D)
ESP32 GPIO 4 → SN65HVD230 RX(有的板子标 CRX/R)
ESP32 3.3V → SN65HVD230 VCC
ESP32 GND → SN65HVD230 GND
SN65HVD230 CANH → 车辆 CAN-H(通常为白色/棕色线)
SN65HVD230 CANL → 车辆 CAN-L(通常为蓝色/绿色线)
接线极为简单,只需 4 根线,全部拧螺丝端子:
车辆 12V(保险丝盒 ACC 路)→ 板子左侧端子 VCC+
车辆 GND → 板子左侧端子 GND
车辆 CAN-H(X179 Pin 13) → 板子右侧端子 CAN H
车辆 CAN-L(X179 Pin 14) → 板子右侧端子 CAN L
- 无需 SN65HVD230 模块,CAN 收发器已集成(TJA1051T)
- 无需处理终端电阻,120Ω 默认未接入
- 无需 USB 常供电,可直接接车内 12V(ACC 路,随车熄火断电)
- 打开 https://code.visualstudio.com,点击下载并安装。
- 安装完成后打开 VS Code。
- 点击 VS Code 左侧的「扩展」图标(四个方块的图标)。
- 搜索
PlatformIO IDE,点击「安装」。 - 安装完成后,VS Code 底部状态栏会出现一个小房子图标,表示 PlatformIO 已就绪(可能需要重启 VS Code)。
安装很慢? PlatformIO 第一次启动会下载 ESP32 工具链,大约 200–500 MB,请耐心等待,保持网络畅通。
- 点击本页面右上角的绿色「Code」按钮,选择「Download ZIP」。
- 解压到任意文件夹,例如
D:\tesla-fsd。 - 打开 VS Code,点击菜单「文件 → 打开文件夹」,选择刚才解压的文件夹。
- VS Code 右下角可能会弹出「是否信任此文件夹」,点击「是,我信任作者」。
烧录前无需改任何代码。WiFi 名称/密码和硬件版本均可在烧录后通过 Web 面板修改,设置自动保存。
推荐方式(烧录后在 Web 面板修改):
- 烧录完成后,用手机连上默认热点
FSD-Controller,密码12345678。 - 浏览器访问
9.9.9.9,在「WiFi 设置」卡片中填入新名称和新密码。 - 点「保存并重启」,设备重启后用新名称/密码重连即可。
也可以烧录前在代码中修改初始默认值:
打开文件 src/main.cpp,找到第 20–21 行:
static char apSSID[33] = "FSD-Controller";
static char apPass[64] = "12345678";将引号内的内容改成你自己的名称和密码(密码至少 8 位),烧录后直接生效。
不需要改代码。 烧录完成后,在 Web 控制面板的「硬件版本」下拉菜单中选择即可,设置会自动保存,断电后也不丢失。
烧录前先确认你的版本,以便连上面板后能立刻选对:
| 车机显示 | 软件版本 | FSD 版本 | 控制面板选择 |
|---|---|---|---|
| HW4.x | 2026.2.9.x 或更新 | V14 | HW4 |
| HW4.x | 2026.8.x 或更旧 | V13 | HW3 |
| HW3.x | 任意 | — | HW3 |
| HW2.5 或更早 | 任意 | — | LEGACY |
⚠️ HW4 硬件 + V13 固件必须选HW3:HW4 模式专为 FSD V14 设计,在 V13 固件上会导致功能不稳定(时好时坏)。在车机「控制 → 软件」中查看软件版本号来判断。
如何判断 HW2.5 还是 HW3? 在车机「软件」→「额外车辆信息」中查看:有「全自动驾驶计算机」字样 → HW3;没有 → HW2.5,选
LEGACY。2019 年中后期起大多数车辆为 HW3,但同年也存在 HW2.5,需以车机实际显示为准。
用 USB 线将 ESP32 连接到电脑。
- 点击 VS Code 底部状态栏左侧的「✓ Build」按钮先编译,确认没有错误。
- 编译成功后,点击旁边的「→ Upload」按钮开始烧录。
- 烧录成功后,终端会显示
success。
遇到「上传失败」?
- 检查 USB 线是否支持数据传输(有些线只能充电)。
- 在 VS Code 底部状态栏点「端口」,确认已正确识别 ESP32 的 COM 口。
- 部分 ESP32 开发板需要在上传时按住 BOOT 按钮,直到出现上传进度条后松开。
- 将 ESP32 上电(可以用充电宝供电,也可以直接从 USB 供电)。
- 用手机打开 WiFi 设置,找到
FSD-Controller(或你修改的名字),输入密码连接。 - 连接后,手机浏览器访问
9.9.9.9。
基础设置
| 设置项 | 说明 |
|---|---|
| FSD 开关 | 总开关,关闭后设备不修改任何 CAN 报文 |
| 硬件版本 | 对应你的车辆硬件,与第 3.2 步一致(可运行时切换,无需重新烧录) |
| 速度模式 | 控制 FSD 行驶激进程度,见下方速度模式说明 |
| 模式来源 | 「自动(拨杆)」= 用跟车距离拨杆控制速度模式;「手动」= 用上面的下拉菜单固定 |
| 限速提示音抑制 | 关闭 ISA 限速提示音(仅 HW4 有效) |
| 紧急车辆检测 | 启用紧急车辆靠近检测(仅 HW4 FSD V14 有效) |
| 强制激活 | 适用于「交通灯和停车标志控制」功能在车机 UI 中被隐藏的地区(中国、日本等)。这些地区的触发条件永远不满足,设备完全无反应。开启后强制绕过此判断,直接激活 FSD。 |
| AP 自动恢复 | 踩刹车退出 AP 后自动重新激活自动驾驶 |
| 赛道模式 | HW3 专属,解锁高性能驾驶模式(实验性) |
| WiFi 设置 | 修改热点名称(SSID)和密码,点「保存并重启」后设备重启并以新名称/密码创建热点 |
HW3 速度偏移
| 设置项 | 说明 |
|---|---|
| 手动偏移 | 限速 × 百分比 的加速比例,例:限速 60 km/h + 偏移 25% → 实际目标 75 km/h |
| 智能速度偏移 | 按车速自动调整:限速越低偏移越大、限速越高偏移越小,共 5 档(阈值/百分比可自定义) |
| ≥80 km/h 让原车 | v1.4.17 新增,默认开启;限速 ≥80 km/h 时跳过 mux-2 覆盖,交还 Tesla 原生 EAP 拨杆偏移(+5/+10…) |
在线 OTA(v1.4.16+)
| 功能 | 说明 |
|---|---|
| 检查更新 | 从 GitHub Releases 拉取最新 tag,对比当前固件版本(需设备能访问 api.github.com) |
| 立即更新 | 直接下载匹配本板子的 _ota.bin,写入并重启 |
| 本地上传 | 也可手动选文件上传 _ota.bin(适用于离线环境) |
扩展页面
| 页面 | 路径 | 说明 |
|---|---|---|
| 车机 UI | /car |
大字号车内显示,同时包含性能测试(0–100 km/h / 100–0 km/h 测试) |
| 仪表盘 | /dash |
速度、电池、扭矩等实时仪表 |
| 日志 | /log |
SPIFFS 存储的诊断日志(持久,约 96 KB 循环) |
| DNS 过滤 | /dns(仅 Wi-Fi 桥接版) |
车机域名拦截配置 |
| 设置值 | HW3 显示 | HW4 显示 |
|---|---|---|
| 保守 | ❄️ Chill | ❄️ Chill |
| 默认 | 🟢 Normal | 🟢 Normal |
| 适中 | ⚡ Hurry | ⚡ Hurry |
| 激进 | — | 🔥 Max(最快) |
| 最大 | — | 🐢 Sloth(最慢) |
跟车距离拨杆和速度模式的关系:拨杆数字越小 = 越激进;拨杆数字越大 = 越保守。
控制面板下方的状态卡片实时显示:
- 已修改:本次启动共修改了多少个 CAN 帧(大于 0 说明工作正常)
- 已接收:收到的 CAN 帧总数
- 错误:CAN 总线错误计数(正常应为 0)
- 运行时间:ESP32 已运行时长
- CAN 总线:显示「正常」说明已成功接入车辆 CAN 总线
- FSD 已触发:显示「是」说明 FSD 已被激活
修改代码后不需要再插 USB,有两种方式更新:
适合使用官方发布版本的普通用户。需要设备能访问互联网(常见做法是通过手机热点或家里 Wi-Fi 作为 STA 连出)。
- 在控制面板「在线更新 (从 GitHub)」卡片中点「检查更新」。
- 设备查询
api.github.com/repos/wjsall/tesla-fsd-controller/releases/latest,显示最新版本号。 - 如有新版,点「立即更新」。设备自动下载对应 env 的
_ota.bin、校验、写入并重启。 - 版本比对逻辑:仅当远端 tag 严格大于当前固件版本时允许升级;资产按
<env>_v<ver>_ota.bin命名匹配本板子。
- 在 VS Code 中修改代码并编译(点「Build」)。
- 编译完成后,项目根目录会自动生成匹配该 env 的
<env>_v<ver>_ota.bin(例:esp32s3_waveshare_v1.4.21_ota.bin)。 - 在控制面板底部「本地上传」区域点「选择文件」,选刚才那个
_ota.bin文件。 - 点「上传固件」,等待进度条完成,设备会自动重启。
⚠️ OTA 必须使用_ota.bin文件,不能用合并固件(<env>_v<ver>.bin)。合并固件包含 bootloader,OTA 会报 "Wrong Magic Byte" 错误。
⚠️ 切换 env 不能走 OTA:从 esp32 切到 esp32s3_waveshare(或单 CAN 切双 CAN、Wi-Fi 变体)分区布局不同,必须用 USB Web Flasher 重新烧合并固件。
Q:连上 WiFi 后浏览器打不开 9.9.9.9?
部分手机在连接无网络的 WiFi 时会自动断开,在手机 WiFi 设置中找到该热点,关闭「自动切换更优网络」或「智能 WiFi」选项。
Q:CAN 总线显示「异常」?
检查 CANH/CANL 接线是否正确,确认车辆已上电(至少开到「待机」状态)。CAN 总线只有在车辆通电后才有信号。
Q:FSD 已触发显示「否」?
确认车机「控制 → 自动辅助驾驶」中已开启「交通灯和停车标志控制」,这是 FSD 触发的条件。
Q:需要拆掉 CAN 模块上的 120Ω 终端电阻吗?
Tesla CAN 总线两端已有内置终端电阻,模块上如果再叠加一个会导致信号失真和通信失败,必须确保模块的 120Ω 电阻断开。
- SN65HVD230 模块:芯片本身不带终端电阻,但部分厂商的模块会在 PCB 上额外加一颗,通过跳线或焊桥控制。收到模块后翻到背面检查 120R 标注旁的跳线帽或焊桥,如果已连通需要断开(拔掉跳线帽,或用刀片划断焊桥)。
- MCP2515 蓝色模块:必须拆掉板上的 R1/R2 电阻或切断 J1 跳线。
Q:「已修改」帧数一直是 0,设备没有反应?(中国、日本等地区)
开启控制面板中的「强制激活」。中国、日本等地区的车机 UI 中没有「交通灯和停车标志控制」选项,该功能被区域限制隐藏,导致设备的触发条件(
UI_fsdStopsControlEnabledbit)永远为 0,mod 永远不触发。开启强制激活后会绕过此判断,直接激活 FSD。
Q:设备工作了但 FSD 还是用不了?
检查 Tesla 账号是否有有效的 FSD 授权(购买或订阅)。设备只处理 CAN 层面,不能绕过 Tesla 服务器的授权验证。
Q:速度模式设置后没有效果?
确认「模式来源」设置为「手动」,否则会被拨杆位置覆盖。
Q:烧录时报错「A fatal error occurred: Failed to connect to ESP32」?
烧录时按住开发板上的「BOOT」按钮,看到上传进度条出现后松开。
整个项目是单翻译单元架构:所有模块都以 header 的形式被 main.cpp 通过 handlers.h 引入,不额外新增 .cpp 源文件。
src/
main.cpp ← 入口:WiFi AP + Web 服务器 + CAN 任务(双核)
include/
version.h ← 固件版本号 + 变体标签
handlers.h ← CAN 报文统一分发(Legacy / HW3 / HW4 + 遥测)
fsd_config.h ← FSDConfig 运行时配置结构(跨核共享状态)
can_helpers.h ← 位操作 / 校验和工具
can_frame_types.h ← CAN 帧数据结构
# CAN 注入 / 遥测模块
mod_fsd.h ← FSD 注入(Legacy 0x3EE / HW3·HW4 0x3FD)
mod_bms.h ← 电池包电压 / 电流 / SOC / 温度
mod_telemetry.h ← 车速 / 挡位 / 扭矩 / 刹车
mod_climate.h ← 车内外温度(BODY_R1)
mod_lighting.h ← 大灯自适应 / 远光
mod_das_status.h ← DAS 状态 / 限速 / AP / 变道 / FCW
mod_perf.h ← 0–100 km/h 加速 / 100–0 km/h 制动测试
mod_ota.h ← 在线 OTA(GitHub Releases API)
mod_log.h ← SPIFFS 循环诊断日志
# Wi-Fi 桥接变体专属(esp32_wifi / esp32s3_waveshare_wifi)
mod_wifi_bridge.h ← STA↔AP 桥接 + NAT
mod_dns.h ← 车机 DNS 过滤与拦截
mod_thermal.h ← S3 内部温度监控
lwip_hooks.h ← lwIP IP-forward 钩子(DNS 路由)
# Web UI(均为 PROGMEM 字符串,编译期压缩)
web_ui.h ← 手机 / 桌面浏览器主界面
web_ui_car.h ← 车机大字号界面(/car)
web_ui_dash.h ← 实时仪表盘(/dash)
web_perf.h ← 独立性能测试页(/perf)
web_ui_gz.h ← 构建脚本自动生成的 gzip 资产
drivers/
can_driver.h ← 驱动抽象基类
twai_driver.h ← ESP32 TWAI(内置 CAN)
platformio.ini ← 4 个 env:esp32 / esp32s3_waveshare /
esp32_wifi / esp32s3_waveshare_wifi
如果这个项目对你有帮助,欢迎打赏支持,让开发工作持续更新!
| 微信打赏 | 支付宝打赏 |
|---|---|
![]() |
![]() |
您的支持是我持续更新的动力! ❤️
本项目基于以下开源项目开发,核心 CAN 报文处理逻辑直接来源于原项目:
| 项目 | 链接 | 许可证 |
|---|---|---|
| tesla-open-can-mod | gitlab.com/Tesla-OPEN-CAN-MOD/tesla-open-can-mod | GPLv3 |
GPLv3 — 基于 tesla-open-can-mod(GPLv3)开发。



