Projects / mert574 ESP32-C3 (HW4 Focus)

mert574 ESP32-C3 (HW4 Focus)

🎯 HW4

ESP32-C3 Super Mini + MCP2515. Best docs for HW4 with SPI diagnostics and Discord community.

🔗 View on GitHub
🔧 ESP32-C3 Super Mini + MCP2515 📱 HW3 + HW4 ✅ Active 📄 34 files 🕐 Updated Apr 2, 2026

Community Discord:

https://discord.gg/ZTQKAUTd2F

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 enablePrint is true.

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 HW3 from 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

  1. Open File → Preferences.
  2. In Additional Board Manager URLs, add:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    
  3. Go to Tools → Board → Boards Manager, search for esp32 by Espressif, and install it.
  4. Select ESP32C3 Dev Module as the board.

3. Install Required Library

Install via Sketch → Include Library → Manage Libraries:

  • autowp-mcp2515 by autowp

4. Flash

  1. Connect the ESP32-C3 via USB-C.
  2. Select the correct port under Tools.
  3. 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), change MCP_8MHZ to MCP_16MHZ on the setBitrate line in setup().

License

This project is licensed under the GNU General Public License v3.0 — see the GPL-3.0 License for details.