{"id":50781304,"url":"https://github.com/gbroeckling/cdj1000","last_synced_at":"2026-06-12T03:04:28.161Z","repository":{"id":362364602,"uuid":"1258522428","full_name":"gbroeckling/cdj1000","owner":"gbroeckling","description":"Pioneer CDJ-1000MK2 → ESP32-S3 USB-MIDI controller for Traktor Pro 4 — gut OEM mainboard, keep chassis/jog/fader/hot-cue-buttons, native class-compliant USB-MIDI via TinyUSB","archived":false,"fork":false,"pushed_at":"2026-06-03T22:33:28.000Z","size":18002,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T23:05:30.117Z","etag":null,"topics":["ai-assisted","cdj","cdj-1000","claude","dj","dj-controller","esp32","esp32-s3","hardware-hacking","midi","midi-controller","pioneer","tinyusb","traktor","traktor-pro","usb-midi"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gbroeckling.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-03T16:55:44.000Z","updated_at":"2026-06-03T22:33:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gbroeckling/cdj1000","commit_stats":null,"previous_names":["gbroeckling/cdj1000"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gbroeckling/cdj1000","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbroeckling%2Fcdj1000","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbroeckling%2Fcdj1000/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbroeckling%2Fcdj1000/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbroeckling%2Fcdj1000/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gbroeckling","download_url":"https://codeload.github.com/gbroeckling/cdj1000/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbroeckling%2Fcdj1000/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34226665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-assisted","cdj","cdj-1000","claude","dj","dj-controller","esp32","esp32-s3","hardware-hacking","midi","midi-controller","pioneer","tinyusb","traktor","traktor-pro","usb-midi"],"created_at":"2026-06-12T03:04:27.540Z","updated_at":"2026-06-12T03:04:28.155Z","avatar_url":"https://github.com/gbroeckling.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# cdj1000\n\n### Pioneer CDJ-1000MK2 → ESP32-S3 USB-MIDI controller for Traktor Pro 4\n\nResurrect a Pioneer CDJ-1000MK2 (2003, no native USB/MIDI) as a class-compliant USB-MIDI / HID controller for Traktor Pro 4. The OEM mainboard and CD drive are removed; the chassis, jog wheel assembly, pitch fader, button PCBs (including the MK2-added Hot Cue A/B/C and Hot Loop buttons), pots, and encoders are kept and re-wired to an **ESP32-S3 DevKitC-1 (N16R8)** that speaks USB-MIDI natively via TinyUSB.\n\n\u003e **Status:** architecture v0.5 — **v0.1 scope locked**: S3-only USB-MIDI controller, no big display, optionally reuse the JFLB LED indicators (not the VFD glass) for power-on feedback. **Firmware = ESPHome on esp-idf** + 2 custom external components (USB-MIDI, jog quadrature). The deck never reboots on WiFi or HA disconnect, so it works as a plain USB-MIDI controller anywhere. See [`firmware/README.md`](firmware/README.md). Path D (OEM display reuse via panel↔main protocol replay) is **deferred to v0.2+** — see [`docs/wiring/08-display.md`](docs/wiring/08-display.md).\n\n---\n\n## Block diagrams\n\nThe two master views first; per-subsystem schematics live under [`docs/images/`](docs/images/) and are linked from the wiring index in [`docs/wiring/README.md`](docs/wiring/README.md).\n\n### Physical chassis layout — what stays, what's gutted\n\n![Top-down chassis layout — keep/remove/S3 footprint, MK2 DWG numbers on each kept board](docs/images/00-physical-layout.svg)\n\n### Master wiring map — every signal between S3 and the kept OEM boards\n\n![Master signal + power topology — kept OEM boards (left), carrier-PCB glue ICs (centre), ESP32-S3 with GPIO map (right), power tree (bottom)](docs/images/00-detailed-wiring.svg)\n\n### Per-subsystem schematics\n\n| Subsystem | Doc | Diagram |\n|---|---|---|\n| Master board map | [00-board-map.md](docs/wiring/00-board-map.md) | [physical](docs/images/00-physical-layout.svg) · [wiring](docs/images/00-detailed-wiring.svg) · [system overview](docs/images/00-system-overview.svg) |\n| 01 Jog encoder | [01-jog-encoder.md](docs/wiring/01-jog-encoder.md) | [SVG](docs/images/01-jog-encoder.svg) |\n| 02 Jog touch | [02-jog-touch.md](docs/wiring/02-jog-touch.md) | [SVG](docs/images/02-jog-touch.svg) |\n| 03 Pitch fader | [03-pitch-fader.md](docs/wiring/03-pitch-fader.md) | [SVG](docs/images/03-pitch-fader.svg) |\n| 04 Button mux | [04-buttons-mux.md](docs/wiring/04-buttons-mux.md) | [SVG](docs/images/04-buttons-mux.svg) |\n| 07 Display research (historical) | [07-display-research.md](docs/wiring/07-display-research.md) | — |\n| 08 Display v0.1 plan | [08-display.md](docs/wiring/08-display.md) | — |\n\n---\n\n## Why ESP32-S3 (not Teensy)\n\nPrior community builds (Lee Smith / DJLegionUK) used Teensy 3.6. The S3 wins on:\n\n- Native USB-OTG → class-compliant USB-MIDI via TinyUSB, no shield/adapter\n- More GPIO + 2× ADC blocks, PCNT peripheral for jog quadrature, RMT for WS2812\n- 8 MB PSRAM → enough framebuffer headroom for an optional jog-center IPS display\n- WiFi/BLE for future Ableton Link / OSC / wireless config\n- Cheaper, current production silicon\n\n---\n\n## Hardware re-use map\n\n| Kept | Replaced |\n|---|---|\n| Chassis, top plate, jog wheel assembly | Pioneer mainboard |\n| Jog optical encoder (~135 frames/rev — verify MK2) | CD drive + servo board |\n| Jog touch sheet | OEM display board |\n| 100 mm pitch fader | OEM VFD (optional re-use — see [`07-display-research.md`](docs/wiring/07-display-research.md)) |\n| Button PCBs — search, tempo, master tempo, time, direction, memory, delete, jog mode, vinyl/CDJ + MK2 Hot Cue A/B/C + Hot Loop | Power supply (USB-powered now) |\n| Pots \u0026 rotary encoders | |\n| CUE / PLAY / LOOP LEDs (12 V — driven via MOSFETs) | |\n\n---\n\n## Wiring overview\n\nDetailed per-subsystem wiring docs live in [`docs/wiring/`](docs/wiring/). Quick reference:\n\n| Subsystem | OEM source | ESP32-S3 GPIO | Notes |\n|---|---|---|---|\n| Jog rotation | DEC2498 encoder plate (CH A/B) | GPIO 4 / 5 (PCNT) | 5 V → 3.3 V level shift (TXS0108E) |\n| Jog touch | DSX1060 sheet sense | GPIO 6 | Verify cap vs pressure |\n| Pitch fader | 100 mm linear pot wiper | GPIO 1 (ADC1_CH0) | Cut OEM 5 V; re-feed slider from 3.3 V |\n| Buttons (~20 incl. MK2 hot cue A/B/C + hot loop) | Button PCBs | 2× 74HC4067, S0–S3 = GPIO 8/9/10/11, SIG = GPIO 12/+1 — may need 3rd mux on MK2 |\n| PLAY / PAUSE | discrete | GPIO 7 | |\n| CUE | discrete | GPIO 15 | |\n| VINYL/CDJ switch | discrete | GPIO 16 | |\n| OEM CUE/PLAY/LOOP LEDs | 12 V rail | IRLZ44N from GPIO | Lee Smith MK1 gotcha |\n| Status / pad RGB | new | WS2812 ← GPIO 13 | |\n| Display (optional) | new | GC9A01 SPI or SSD1306 I2C | jog-center vs status |\n| Power | USB 5 V → VBUS | 3.3 V LDO; MT3608 boost for 12 V LEDs only | Star ground |\n\nFull GPIO table and wiring SVGs: [`docs/wiring/README.md`](docs/wiring/README.md).\n\n---\n\n## Reference builds\n\n| Project | Why it matters |\n|---|---|\n| [djgreeb/CDJ-1000mk3_new_life_project](https://github.com/djgreeb/CDJ-1000mk3_new_life_project) | **Display path D source.** STM32F746G-DISCO + custom firmware simulating the CDJ-2000nxs UI, SD-card audio, slip mode, RGB waveform. MK3-only upstream; we're porting to MK2. Repo ships the MK3 panel↔main serial protocol decode (`Reverse Engineering Pioneer CDJ-1000 serial protocol.pdf`, by Anatsko Andrei). |\n| [spectran/CDJ-100S-MIDI-Adapter](https://github.com/spectran/CDJ-100S-MIDI-Adapter) | Closest prior art at the signal-tap level. STM32F103 replacing the mainboard on a CDJ-100S; full schematic + `Connection_scheme.pdf` + VirtualDJ XML. Source of the 3.3 V pitch-fader fix. (No LICENSE — reference only.) |\n| [pestrela/dj_maps](https://github.com/pestrela/dj_maps) | Richest Traktor Pro mappings — including DDJ-1000 with BOME jog-screen feedback. Pattern source for our `.tsi` map. (MIT.) |\n| Lee Smith / DJLegionUK — CDJ-1000 Teensy builds | Original MK1 article [djtechtools.com 2017](https://djtechtools.com/2017/06/28/hacking-cdj-1000mk1-work-midi-controller-traktor-scratch/) + later drop-in PCBs covering MK1/**MK2**/MK3. |\n| MK3 conversion reference | [Converting A Dead CDJ-1000MK3 To A MIDI Controller — DJ TechTools](https://djtechtools.com/2017/07/28/converting-dead-cdj-1000mk3-midi-controller/) |\n| Pioneer service manual (MK2) | Doc **RRV2802** — available via [ManualsLib](https://www.manualslib.com/manual/1059617/Pioneer-Cdj-1000mk2.html), elektrotanya. Local copy in `docs/source/` (gitignored). |\n\nLocal clones of the three GitHub repos live under `references/` (gitignored).\n\n---\n\n## Open items (MK2, v0.1)\n\n1. Confirm jog encoder voltage + PPR from the **MK2** service manual (RRV2802)\n2. Jog-touch sensor type on MK2 — capacitive vs pressure sheet (determines S3 native touch vs comparator front-end)\n3. Trace MK2 button PCB connector (CN) pinout → 4067 channel map. Include Hot Cue A/B/C + Hot Loop in the count.\n4. Lock final GPIO map after button count — MK2 may need a 3rd 4067 mux\n5. **JFLB LED audit** — when the unit is open, trace the JFLB board to identify which indicators are plain LEDs (not VFD segments). The \"vinyl\" indicator (blue glow) is almost certainly an LED; expect 1–3 more (mode indicators). LEDs get wired to S3 GPIO via small MOSFETs.\n6. ~~Jog-centre protocol-byte capture~~ — **dropped** after re-evaluation: the OEM VFD rotating cursor needs HV rails + OEM PSU retention regardless of where the position value comes from. If the rotating-cursor look becomes a goal later, a WS2812 LED ring driven by the S3 RMT peripheral from the jog PCNT count gives the same visual with no HV / no protocol replay / no OEM PSU.\n7. ~~Firmware path~~ — **CLOSED**: ESPHome on esp-idf framework + custom `usb_midi` and `jog_quadrature` external components. Resilient WiFi/API config so the deck never reboots when away from home. See [`firmware/README.md`](firmware/README.md).\n\n### Closed for v0.1\n\n- ✅ MK2 VFD driver IC identified: NEC µPD16306B at IC1201 on JFLB DWG1568 (same as MK1).\n- ✅ Display: **no big screen at v0.1**. JFLB LEDs only, VFD glass dark, Traktor on laptop carries the rich UI.\n- ✅ Big screen path: Path D (port djgreeb MK3 → MK2, STM32F746G-DISCO) documented in [`docs/wiring/08-display.md`](docs/wiring/08-display.md), deferred to v0.2+.\n\n---\n\n## Layout\n\n```\n.\n├── docs/\n│   ├── wiring/         # per-subsystem wiring diagrams + signal tables\n│   ├── images/         # photographs, annotated PCB shots, SVG schematics\n│   └── source/         # service manual PDF + other source docs (gitignored)\n├── firmware/           # ESP-IDF or Arduino sketch (TBD)\n├── hardware/           # BOM, KiCad project (TBD)\n├── mappings/           # Traktor Pro 4 .tsi + BOME files\n└── references/         # cloned reference repos (gitignored)\n```\n\n---\n\n## License\n\nGPL-3.0 — see [LICENSE](LICENSE). Same license as [padspanHA](https://github.com/gbroeckling/padspanHA).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbroeckling%2Fcdj1000","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgbroeckling%2Fcdj1000","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbroeckling%2Fcdj1000/lists"}