SGP Card Joker
J
J
Flipper-style R&D toolkit · ESP32-S3
SGP CARD
JOKER
The field terminal

“Why so serious?” — a whole R&D lab that lives on one card and answers only to its own WiFi.

ESP32-S3PN532 NFC4× WS2812USB-OTGWiFi APBLE
NO app · no cloud · the card IS the network Connect to SGP-JOKER-XXXX Open 192.168.4.1
How to use it

Power on, connect, take control

No app to install, no account, no internet. Three steps from power-on to the full green panel in your hand.

1

Power it on

Slide the top switch until you hear a beep and the LEDs light up. The card runs on its own battery — no cable needed. (Use the USB-C port only to charge it or flash new firmware.)

2

Join its WiFi

On your phone or laptop, open Wi-Fi settings and connect to:

SGP-JOKER-XXXX · password joker12345678

Then open 192.168.4.1 in the browser — it usually pops up on its own as a captive portal.

3

Take control

The green panel loads and you run the card however you like. You can also plug extra modules into the GPIO header for even more.

The hardware

One card, every trick up its sleeve

The SGP Card Joker packs a research-grade radio, an NFC front-end and a room full of I/O onto a credit-card PCB — the Joker face is printed right into the copper. Here's what's under the silkscreen.

U1 · MCU

ESP32-S3-MINI-1

Dual-core 240 MHz, 8 MB flash, WiFi + BLE 5, and native USB. The brain of the whole operation.

U5 · NFC

PN532

13.56 MHz reader/writer over I²C. Reads MIFARE Classic, Ultralight and NTAG tags — UID, blocks and pages.

LED1–4 · RGB

4× WS2812B

Addressable RGB chained on a single data line. This is where the toxic-green Joker aura comes from.

USB1 · Type-C

USB-C OTG

Native S3 USB. Doubles as the BadUSB HID port and OTG host — and how you flash and power the card.

BUZZER1

Piezo buzzer

LEDC-driven tones and melodies — including the signature laugh on the user button.

U4 · PMIC

TP4056 charger

Single-cell LiPo charging with a 3.3 V LDO rail, so the card runs fully untethered off a battery.

Header · I/O

14-pin GPIO breakout

Free, programmable pins on a labelled header (GPIO / 3V3 / GND) — the playground for the GPIO Lab.

SW1–4

4 buttons

BOOT, EN/reset, a power slide switch and a user button that fires the Joker LEDs + laugh.

The wiring

Pin map, straight from the schematic

Every line below was read off the board's own schematic — not guessed. It's the single source of truth the firmware is built around.

sgp_card_joker · pinmap.tsv
FunctionGPIODetail
RGB WS2812B ×4 (chained)GPIO10net IO10/RGB → LED1 → … → LED4
BuzzerGPIO1net IO1/BUZZER · LEDC tone
PN532 NFC — SDAGPIO6I²C, 4k7 pull-up, addr 0x24
PN532 NFC — SCLGPIO5IRQ/RST not wired → polling
User button (SW4)GPIO9to GND · INPUT_PULLUP
BOOT button (SW1)GPIO0strapping / download mode
USB D− / D+19 / 20native S3 USB · OTG + BadUSB
GPIO breakout header14 pins48,34,33,47,26,35,36,37,38,39,40,8,7,3

The header pad silk-printed “IO27” is physically GPIO47 — the S3-MINI module doesn't bond out GPIO27. The firmware already uses 47. All of this lives in one editable file: config.h.

The arsenal

Ten modules, one green panel

Everything runs on the card itself and is driven from the Joker web panel over its own access point. Pick a tool, pull the trigger.

01 · Radio

NFC / RFID

PN532 at 13.56 MHz: single & continuous scan, block/page dumps, write to MIFARE & NTAG, and save cards to storage.

ReadDumpWriteSave
02 · 802.11

WiFi Lab

Passive access-point survey plus a promiscuous monitor that counts frames and flags deauth / disassoc bursts.

SurveyMonitorDeauth-detect
03 · BLE

Bluetooth

On-demand BLE scanner — names, addresses, RSSI and advertised service hints for everything in range.

ScanRSSI
04 · HID

BadUSB

Types as a USB keyboard when plugged into a host. A Ducky-lite interpreter runs payloads you write and save.

DuckyPayloads
05 · I/O

GPIO Lab

Drive the 14-pin header live — set HIGH / LOW or read any pin straight from the browser.

SetRead14 pins
06 · Light

RGB Aura

Eight WS2812 modes — Joker, rainbow, scanner, breathe, strobe, alarm — with brightness and color control.

8 modesColor
07 · Sound

Buzzer

Free-form tones by frequency & duration, plus canned melodies — boot, OK, alarm, coin and the laugh.

ToneMelody
08 · Files

Storage

LittleFS browser on the card — view, save and delete captured cards, payloads and dumps.

LittleFSBrowse
09 · Log
_

Console

A live event log streamed over WebSocket — every scan, write and alert as it happens.

LiveWebSocket
10 · System

Settings

Rename the access point, change the key & channel, reboot, deep-sleep or format the filesystem.

AP configPower
Prompt forge

Describe it — get code that fits the card

Type what you want your SGP Card Joker to do. The forge wraps your idea in the full hardware spec — pin map, libraries, board settings — so any AI hands back a sketch that actually compiles for this board. Copy it, paste into ChatGPT or Claude, get your .ino.

Click a starter to fill the box, then tweak it.

ai-prompt.txt

        

Paste it into ChatGPT, Claude or any coding AI — it already knows the wiring.

Initiation sequence

From box to Gotham in six steps

Do these in order the first time. After that, the card boots straight into its own network — no computer required.

1

Install the libraries

Adafruit PN532, Adafruit NeoPixel, ArduinoJson (v7) and WebSockets. The rest ships with the arduino-esp32 3.x core.

2

Set the board options

ESP32S3 Dev Module · USB Mode USB-OTG (TinyUSB) · 8 MB flash · partition 8M with spiffs · PSRAM off.

3

Flash it

Compile & upload over USB-C. If no port shows, hold BOOT, tap EN, release BOOT to enter download mode.

4

Power on

Slide the top power switch until you hear a beep and the LEDs light up. The card raises its own WiFi — SSID SGP-JOKER-XXXX, password joker12345678.

5

Join & open

Connect any phone or laptop to that network and browse to http://192.168.4.1 — the panel usually pops up as a captive portal.

6

You're in

The green Joker panel loads. Press the on-board SW4 button to toggle the Joker LEDs and hear the laugh. Change the SSID/key in Settings.

Build & flash

The commands, for the record

Verified clean against the esp32 core 3.3.8 — 1.41 MB (42%) of app flash, 81 KB RAM.

zsh — arduino-cli
# compile the sketch
arduino-cli compile \
  --fqbn esp32:esp32:esp32s3:\
PartitionScheme=default_8MB,\
USBMode=default,CDCOnBoot=cdc,\
FlashSize=8M \
  ~/Desktop/proyectos/"SGP Card Joker"/SGP_Card_Joker

# flash over USB-C
arduino-cli upload -p /dev/cu.usbmodemXXXX \
  --fqbn esp32:esp32:esp32s3:... \
  ~/Desktop/proyectos/"SGP Card Joker"/SGP_Card_Joker
Tools · board options
BoardESP32S3 Dev Module
USB CDC On BootEnabled
USB ModeUSB-OTG (TinyUSB)
Flash Size8 MB (64 Mb)
Partition8M w/ spiffs
PSRAMDisabled
Project: ~/Desktop/proyectos/SGP Card Joker/SGP_Card_JokerSGP_Card_Joker.ino (logic), config.h (pins), web_ui.h (the panel).
!

Authorized use only

SGP Card Joker is for security research, education and CTFs on hardware and networks you own or have explicit permission to test. The WiFi module only observes and counts frames — it does not transmit deauth or spoof networks. BadUSB enumerates as a keyboard: run it only against machines you're allowed to test.

SGP·JOKER
why so serious?
SGP CARD JOKER · ESP32-S3-MINI-1-N8 · firmware v1.0 · panel served at 192.168.4.1
Scroll to Top