Projects / herrfrei Multi-ESP32 Port

herrfrei Multi-ESP32 Port

🔧 Multi-ESP32

ESP32-S2/S3/C3/PICO + MCP2515. Anti-price-gouging stance against €500 resellers.

🔗 View on GitHub
🔧 ESP32-S2/S3/C3/PICO + MCP2515 📱 HW3 + HW4 ✅ Active 📄 4 files 🕐 Updated Mar 29, 2026

CanFeather – Tesla FSD CAN Bus Enabler

This is an unofficial port. The original firmware was created by Starmixcraft and is hosted at
gitlab.com/Starmixcraft/tesla-fsd-can-mod.
All intellectual property, original design, and CAN message research belong to the original author.
This repository only adds support for additional ESP32 hardware targets (S2, S3, C3, PICO) and documents wiring options.
If you find this project useful, please star and follow the original repository.


Why is this public? Some sellers — such as Michal Gapinski — charge up to 500 € for a solution like this. In our opinion, that is massively overpriced. The board costs around 20 €, and even with labor factored in, a fair price is no more than 50 €. This project exists so nobody has to overpay.

What It Does

This firmware runs on an ESP32-S2, S3, C3, or PICO paired with an MCP2515-based CAN module and intercepts specific CAN bus messages on a Tesla vehicle to enable and configure Full Self-Driving (FSD) functionality.

It listens for autopilot-related CAN frames on the vehicle's CAN bus and checks whether "Traffic Light and Stop Sign Control" is enabled in the vehicle's Autopilot settings. When this setting is turned on, the chip treats it as the trigger to enable Full Self-Driving by modifying the relevant bits in the CAN frame and re-transmitting it onto the bus. It also reads the follow-distance stalk setting and maps it to a speed profile.

Supported Hardware Variants

The firmware supports three Tesla hardware generations, selected at compile time via the #define HW directive:

Define Target Listens on CAN IDs Notes
LEGACY HW3 Retrofit 1006 Sets FSD enable bit and speed profile
HW3 HW3 vehicles 1016, 1021 Adds speed-offset control via follow-distance
HW4 HW4 vehicles 1016, 1021 Extended speed-profile range (5 levels)

HW4 applies from firmware version 2026.2.3 onward (FSDV14). For earlier HW4 vehicles compile with HW3.

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 scroll-wheel offset or follow-distance setting.
  • Nag suppression — clears the hands-on-wheel nag bit.
  • Debug output is printed over Serial at 115200 baud when enablePrint is true.

Hardware Requirements

Any ESP32 board + an MCP2515 CAN module. Pins are selected automatically at compile time based on the target chip (see CONNECTION.md for full wiring diagrams).

Supported ESP32 Targets

Chip Arduino Board SPI pins (SCK/MISO/MOSI)
ESP32-S2 ESP32S2 Dev Module 36 / 37 / 35
ESP32-S3 ESP32S3 Dev Module 36 / 37 / 35
ESP32-C3 ESP32C3 Dev Module 4 / 5 / 6
ESP32 / PICO-D4 / PICO-V3 ESP32 Dev Module 18 / 19 / 23 (VSPI)

CAN Module — MCP25625 vs MCP2515

The MCP25625 integrates the MCP2515 controller and MCP2551 transceiver in one chip. You can replace it with any standard MCP2515 breakout module:

Module Transceiver Voltage Notes
MCP2515 + TJA1050 TJA1050 5 V Most common cheap module — works out of the box
MCP2515 + MCP2551 MCP2551 5 V Original pairing
MCP2515 + SN65HVD230 SN65HVD230 3.3 V Best choice for ESP32 — no level shifter needed

Using a plain MCP2515 module:

  • CAN_STBY is not present — leave the pin unconnected, no code change needed
  • Many modules include an onboard 3.3 V regulator; check your module's datasheet before connecting to 3.3 V GPIO lines
  • Remove the 120 Ω termination resistor on the module — the Tesla CAN bus is already terminated

Installation

1. Install the Arduino IDE

Download from https://www.arduino.cc/en/software.

2. Add the 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 the board matching your chip under Tools → Board:
Chip Board to select
ESP32-S2 ESP32S2 Dev Module
ESP32-S3 ESP32S3 Dev Module
ESP32-C3 ESP32C3 Dev Module
ESP32 / PICO ESP32 Dev Module

3. Install Required Libraries

Install via Sketch → Include Library → Manage Libraries…:

  • MCP2515 by autowp — CAN controller driver (mcp2515.h)

4. Select Your Hardware Target

Near the top of CanFeather.ino, change the HW define to match your vehicle:

#define HW HW3  // Change to LEGACY, HW3, or HW4

5. Upload

  1. Connect the board via USB.
  2. Select the correct board and port under Tools.
  3. Click Upload.

6. Wiring

The recommended connection point is the X179 connector:

Pin Signal
13 CAN-H
14 CAN-L

Connect the board's CAN-H and CAN-L lines to pins 13 and 14 on the X179 connector.

Important: Cut the onboard 120 Ω termination resistor on the CAN module. The vehicle's CAN bus already has its own termination, and adding a second resistor will cause communication errors.

Serial Monitor

Open the Serial Monitor at 115200 baud to see live debug output showing FSD state and the active speed profile. Disable logging by setting enablePrint = false.


Credits & Copyright

The original firmware, CAN message research, and core logic are the work of Starmixcraft.

This port makes no claim of authorship over the original work. Changes made here are limited to:

  • Multi-chip ESP32 pin configuration (S2, S3, C3, PICO)
  • Wiring documentation for additional hardware

All copyright remains with the original author. Please respect the GPL-3.0 license terms when distributing or modifying this code.