mert574 ESP32-C3 (HW4 Focus)
🎯 HW4ESP32-C3 Super Mini + MCP2515. Best docs for HW4 with SPI diagnostics and Discord community.
Community Discord:
Warning
This project is for testing and educational purposes only. Sending incorrect CAN bus messages to your vehicle can cause unexpected behavior, disable safety-critical systems, or permanently damage electronic components. The CAN bus controls everything from braking and steering to airbags — a malformed message can have serious consequences. If you don't fully understand what you're doing, do not install this on your car.
Disclaimer
Use this project at your own risk. This project is intended for testing purposes only and for use on private property. Modifying CAN bus messages on a vehicle can lead to unexpected or dangerous behavior.
The authors accept no responsibility for any damage to your vehicle, injury, or legal consequences resulting from the use of this software. This project may void your vehicle warranty and may not comply with road safety regulations in your jurisdiction.
For any use beyond private testing, you are responsible for complying with all applicable local laws and regulations. Always keep your hands on the wheel and stay attentive while driving.
CanFeather – Tesla FSD CAN Bus Enabler
Why is this public? Some sellers charge up to 500 € for a solution like this. In our opinion, that is massively overpriced. The components cost around 20 €, and even with labor factored in, a fair price is no more than 50 €. This project exists so nobody has to overpay.
This is a fork of the original project targeting HW4 vehicles using an ESP32-C3 Super Mini + MCP2515 CAN module.
Prerequisites
Warning: Any attempt to bypass the purchase or subscription requirement for Full Self-Driving (FSD) will result in a permanent ban from Tesla services. FSD must be properly purchased or subscribed to.
You must have an active FSD package on the vehicle — either purchased or subscribed. This firmware enables FSD functionality at the CAN bus level, but the vehicle still needs a valid FSD entitlement from Tesla.
If FSD subscriptions are not available in your region, see the FSD Subscription Guide for a step-by-step walkthrough on subscribing via a Canadian account (~60 EUR/month).
What It Does
Intercepts specific CAN bus messages and re-transmits them with modified bits to enable and configure Full Self-Driving (FSD).
- Listens for Autopilot-related CAN frames
- Checks if "Traffic Light and Stop Sign Control" is enabled in Autopilot settings and uses this as a trigger for FSD
- Sets the FSD enable bit, emergency vehicle detection bit, and suppresses the hands-on-wheel nag
- Maps follow-distance stalk setting to a speed profile
HW4 CAN Message Details
| CAN ID | Hex | Name | Direction | Mux | Action |
|---|---|---|---|---|---|
| 1016 | 0x3F8 | UI_driverAssistControl | Read only | — | Read follow-distance setting → map to speed profile (5 levels) |
| 1021 | 0x3FD | UI_autopilotControl | Read + Modify | 0 | Read FSD state from UI; set bit 46 (FSD enable); set bit 59 (emergency vehicle detection); set bit 60 (FSD V14) |
| 1021 | 0x3FD | UI_autopilotControl | Read + Modify | 1 | Clear bit 19 (nag suppression); set bit 47 |
| 1021 | 0x3FD | UI_autopilotControl | Read + Modify | 2 | Write speed profile to bits 4–6 of byte 7 |
Signal names sourced from tesla-can-explorer by @mikegapinski.
Key Behaviour
- FSD enable bit is set when "Traffic Light and Stop Sign Control" is enabled in the vehicle's Autopilot settings.
- Speed profile is derived from the follow-distance stalk setting.
- Nag suppression — clears the hands-on-wheel nag bit.
- Debug output is printed over Serial at 115200 baud when
enablePrintistrue.
Note: HW4 vehicles on firmware 2026.2.9.X are on FSD V14. Versions on the 2026.8.X branch are still on FSD V13. If your vehicle is running FSD V13, this fork will not work correctly — use
HW3from the upstream project instead.
Check your hardware version under Controls → Software → Additional Vehicle Information on the touchscreen.
Speed Profiles (HW4)
| Follow Distance | Profile |
|---|---|
| 1 | Max |
| 2 | Hurry |
| 3 | Normal |
| 4 | Chill |
| 5 | Sloth |
Hardware Requirements
- ESP32-C3 Super Mini
- MCP2515 CAN module (MCP2515 + TJA1050, 8MHz crystal)
- 4-channel 3.3V↔5V level shifter (SPI lines between ESP32-C3 and MCP2515)
- Tesla CAN adapter cable (Tesla proprietary connector → OBD2) or Enhance Auto Tesla Gen 2 Cable
- 12V→5V buck converter to power the ESP32-C3
Important: Remove the J1 jumper (120Ω termination) on the MCP2515 module before connecting to the vehicle. The vehicle's CAN bus already has its own termination.
Wiring
ESP32-C3 Super Mini ↔ MCP2515 Module
| MCP2515 | Level Shifter HV | Level Shifter LV | ESP32-C3 |
|---|---|---|---|
| VCC | — | — | 5V |
| GND | — | — | G |
| CS | HV1 | LV1 | GPIO7 |
| MOSI | HV2 | LV2 | GPIO6 |
| MISO | HV3 | LV3 | GPIO5 |
| SCK | HV4 | LV4 | GPIO4 |
Level shifter power: LV → 3.3V pin, HV → 5V pin, GND → G.
Vehicle CAN Bus Connection
The X179 connector is located in the passenger side footwell, behind the trim panel. See the Wiring Guide for photos and detailed instructions.
Option A — Enhance Auto Tesla Gen 2 Cable (~30 EUR)
The cleanest option. Plugs directly into the X179 connector and provides both CAN bus data and 12V power through a single cable. No cutting or splicing needed.
| Wire | Signal | Connect to |
|---|---|---|
| Red | 12V+ | Buck converter IN+ |
| Black | GND | Buck converter IN− |
| Black with stripe | CAN-H | MCP2515 CAN-H |
| Black solid | CAN-L | MCP2515 CAN-L |
Option B — Tesla CAN Adapter Cable (~10 EUR)
A Tesla-to-OBD2 adapter cable. Cut off the OBD2 plug and identify the CAN-H (OBD2 pin 6) and CAN-L (OBD2 pin 14) wires using a multimeter. Power must be sourced separately.
Power
| Source | Destination |
|---|---|
| 12V from cable (Option A) or footwell switched wire (Option B) | Buck converter IN+ |
| GND | Buck converter IN− |
| Buck converter OUT (5V) | ESP32-C3 USB-C |
Installation
1. Install Arduino IDE
Download from arduino.cc/en/software.
2. Add ESP32 Board Package
- Open File → Preferences.
- In Additional Board Manager URLs, add:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Go to Tools → Board → Boards Manager, search for esp32 by Espressif, and install it.
- Select ESP32C3 Dev Module as the board.
3. Install Required Library
Install via Sketch → Include Library → Manage Libraries:
- autowp-mcp2515 by autowp
4. Flash
- Connect the ESP32-C3 via USB-C.
- Select the correct port under Tools.
- Click Upload.
If the board is not detected, hold the BOOT button while connecting USB, then retry.
5. Verify
Open Serial Monitor at 115200 baud. On boot you should see:
MCP2515 ready @ 500k
While driving with FSD active, you will see live debug output. Disable logging by setting enablePrint = false.
Crystal frequency: The firmware is configured for an 8MHz crystal (
MCP_8MHZ). If your MCP2515 module has a 16MHz crystal (check the small silver cylinder on the board), changeMCP_8MHZtoMCP_16MHZon thesetBitrateline insetup().
License
This project is licensed under the GNU General Public License v3.0 — see the GPL-3.0 License for details.