project // hardware

ESP32 DIV 2.1

ESP32-S3 WiFi BLE sub-GHz 2.4GHz NRF24 CC1101 PlatformIO ESP32-S3 working
educational purposes only. wireless regulations vary by country. only test on hardware and networks you own or have explicit permission to test.

The ESP32 DIV v2.1 is an open-source multi-band wireless testing toolkit by CiferTech, built around the ESP32-S3. It supports WiFi, BLE, 2.4GHz and Sub-GHz frequencies — designed for wireless testing, signal analysis, jamming research and protocol exploration. The v2.1 is modular — a stable core board with a stackable shield via pogo-pin headers, keeping the device thin and expandable.

MCUESP32-S3 — fixes pin conflicts from v1, improved USB support
displayILI9341 TFT 2.8" + XPT2046 touch controller
powerIP5306 — battery charging + boost converter
USBCP2102 USB-to-Serial for flashing
storageMicroSD card slot — logs, scripts, firmware
2.4GHz3× NRF24 modules via SPI
sub-GHzCC1101 module via SPI
LEDs4× WS2812 NeoPixels
buttons5× tactile switches via PCF8574 I2C expander at 0x27
expansionPogo-pin headers — clean shield stacking
firmwareHaleHound-DIV custom port — PlatformIO, ESP32-S3, portrait 240×320

WiFi

Packet Monitor — real-time waterfall, channel hop 1–13 Beacon Spammer — 15 rotating fake SSIDs, randomised MAC Deauther — broadcast deauth, target from scan list Probe Sniffer — log probed SSIDs + RSSI per client MAC WiFi Scanner — scan → deauth or clone to captive portal Captive Portal — rogue AP + DNS, credential logging to SD Station Scanner — promiscuous data frame client harvester Auth Flood — random MAC auth storm, equaliser visualiser

Bluetooth (BLE)

BLE Jammer — flood all advertising channels BLE Spoofer — scan + clone target advert payload BLE Beacon — Apple AirDrop / FindMy beacon broadcast BLE Sniffer — continuous scan, dedup by MAC, RSSI + count AirTag Detect — FindMy manufacturer data scanner + distance estimate WhisperPair — CVE-2025-36911 Fast Pair GATT probe BLE Rubber Ducky — stub (requires BLEHIDDevice lib)

2.4GHz (NRF24 ×3)

Scanner — 126-channel sweep, bar graph activity display Spectrum Analyser — waterfall alias of scanner WLAN Jammer — WiFi ch 1/6/11 + BLE advert + Zigbee Proto Kill — target WiFi / BLE / Zigbee / broadband sweep

Sub-GHz (CC1101)

Replay Attack — GDO2 raw capture → retransmit via GDO0 Brute Force — 24-bit rolling code exhaustion, 315 / 433 MHz Jammer — noise burst, freq sweep across 315 / 433 / 868 / 915 Spectrum Analyser — 300–930 MHz sweep, peak-hold display Saved Profiles — SD card .bin replay library

EAPOL / WPA

EAPOL Capture — deauth-triggered 4-way handshake grab Save to SD — captured handshakes stored to /eapol/ Browse Saves — on-device capture review Karma Attack — probe sniffer → auto-spawn matching rogue AP

Firmware / Hardware

Custom PlatformIO port — HaleHound-DIV (ESP32-S3 target) PCF8574 button driver — confirmed I2C addr 0x27 on M5Shark V2.0 SPI bus arbitration — display / NRF24 ×3 / CC1101 / SD Splash screen — segfault.solutions logo, 240×320 portrait RGB565 PROGMEM, 10s display with NeoPixel cyan glow Background image — splash renders as menu background, transparent item overlay Radio test — boot-time verification of all radios + SD SD logging — creds, EAPOL captures, SubGHz profiles

Custom firmware ported from HaleHound-CYD to the ESP32-DIV v2.1 (ESP32-S3). Touch input replaced with PCF8574 GPIO expander at confirmed I2C address 0x27 (M5Shark V2.0 specific — not 0x20 as documented). Display running in portrait 240×320 (rotation=2). SPI bus arbitrated across the display (HSPI dedicated), 3× NRF24 modules, CC1101, and SD card. Boot splash displays for 10 seconds with NeoPixel cyan glow, then serves as the menu background image with transparent item overlay.

targetESP32-S3huge_app partition scheme, no PSRAM
buildpio run -e esp32s3-div --target upload
displaySCK=36 MOSI=35 MISO=37 CS=17 DC=16 BL=7 — portrait 240×320, HSPI dedicated
buttonsPCF8574 at 0x27 — SDA=8 SCL=9 — UP=P7 / DOWN=P5 / LEFT=P3(BACK) / RIGHT=P4 / CENTER=P6(SELECT)
NRF24 #1CSN=4 CE=15
NRF24 #2CSN=48 CE=47
NRF24 #3CSN=21 CE=14
CC1101CS=5 GDO0=6 GDO2=3 — spi symbol renamed in libdep to avoid TFT_eSPI collision
SDCS=10 Detect=38
IR TXGPIO14 — shared with NRF24 #3 CE, mutex required · raw replay via IRremoteESP8266
IR RXGPIO21 — shared with NRF24 #3 CSN · raw capture · NRF24 #3 CSN held HIGH during capture
NeoPixelGPIO1 — cyan glow on splash, status indicators
splashsegfault.solutions logo — 240×320 portrait RGB565 PROGMEM, also used as menu background
peripheral signal gpio notes
displaySCK36HSPI dedicated
displayMOSI35
displayMISO37
displayCS17
displayDC16
displayBL7
buttonsSDA8PCF8574 @ 0x27
buttonsSCL9UP=P7 DOWN=P5 LEFT=P3 RIGHT=P4 CENTER=P6
NRF24 #1CSN4
NRF24 #1CE15
NRF24 #2CSN48
NRF24 #2CE47
NRF24 #3CSN21⚠ shared with IR RX — held HIGH during capture
NRF24 #3CE14⚠ shared with IR TX — mutex required
CC1101CS5
CC1101GDO06
CC1101GDO23spi renamed to avoid TFT_eSPI collision
SD cardCS10
SD cardDetect38
IRTX14⚠ shared with NRF24 #3 CE
IRRX21⚠ shared with NRF24 #3 CSN
NeoPixelDATA1cyan glow on splash, status indicators