⚡ ESP32 · S3 · C3 · C6 Firmware

Flash tesla-key-esp32

Install the firmware straight from your browser — no toolchain, no command line. Use Chrome or Edge on desktop.

Your browser does not support Web Serial — use desktop Chrome or Edge. Serial access was not granted.

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

  1. 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.
  2. Tap Install firmware and pick the port that names the chip itself — e.g. USB JTAG_serial debug unit or ESP32-S3. Then close the dialog when flashing finishes.
  3. The device reboots and opens a tesla-key-esp32-setup WiFi network. Configure WiFi there (see below) — the browser does not set WiFi.
  4. After it joins your WiFi, reach it at http://tesla-key-esp32.local to 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.