
Nrf bga
github-linguist/linguist
Language Savant. If your repository's language is being reported incorrectly, send us a pull request!

A pocket robot-voice DJ on an ESP32-S3. SAM (the 1982 Software Automatic Mouth speech synth) pre-renders a bank of words into memory, and a "turntable deck" plays, scratches, stutters and reverses them over a drum…
S3 handheld revA is an open-source printed circuit board by mhellar, from the mhellar/handheld-robodj repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 96 × 66 mm with 12 parts on 20 nets, routed with 65 tracks and 0 vias.
Its parts include 4 ICs and 4 switches. It belongs with the ESP32 boards of this library.
A pocket robot-voice DJ on an ESP32-S3. SAM (the 1982 Software Automatic Mouth speech synth) pre-renders a bank of words into memory, and a "turntable deck" plays, scratches, stutters and reverses them over a drum machine, with a 16-step sequencer, granular and vocoder voice effects and a sci-fi HUD on a 128x128 OLED. Four buttons, one speaker.
The board is a single-sided PCB designed to be milled on a desktop CNC (all copper on the bottom, big pads, no jumper wires). The modules plug into female headers, so there's no SMD soldering.

| Folder | Contents |
|---|---|
firmware/handheld_robodj/ | The Robo DJ sketch (Arduino), SAM's C core bundled alongside |
firmware/handheld_bringup/ | Bring-up / test sketch: I2C scan, buttons, joystick, OLED, beep. Flash this first |
hardware/kicad/ | KiCad project (schematic, PCB, custom symbols + footprints in s3_cnc.pretty) |
hardware/cnc/ | Gerbers + Excellon drills, ready-made G-code for a Genmitsu Cubiko (GRBL), the FlatCAM script, a 1:1 print for checking parts fit, and CNC_CHEATSHEET.txt |
docs/ | Board layout image |
| Ref | Part | Notes |
|---|---|---|
| U1 | ESP32-S3 SuperMini | 2x 1x9 female headers. One with PSRAM (e.g. 4 MB flash / 2 MB PSRAM) holds the most words |
| U2 | MAX98357A I2S amp breakout | 1x7 female header, VIN on 5 V, plus a small 4-8 ohm speaker |
| U3 | 1.5" 128x128 OLED, SH1107, I2C | 1x4 female header (VCC GND SCL SDA), e.g. GME128128-01-IIC |
| U4 | KY-023 joystick module | 1x5 female header. Swap its right-angle pins for straight ones. Not used by Robo DJ, the bring-up sketch tests it |
| SW1-SW4 | 6 mm tact buttons | the diamond: UP / LEFT / RIGHT / DOWN |
| 100 x 70 mm single-sided copper clad | board is 96 x 66 mm, M3 holes |
| Function | GPIO |
|---|---|
| OLED SDA / SCL | 11 / 12 |
| Amp DIN / BCLK / LRC | 1 / 2 / 3 |
| Buttons UP / RIGHT / LEFT / DOWN | 7 / 6 / 5 / 4 (to GND, internal pull-ups) |
| Joystick X / Y / SW | 10 / 9 / 8 (on 3V3) |
esp32:esp32:esp32s3:CDCOnBoot=cdc,PSRAM=enabledfirmware/handheld_robodj/handheld_robodj.ino and upload. Flash handheld_bringup first if you're bringing up a fresh board.arduino-cli compile --fqbn esp32:esp32:esp32s3:CDCOnBoot=cdc,PSRAM=enabled firmware/handheld_robodj
arduino-cli upload --fqbn esp32:esp32:esp32s3:CDCOnBoot=cdc,PSRAM=enabled -p COMx firmware/handheld_robodjTips:
U8G2_SH1107_PIMORONI_128X128 constructor. The generic SH1107 one shifts the picture by 32 px.handheld_bringup prints to Serial every 250 ms: run it with a serial monitor open.Diamond: UP = SHIFT, LEFT = VOICE, RIGHT = BEAT, DOWN = FX. Live hits play instantly. With REC on they're quantized into the 16 steps.
| Button | tap | double | triple | hold |
|---|---|---|---|---|
| VOICE | say the word | next word | random word | SCRATCH it (tempo-synced) |
| BEAT | kick | snare | clap | hi-hat roll |
| FX | next FX | GROOVE on/off | STUTTER | |
| SHIFT + VOICE | REC on/off | clear voice track | clear all | REVERSE |
| SHIFT + BEAT | next scratch style | tempo | chord progression | TAPE STOP |
| SHIFT + FX | volume | next robot voice (re-renders the words) | ||
| SHIFT alone | MUTATE (new words, same rhythm) | AUTO (random beat + words) | UNDERWATER |
bank[] in the sketch to make it say anything.The PCB is single-sided with all copper on B.Cu, made for isolation milling. The Gerbers in hardware/cnc/ also work at
a board house as a 1-layer board.
Milling order (details in hardware/cnc/CNC_CHEATSHEET.txt): 0.1 mm 20° V-bit isolation, 1.0 mm drill, 2.0 mm drill,
then V-bit outline score. The .nc files are ready to run on a GRBL machine. The drill files are already patched by
fix_drill_spinup.py, which fixes the spindle start for GRBL laser mode. To regenerate with FlatCAM, set the
path at the top of load_and_mirror.tcl and run it (File > Scripting > Run Script). It mirrors the board, because the
copper is on the bottom.
Before milling, print PRINT_1to1_fit_test.pdf at 100% and check your modules against it. The OLED and joystick
outlines were measured from photos.
firmware/handheld_robodj/.Licensed under the GNU GPL v3 (see LICENSE), the same as the bundled SAM core.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | MountingHole_3.2mm_M3 | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 1 | BTN_DOWN | s3_cnc:SW_Tact_6mm_CNC | SW4 |
| 1 | BTN_LEFT | s3_cnc:SW_Tact_6mm_CNC | SW2 |
| 1 | BTN_RIGHT | s3_cnc:SW_Tact_6mm_CNC | SW3 |
| 1 | BTN_UP | s3_cnc:SW_Tact_6mm_CNC | SW1 |
| 1 | ESP32-S3_SuperMini | s3_cnc:ESP32-S3_SuperMini_CNC | U1 |
| 1 | KY-023 joystick | s3_cnc:Joystick_KY023_CNC | U4 |
| 1 | MAX98357A | s3_cnc:MAX98357A_Module_CNC | U2 |
| 1 | OLED 1.5in SH1107 | s3_cnc:OLED_1.5in_128x128_I2C_CNC | U3 |
It measures 96 × 66 mm and has 2 copper layers, 1.6 mm thick.
12 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the mhellar/handheld-robodj repository on GitHub, at the commit this page was made from: the board is hardware/kicad/s3_handheld_revA.kicad_pcb and its schematic hardware/kicad/s3_handheld_revA.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

github-linguist/linguist
Language Savant. If your repository's language is being reported incorrectly, send us a pull request!


google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards



hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

VoronDesign/Voron-Tap
Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

stacksmashing/pico-tpmsniffer
A simple, very experimental TPM sniffer for LPC bus