nils 2d9c201a12 Hardware: add LiPo battery + power-path charger
BQ24075 (single-cell charger + power-path SYS): USB present -> powers
device + charges cell; USB absent -> battery takes over seamlessly.
System rail becomes SYS (~3.0-4.2V battery domain); existing converters
already accept it (3.3V is buck-boost RT6150B so survives sag). MAX17048
fuel gauge on I2C1 for SoC on OLED. Power budget updated (~200-400mA
from SYS, charge limited to ~500mA on USB 2.0). ~5-8h on a 1500-2000mAh
cell. Connection table, BOM, risks, build order updated.

NOTE: hardware/netlist.net still references +5V rails; needs the SYS/
BQ24075/BAT/MAX17048 nets added — regenerate on request.
2026-08-21 17:27:22 +02:00
2026-08-21 09:34:59 +02:00

pico-pi-midi (Rust)

BLE-MIDI keypad firmware for the Raspberry Pi Pico W (RP2040 + CYW43439), written in Rust using embassy, the cyw43 driver (Bluetooth), and the TrouBLE BLE host.

This is the Rust port of the original C/BTstack firmware (now kept separately as pico-pi-midi-c). It talks BLE-MIDI 1.0 to iOS / macOS Core MIDI, turning the Pimoroni Pico RGB Keypad into a 16-pad wireless MIDI controller.

What it does

  • 16-pad keypad (Pimoroni RGB Keypad Base): reads buttons over I²C (GPIO expander @ 0x20) and drives APA102 RGB LEDs over SPI (CS=17, SCK=18, MOSI=19).
  • BLE-MIDI 1.0 GATT server (MIDI Service 03B80E5A-…), advertised so Core MIDI discovers it as a MIDI device. Pad presses → Note On/Off over Bluetooth; incoming Note On lights the pad.
  • Octave display: the BOOTSEL button cycles the keypad's note offset by +12 and flashes the active octave as a digit on the 4×4 grid for 500 ms.
  • Onboard LED heartbeat (driven via the CYW43 chip — the Pico W's LED is on the wireless chip, not an RP2040 pin).
  • USB serial logging via embassy-usb-logger — connect and read with screen /dev/cu.usbmodem* 115200 to see boot/advertising logs.

Roadmap

This is v1: a BLE-MIDI keypad. The goal is a flexible MIDI router — MIDI over USB, BLE, keypad, TRS, and 4 stereo CV outputs, with channels configurable at runtime via an LCD. See the architecture notes (kept in the session memory) for the plan.

Building

Requires Rust stable (≥1.93) and the thumbv6m-none-eabi target:

rustup target add thumbv6m-none-eabi
cargo build --release

The CYW43 firmware blobs (cyw43-firmware/*.bin) are committed here so no network access is needed at build time. They are redistributable under the permissive binary license in the upstream embassy cyw43-firmware directory.

Flashing

cargo build --release
elf2uf2-rs convert target/thumbv6m-none-eabi/release/rgb-keypad target/uf2/rgb-keypad.uf2
# hold BOOTSEL + plug in the Pico W, then:
picotool load target/uf2/rgb-keypad.uf2 -x

License

GPL-3.0-or-later (see LICENSE).

src/codec.rs is a Rust port of the BLE-MIDI 1.0 packet codec from rppicomidi/pico-w-ble-midi-lib, which is MIT-licensed; that attribution is retained in the file header. MIT is GPL-3.0-compatible, so the repository as a whole is GPL-3.0-or-later while that file preserves its MIT provenance.

S
Description
No description provided
Readme GPL-3.0
306 KiB
Languages
Rust 99.6%
RPC 0.4%