Flash tesla-key-esp32
Install the firmware straight from your browser — no toolchain, no command line. Use Chrome or Edge on desktop.
Plug in your ESP32 board over USB first — the installer auto-detects the chip (ESP32, ESP32-S3, ESP32-C3 or ESP32-C6).
How it works
- Plug your ESP32 board into a USB port. If the board has two USB sockets (many DevKits do — one wired to the chip, one to a UART bridge), use the socket labelled USB/native, not UART/COM.
- Tap Install firmware and pick the port that names the chip itself —
e.g.
USB JTAG_serial debug unitorESP32-S3. Then close the dialog when flashing finishes. - The device reboots and opens a
tesla-key-esp32-setupWiFi network. Configure WiFi there (see below) — the browser does not set WiFi. - After it joins your WiFi, reach it at
http://tesla-key-esp32.localto pair with your car.
“Installation failed”? Pick the other serial port. A board that exposes a
USB-to-UART bridge (CH340/CH343/CP210x/FTDI) alongside the chip's own USB shows up
as two ports, and the bridge is not reliably flashable from the browser —
it fails with Failed to connect with the device or
Serial data stream stopped: Possible serial noise or corruption,
sometimes only part-way through. Re-run the installer and choose the chip's native
USB port. If the board has no native USB port at all (e.g. a classic ESP32 on a
CH340), flash it from a host instead:
esptool --chip <target> -p <port> write_flash "@flash_args".
Future updates are over-the-air — no USB needed. On
http://tesla-key-esp32.local, tap the firmware version (top line) to
check for a new release; if one is available, confirm and the device updates itself
and reboots, preserving WiFi, VIN and key. This USB install is only needed once
to move a device onto the OTA-capable partition layout — it does a full erase, so you
re-enter WiFi/VIN and re-pair this one time.
WiFi setup via captive portal (the only WiFi path — also sets the VIN):
after flashing, the device opens a tesla-key-esp32-setup network. Join it
from a phone (incl. iPhone) and the setup form pops up automatically — enter your
WiFi and the VIN there. The device then reboots and joins your network.
This page always serves the latest CI build — it is rebuilt and
deployed automatically on every firmware change, and each change also publishes a
GitHub release
for manual flashing. The flasher reads the per-target parts for the detected chip —
bootloader-<target>.bin, partition-table-<target>.bin and
the app (tesla-key-esp32.bin, or -s3/-c3/-c6
for the other chips) — listed per chipFamily in
manifest.json. Flashing the app/bootloader/partition table
separately keeps the nvs partition intact, so updates preserve WiFi,
VIN and key.