Digital piano firmware for the Raspberry Pi Pico.
Go to file
2024-04-18 21:10:06 -04:00
.cargo src/pins.rs: make TransparentPins struct 2024-04-14 10:13:59 -04:00
src TransparentPins: offer iterator interface 2024-04-18 21:10:06 -04:00
vendor/embassy-usb-logger get basics working 2024-04-07 21:50:56 -04:00
.gitignore get basics working 2024-04-07 21:50:56 -04:00
build.rs chore: format + licencing 2024-04-08 15:57:14 -04:00
Cargo.lock feat: support multiple pin extenders on the I²C bus 2024-04-14 16:07:42 -04:00
Cargo.toml feat: support multiple pin extenders on the I²C bus 2024-04-14 16:07:42 -04:00
LICENSE chore: format + licencing 2024-04-08 15:57:14 -04:00
memory.x initial commit 2024-04-06 22:07:35 -04:00
README.md README now included in generated docs 2024-04-18 20:55:45 -04:00

geode-piano

Digital piano firmware for the Raspberry Pi Pico. This project only attempts to expose the keyboard as a MIDI device.

installation

  • Clone project.
  • Go into project directory.
  • Install elf2uf2-rs.
  • Follow the materials and wiring sections below.
  • Set the Pico into BOOTSEL mode:
    • Hold down the BOOTSEL button on the Pico. Keep holding it during the following steps.
    • Reset the Pico: either replug the power, or short Pin 30 (RUN) to GND through a button or wire.
  • Mount the Pico's storage on your device.
  • cargo run --release --bin [binary]
    • [binary] can be any binary under src/bin/. Run cargo run --bin to list them.

If you are missing dependencies, consult Alex Wilson's guide on Rust Pico development.

materials

  • 1 Raspberry Pi Pico (preferably with pre-soldered headers)
  • 2 MCP23017 I/O extender chips, DIP format
  • 2 pull-up resistors for I²C (1-10kΩ), these are optional but recommended
  • 1 USB to Micro-USB cable with data transfer
  • Many jumper cables
  • Breadboard

wiring

Ensure all wires are well plugged in every time you use this circuit.

rails

  • Pin 3 -> GND rail
  • Pin 36 (3V3OUT) -> power (positive) rail

i2c

Let's call the closest MCP23017 chip to the Pico MCP A, and the further one MCP B.

  • GP16 -> MCP A SDA
  • GP17 -> MCP A SCL
  • MCP A SDA -> MCP B SDA
  • MCP A SCL -> MCP B SCL
  • Pull-up resistor from GP16 to power rail
  • Pull-up resistor from GP17 to power rail

For both MCP23017s:

  • MCP RESET -> power rail
  • MCP A0, A1, A2 -> GND rail for 0, power rail for 1
    • MCP A should be 0x20 (GND, GND, GND), MCP B 0x27 (3V3, 3V3, 3V3)
  • MCP VDD -> power rail
  • MCP VSS -> GND rail