CAN Detective
CAN bus sniffer on any ESP32-S3 · browser app over Bluetooth
Hook the device to the car's CAN bus, open the app — and see every frame by ID with what changes highlighted. Press a button in the car — the app shows which bit stands for it. Know the rpm on the tacho — it finds where and at what scale it sits in the frames. Finds get names and go to charts; you can send your own frames and let a mechanic watch the bus over the internet.
The app runs in Chrome and Edge on a computer and Android (iPhone has no Web Bluetooth) and installs as its own icon.
What it does
Monitor and “noise”
A row per ID: data, period, count, decoded signals. “Remember noise” sends everything that changes by itself to the background — after an action in the car only what it changed lights up.
Recording with markers
Hold “Marker” while you hold the button in the car — recording analysis finds the bits that behave the same, with a match score; counters and noise are filtered out.
Value search
“Engine at 850 rpm” → candidates among bytes and byte pairs at common scales → narrow down with “went up / down / unchanged”.
Charts and signals
Any find goes to a chart, live or from a recording with markers, and into a library with name, units and scale per car profile. Comparing two recordings — for states.
Sending frames
Single and periodic frames (the device keeps the timing), resend from history. Silent mode by default: the device only listens and leaves the bus alone.
Remote access
A mechanic in the garage sees the bus over the internet: monitor, charts, recording and analysis. Sending — only if you allow it.
What to build it on
- Any ESP32-S3 board — one firmware for all (4–32 MB flash, with or without PSRAM): the firmware detects the chip and closes the pins it uses.
- A 3.3 V CAN transceiver: SN65HVD230, TJA1051T/3, MCP2562 (VIO = 3.3 V). Pins are set in the app, GPIO 4 and 5 by default.
- 5 V power from USB or from the car via a buck converter; ground shared with the car.
- 120 Ω terminator — only if the device sits at the end of the line; on a car it is usually not needed. For a bench check no transceiver is needed at all: self-test mode.
| Board | Transceiver | Note |
|---|---|---|
| GPIO 4 | TXD / D | CAN TX, changeable in the app |
| GPIO 5 | RXD / R | CAN RX, changeable in the app |
| 3V3 | VCC | 3.3 V transceiver |
| GND | GND | common ground |
| — | CANH / CANL | to the car bus |
Flashing over USB
Flash the board over a cable right from the browser — for a new board or when the device does not answer over Bluetooth. Any ESP32-S3 works: the firmware detects the memory type itself.
Connect the board with a USB cable (either socket on two-port boards) and press the button. If the board is not found, hold BOOT, press RESET and release BOOT.
Flashing over USB erases the whole flash: settings and password. The licence comes back by itself when the app connects with internet.
After flashing, connect the device over Bluetooth on the main screen and set a password.
Trial and purchase
Without a licence — trial mode: 5 minutes of work, then a 15-minute break, as many times as you like (internet required). The trial has the monitor, trace and sending; analysis, recordings, value search and charts need a purchased device.
- 1Flash the board over USB on this page and connect it in the app over Bluetooth.
- 2In the app open “Licence” and send a request — the board's MAC is filled in for you.
- 3Once approved, the licence reaches the device by itself on the next connection.
A purchased device needs no internet: the licence lives in the device, and the app opens with no network.
Licence and request