herrfrei Multi-ESP32 Port
🔧 Multi-ESP32ESP32-S2/S3/C3/PICO + MCP2515. Anti-price-gouging stance against €500 resellers.
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
enablePrintistrue.
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_STBYis 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
- 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 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
- Connect the board via USB.
- Select the correct board and port under Tools.
- 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.
- Original repository: gitlab.com/Starmixcraft/tesla-fsd-can-mod
- License: GNU General Public License v3.0 (see source file header)
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.