
OpenDeck r3.1.2
shanteacontrols/OpenDeck
A platform for building interactive control and sensing devices using MIDI and OSC built with Zephyr RTOS.

Secuenciador MIDI de pasos en Rust, con doble target: ESP32 (MIDI DIN por UART) y web (WASM + Web MIDI API). Toda la lógica vive en un core portable; las plataformas solo aportan tiempo e I/O.
Circuito obrero-1 is an open-source printed circuit board by Sublevar, from the Sublevar/obrero-1 repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 112 × 47.5 mm with 30 parts on 21 nets, routed with 289 tracks and 0 vias.
It is built around the 74HC165D. Its parts include 12 resistors and 2 ICs.
Secuenciador MIDI de pasos en Rust, con doble target: ESP32 (MIDI DIN por UART) y web (WASM + Web MIDI API). Toda la lógica vive en un core portable; las plataformas solo aportan tiempo e I/O.
crates/obrero-core Motor sans-io: parser MIDI, patrón, transporte, reloj 24 PPQN.
Sin threads ni I/O — la plataforma llama advance(now, lookahead)
y recibe eventos MIDI timestampeados. Testeable en host.
crates/obrero-wasm Bindings wasm-bindgen del motor para el navegador.
web/ UI TypeScript (vite): grilla de pasos, Web MIDI, scheduler
con lookahead de 100 ms y send timestampeado.
firmware/ Binario ESP32 (esp-idf-svc, toolchain xtensa propio).
Excluido del workspace raíz — se compila aparte.MIDI-DIN.md documenta el hardware DIN (6N137, UART2 a 31250 bps).# Tests del motor (host)
cargo test -p obrero-core
<<<<<<< HEAD
# Build WASM
cargo build -p obrero-wasm --target wasm32-unknown-unknownRequiere wasm-pack (cargo install wasm-pack) y Node.
cd web
npm install
npm run wasm # compila crates/obrero-wasm → web/src/pkg
npm run dev # http://localhost:5173 (Web MIDI requiere Chrome/Edge)Elegí una salida MIDI (sintetizador, DAW o loopback virtual) y dale Play. Para modo esclavo, seleccioná una entrada MIDI y reloj "Externo".
Tiene su propio toolchain (esp, fork Xtensa — ver firmware/rust-toolchain.toml) y ESP-IDF v5.3.3 via embuild.
# Setup (una vez)
cargo install espup && espup install
source ~/export-esp.sh # agregar al perfil de shell
cargo install espflash
cd firmware
<<<<<<< HEAD
cargo build # primera build descarga ESP-IDF en .embuild/ — tarda
./dev.sh # build + flash + monitor serial
=======
# Build + flash + monitor serial (todo junto)
./dev.sh======= cargo build # primera build descarga ESP-IDF en .embuild/ — tarda ./dev.sh # build + flash + monitor por el conector UART del devkit ./dev.sh -p /dev/ttyUSB1 # elegir puerto serie a mano ./dev.sh -m esp32 # flashear el binario de la board ESP32 clásica
`dev.sh -m` solo elige qué directorio de target flashear — el chip compilado lo define `.cargo/config.toml`.
### USB-MIDI + debug serial (dos cables)
El firmware S3 levanta TinyUSB (componente `espressif/esp_tinyusb`, ver
`Cargo.toml` y `CONFIG_TINYUSB_MIDI_COUNT` en `sdkconfig.defaults`) sobre el
puerto **USB nativo** (GPIO19/20), que enumera como dispositivo USB-MIDI.
Los logs y el flasheo van por el conector **UART** (bridge USB-UART → UART0),
así que conviene tener ambos cables conectados: `dev.sh` flashea y monitorea
solo por `/dev/ttyUSB*` y deja el `/dev/ttyACM*` (USB nativo) libre para MIDI.
Al usar USB-OTG se pierde el USB-Serial-JTAG del puerto nativo (comparten PHY);
el debug queda en el conector UART. TinyUSB no compila para el ESP32 clásico
(no tiene USB-OTG): para ese chip hay que comentar el bloque
`extra_components` en `firmware/Cargo.toml`.
>>>>>>> e3618c6 (fmt)
Flasheo manual según target activo:
```sh
# ESP32 (rev1)
espflash flash target/xtensa-esp32-espidf/debug/obrero-1 && espflash monitor
# ESP32-S3
espflash flash target/xtensa-esp32s3-espidf/debug/obrero-1 && espflash monitor
>>>>>>> 56ef925 (entorno esp32s3)GPL-3.0-or-later — © 2026 Pablo Labarta pablitolabarta@gmail.com & Santiago Fernandez stfg.prof@gmail.com.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 10k | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12 |
| 6 | 0 | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | puente1, puente2, puente3, puente4, puente5, puente6 |
| 6 | Conn_01x05 | Connector_JST:JST_EH_B5B-EH-A_1x05_P2.50mm_Vertical | J_in_encoder1, J_in_encoder2, J_in_encoder3, J_in_encoder4, J_in1, J_out1 |
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3_DIN965 | H1, H2, H3, H4 |
| 2 | 74HC165 | Package_DIP:CERDIP-16_W7.62mm_SideBrazed_LongPads_Socket | U1, U2 |
It measures 112 × 47.5 mm and has 2 copper layers, 1.6 mm thick.
30 parts, built around the 74HC165D. 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 Sublevar/obrero-1 repository on GitHub, at the commit this page was made from: the board is pcbs/pcb_encoders/circuito_obrero-1.kicad_pcb and its schematic pcbs/pcb_encoders/circuito_obrero-1.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).

shanteacontrols/OpenDeck
A platform for building interactive control and sensing devices using MIDI and OSC built with Zephyr RTOS.

slu4coder/Minimal-64x4-Home-Computer
My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

slu4coder/Minimal-UART-Computer-1-2
Legacy: Version 1 and 2 of my TTL-only CPU featuring UART I/O, an expansion port, 512KB SSD at up to 10MHz clock speed


westlicht/performer-hardware
PER|FORMER Eurorack Sequencer - Hardware Design Files

slu4coder/Minimal-64-Home-Computer
Legacy: Full TTL-only home computer with VGA and PS/2 and twice the processing power of a Commodore 64

