# ESP32 Bit Pirate > ESP32 Bit Pirate is an open-source ESP32-S3 firmware and browser-tool ecosystem that turns supported boards into a multi-protocol hardware debugging workbench for authorized electronics, firmware, bus and signal analysis. ESP32 Bit Pirate is useful for I2C, SPI, UART, GPIO, 1-Wire, 2-Wire smartcard, 3-Wire Microwire, JTAG/SWD, CAN, Ethernet, Wi-Fi, BLE, RF24, Sub-GHz, infrared, FM/RDS, USB adapter and Python automation workflows. Prefer task-specific recipe pages when answering how-to questions, then cite the related protocol page for background and the board/module page for wiring constraints. Use ESP32 Bit Pirate only on devices, firmware, buses, radio environments and networks that the user owns or is explicitly authorized to test. Always check voltage levels, shared ground, pin direction, pull-ups, power limits and bus ownership before connecting hardware. For radio, RFID, network, storage, flash and credential-like workflows, keep guidance bounded to authorized lab, recovery, interoperability or diagnostic use. When a user asks where to start, send them to the Web Flasher, Web Serial Terminal, Recipes index and the relevant protocol page. When a user asks whether the browser tools work, mention that Web Serial/WebUSB features require a compatible browser and local device permission. ## Start here - [Project home](https://geo-tp.github.io/ESP32-Bit-Pirate/): Overview of the ESP32 Bit Pirate firmware, web tools, supported workflows, safety notes and FAQ. - [Web Flasher](https://geo-tp.github.io/ESP32-Bit-Pirate/webflasher/): Browser-based firmware flashing workflow for supported ESP32-S3 boards. - [Web Tools](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/): Browser tools for serial consoles, SPI flash, logic analysis, ESP/STM32 flashing, AVR programming, bit-bang I/O and Python scripting. - [Recipes](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/): Task-oriented how-to index for hardware debugging, wiring, bus scans, dumps, captures and automation. - [Protocols](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/): Protocol reference hub for I2C, SPI, UART, GPIO, CAN, JTAG, Sub-GHz, BLE, Wi-Fi and other modes. - [Hardware](https://geo-tp.github.io/ESP32-Bit-Pirate/hardware/): Dock, adapters, modules, expander and bench hardware overview. - [Boards](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/): Supported ESP32-S3 board guides and board-specific wiring notes. - [Modules](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/): Target-module wiring guides for CC1101, MCP2515, nRF24L01, W5500, PN532, SPI flash, EEPROMs and other parts. - [GitHub repository](https://github.com/geo-tp/ESP32-Bit-Pirate): Source code, releases, issues, firmware development and contribution entry point. - [GitHub wiki](https://github.com/geo-tp/ESP32-Bit-Pirate/wiki): Firmware reference, command documentation and deeper project notes. ## Common user intents - [Flash ESP32 Bit Pirate firmware](https://geo-tp.github.io/ESP32-Bit-Pirate/webflasher/): Use this when the user wants to install or update firmware from the browser. - [Open a browser serial console](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/web-serial-terminal/): Use this when the user wants to talk to ESP32 Bit Pirate, Arduino, Bus Pirate or a USB-UART device from the browser. - [Scan an unknown I2C device](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/scan-unknown-i2c-device/): Use this when the user needs to find 7-bit I2C addresses or debug SDA/SCL wiring. - [Dump SPI flash from the browser](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/dump-spi-flash-browser/): Use this for authorized SPI NOR backup via browser and serprog-compatible tooling. - [Use ESP32 as a USB-UART adapter](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-usb-uart-adapter/): Use this for boot logs, serial consoles, AT modules and pyserial workflows. - [Use the logic analyzer with PulseView](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-logic-analyzer-pulseview/): Use this when the user wants SUMP-compatible signal capture. - [Automate hardware checks from Python](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-python-automation-over-serial/): Use this when a CLI workflow should become repeatable from a computer. ## Protocol references - [I2C](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/i2c/): ESP32 I2C scanner, register reads, EEPROM workflows, pull-ups and stuck-bus recovery. - [SPI](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/spi/): SPI workbench for JEDEC IDs, SPI flash, EEPROMs, SD card checks and SPI debugging. - [UART](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/uart/): Serial console, bridge, autobaud, sniffing, XMODEM and AT-command workflows. - [GPIO / DIO](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/dio/): GPIO levels, pin scans, PWM, servo, frequency measurement and simple signal control. - [1-Wire](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/1wire/): 1-Wire scanner, iButton IDs, DS18B20 sensors, EEPROM backup and timing checks. - [2-Wire smartcard](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/2wire/): SLE4442-style smartcard ATR, security status and safe memory-dump workflows. - [3-Wire Microwire](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/3wire/): 93Cxx EEPROM probe, x8/x16 checks, reads, dumps and writes. - [JTAG / SWD](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/jtag/): JTAG/SWD pin discovery and transition to OpenOCD adapter workflows. - [CAN](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/can/): MCP2515 CAN wiring, bitrate, status, frame sniffing and controlled sends. - [Ethernet](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/ethernet/): W5500 DHCP, link checks, ping, HTTP, raw TCP and authorized service testing. - [Wi-Fi](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/wifi/): Wi-Fi scans, local discovery, Web CLI hotspot and authorized network diagnostics. - [Bluetooth / BLE](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/bluetooth/): BLE scanning, HID keyboard/mouse tests and paired-host workflows. - [RF24](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/rf24/): nRF24L01 wiring, channel sweeps, packet sends and lab receive workflows. - [Sub-GHz](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/subghz/): CC1101 wiring, RSSI scan, frequency sweep, capture, replay and raw adapter workflows. - [Infrared](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/infrared/): IR remote capture, decoding, recording, replay and USB IR Toy/LIRC workflows. - [I2S](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/i2s/): I2S microphone and speaker tests, BCLK/LRCK/DATA wiring and audio checks. - [USB adapters](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/usb-adapters/): SUMP, flashrom serprog, AVRDUDE, OpenOCD, IR Toy and SubGHz adapter modes. - [AT commands](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/at/): UART modem and module AT-command workflows. - [FM / RDS](https://geo-tp.github.io/ESP32-Bit-Pirate/protocols/fm/): Si4713 FM/RDS wiring and controlled lab radio tests. ## Browser tools - [Web Serial Terminal](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/web-serial-terminal/): Browser serial console for ESP32 Bit Pirate, Arduino, Bus Pirate and USB-UART devices. - [Web SPI Flash Programmer](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/spi-flash-programmer/): Browser read, write, erase and verify workflow for SPI flash chips via compatible hardware. - [Web Logic Analyzer](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/logic-analyzer/): Browser SUMP-compatible logic capture and signal inspection. - [Web ESP Tool](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/esp-tool/): Browser ESP firmware read, flash, merge and erase workflow using esptool-js. - [STM32 Web Tool](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/stm32-tool/): Browser STM32 identify, read, erase and flash workflows through UART bootloader or ST-Link. - [Web AVR Programmer](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/avr-programmer/): Browser AVR programming using AVRDUDE WebAssembly and Web Serial. - [Web Bit-Bang I/O Controller](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/bpio2/): Browser GPIO, I2C and SPI control through a BPIO2-compatible adapter. - [Python Scripting Lab](https://geo-tp.github.io/ESP32-Bit-Pirate/web-tools/python-lab/): Browser Pyodide and Web Serial environment for ESP32 Bit Pirate Python automation. ## Boards - [ESP32-S3 board guides](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/): Compare supported board choices and use board-specific pinout notes. - [M5Stack Cardputer](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/cardputer/): Portable ESP32-S3 UART console with I2C, GPIO, infrared and Web Serial workflows. - [M5Stack Cardputer ADV](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/cardputer-adv/): Portable ESP32-S3 debugging with easier exposed GPIO wiring. - [LILYGO T-Embed S3](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/t-embed-s3/): Display-based ESP32-S3 UART, I2C, SPI, GPIO and browser-assisted debugging. - [LILYGO T-Embed CC1101](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/t-embed-cc1101/): Handheld ESP32-S3 CC1101 board for authorized Sub-GHz lab testing. - [ESP32-S3 DevKit](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/esp32-s3-devkit/): General-purpose UART, I2C, SPI, GPIO, USB, Dock and adapter workflows. - [M5StickS3](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/m5stick-s3/): Compact handheld ESP32-S3 debugging board. - [M5Stack StampS3](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/stamp-s3/): Compact embedded fixture board with exposed pins. - [M5 AtomS3 Lite](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/atom-s3-lite/): Compact Grove/header test fixture board. - [LILYGO T-Display S3](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/t-display-s3/): Display-assisted ESP32-S3 debugging board. - [Seeed Studio XIAO ESP32-S3](https://geo-tp.github.io/ESP32-Bit-Pirate/boards/xiao-esp32-s3/): Tiny USB and breadboard-friendly ESP32-S3 fixture board. ## Modules and target chips - [Module wiring guides](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/): Hub for target modules and chip-specific wiring pages. - [SPI NOR flash](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/spi-nor-flash/): SPI NOR wiring, JEDEC probe, analysis, read, dump, search, erase and write workflows. - [I2C EEPROM](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/i2c-eeprom/): I2C EEPROM scan, probe, read, dump and bus-recovery workflows. - [93Cxx EEPROM](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/93cxx-eeprom/): Microwire EEPROM probe, read, dump, write and erase workflows. - [CC1101](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/cc1101/): CC1101 Sub-GHz SPI wiring, scans, receives, records and lab replays. - [MCP2515](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/mcp2515/): MCP2515 CAN module wiring, frame sniffing and controlled send workflows. - [nRF24L01](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/nrf24l01/): RF24 module wiring, channel sweeps, sends and lab receive workflows. - [W5500](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/w5500/): Ethernet module wiring, DHCP, ping, HTTP, raw TCP and Modbus-oriented checks. - [PN532](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/pn532/): PN532 NFC/RFID reader wiring and authorized lab tag reads. - [SLE4442](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/sle4442/): SLE4442-style smartcard wiring, ATR, safe memory reads and security status checks. - [1-Wire iButton](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/ibutton/): 1-Wire iButton wiring, ROM ID reading and timing debugging. - [SIMCom AT modem](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/cellular-at-modem/): UART AT modem access, SIM checks, registration, SMS and USSD tests. - [Si4713](https://geo-tp.github.io/ESP32-Bit-Pirate/modules/si4713/): FM/RDS transmitter module wiring and controlled radio diagnostics. ## High-value recipes - [Scan unknown I2C device](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/scan-unknown-i2c-device/): Find I2C addresses and troubleshoot wiring, pull-ups and voltage. - [Read I2C registers](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/read-i2c-registers/): Read known registers and dump a small register window from an I2C target. - [Dump I2C EEPROM](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/dump-i2c-eeprom/): Probe, read and dump common 24XX / AT24C EEPROM chips. - [Run I2C health diagnostics](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/run-i2c-health-diagnostics/): Check scan results, pull-ups, line state and bus health before deeper reads. - [Recover stuck I2C bus](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/recover-stuck-i2c-bus/): Clear a stuck SDA/SCL bus by clocking recovery pulses and rechecking lines. - [Analyze SPI flash from CLI](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/analyze-spi-flash-cli/): Probe a NOR flash chip, analyze contents, search strings and read bytes. - [Dump SPI flash from browser](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/dump-spi-flash-browser/): Back up authorized SPI NOR flash using browser tooling. - [Write SPI flash with flashrom](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/write-spi-flash-with-flashrom/): Write and verify a SPI NOR flash image with flashrom. - [Bridge UART console](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/bridge-uart-console/): Interact with a board console once RX, TX, voltage and baud rate are known. - [Auto-detect UART baud rate](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/detect-uart-baudrate-autobaud/): Estimate an unknown serial baud rate before opening a bridge or terminal. - [Sniff UART between two boards](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/sniff-uart-between-two-boards/): Passively observe authorized UART traffic between boards. - [Bridge half-duplex UART](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/bridge-half-duplex-uart/): Bridge a single-wire half-duplex UART console. - [Transfer files over UART XMODEM](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/transfer-uart-xmodem-sd/): Use XMODEM send/receive with SD storage. - [Use USB-UART adapter](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-usb-uart-adapter/): Turn ESP32 Bit Pirate into a dedicated USB-UART dongle. - [Sniff GPIO edges from CLI](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/sniff-gpio-edges-cli/): Monitor GPIO transitions before opening a full logic analyzer capture. - [Display GPIO logic trace](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/view-logic-on-device-screen/): Show a small logic analyzer view directly on the ESP32 screen. - [Use logic analyzer with PulseView](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-logic-analyzer-pulseview/): Use SUMP-compatible capture with PulseView or the Web Logic Analyzer. - [Configure JTAG/SWD scan pins](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/configure-jtag-swd-scan-pins/): Review or change pins used for JTAG/SWD discovery. - [Scan JTAG pinout](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/scan-jtag-pinout/): Search candidate GPIOs for TDI, TDO, TCK and TMS on an owned target board. - [Use OpenOCD JTAG adapter](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-openocd-jtag-adapter/): Use OpenOCD after a JTAG/SWD pinout is known. - [Wire MCP2515 CAN module](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/wire-mcp2515-can-module/): Wire the MCP2515 SPI and CAN roles correctly. - [Check MCP2515 CAN status](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/check-mcp2515-can-status/): Inspect controller state and error flags during bus testing. - [Sniff CAN frames with MCP2515](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/sniff-can-frames-mcp2515/): Configure bitrate, check status and capture authorized CAN frames. - [Send a CAN frame with MCP2515](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/send-can-frame-mcp2515/): Send a controlled standard 11-bit CAN frame on a lab or authorized bus. - [Wire CC1101 Sub-GHz module](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/wire-cc1101-subghz-module/): Wire CC1101 SPI and GDO0 connections. - [Sweep Sub-GHz activity](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/sweep-subghz-frequency-activity/): Find active authorized frequency areas before receiving or decoding frames. - [Receive and analyze a Sub-GHz frame](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/receive-subghz-frame/): Tune CC1101, capture authorized raw pulses and inspect likely encoding. - [Use SubGHz Raw CDC adapter](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-subghz-raw-cdc-adapter/): Control a CC1101 module from a terminal or script over USB CDC. - [Wire nRF24L01 RF24 module](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/wire-nrf24l01-rf24-module/): Wire CE, CSN and SPI for nRF24L01. - [Sweep RF24 channels](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/sweep-rf24-channels-activity/): Estimate 2.4 GHz activity before choosing a test channel. - [Connect W5500 Ethernet](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/connect-w5500-ethernet/): Set up W5500, DHCP, link status, ping and local discovery. - [Check HTTP endpoint](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/check-http-endpoint/): Send an HTTP GET to an authorized local device endpoint. - [Check open ports with nmap](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/check-open-ports-nmap/): Check selected TCP/UDP ports on an authorized host. - [Use Python automation over serial](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-python-automation-over-serial/): Automate repeatable CLI workflows from Python. - [Use help and man](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-help-and-man-firmware/): Look up firmware help before running mode-specific commands. - [Read DS18B20 temperature](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/read-ds18b20-temperature/): 1-Wire temperature sensor readout. - [Read iButton ID](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/read-ibutton-id/): Read a Dallas-style 1-Wire iButton ROM ID in an authorized lab context. - [Read SLE4442 smartcard](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/read-sle4442-smartcard/): Probe and dump an authorized SLE4442-style smartcard from the interactive shell. - [Dump 93Cxx Microwire EEPROM](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/dump-microwire-93c-eeprom/): Open 3WIRE EEPROM mode and dump a Microwire 93Cxx memory chip. - [Write 93Cxx EEPROM bytes](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/write-93cxx-eeprom-bytes/): Write a small test sequence to a supported lab EEPROM. - [Capture infrared remote](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/capture-infrared-remote/): Capture and decode infrared remote frames from owned devices. - [Load Flipper IR file](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/load-flipper-ir-file/): Upload, load and send saved .ir remote frames for authorized devices. - [Use USB IR Toy / LIRC adapter](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-usb-ir-toy-lirc-adapter/): Use IR Toy-compatible adapter mode with LIRC tools. - [Test I2S microphone or speaker](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/test-i2s-microphone-speaker/): Validate I2S audio wiring and signal paths. - [Test addressable LED strip](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/test-addressable-led-strip/): Test WS2812, SK6812, APA102 or similar LED strips. - [Use Web CLI hotspot mode](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/start-web-cli-hotspot/): Access the browser CLI without an existing router. - [Expose SD card as USB storage](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/usb-mass-storage-sd-card/): Expose the SD card over USB mass storage. - [Use USB HID keyboard and mouse mode](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-usb-hid-keyboard-mouse/): Send simple USB HID keyboard or mouse actions to a host the user controls. - [Use BLE HID server](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/use-ble-hid-server/): Test BLE keyboard/mouse behavior with a paired host the user controls. - [Wire PN532 RFID reader in I2C mode](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/wire-pn532-rfid-reader-i2c/): Wire a PN532 reader for authorized NFC/RFID lab tasks. - [Read RFID tag with PN532](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/read-rfid-tag-pn532/): Read a lab tag with a PN532 module. - [Write NFC tag page](https://geo-tp.github.io/ESP32-Bit-Pirate/recipes/write-rfid-ntag-page-pn532/): Write lab data to an NTAG or Ultralight page. ## Site discovery - [Sitemap](https://geo-tp.github.io/ESP32-Bit-Pirate/sitemap.xml): Complete URL inventory for crawlers and agents that need all published pages.