
Vimdrones esc development board
VimDrones/AM32_esc_development_board
Open Source AM32 ESC development board

Bare metal LLM inference on RP2350
Pico llm is an open-source printed circuit board by mattdeeds, from the mattdeeds/pico-llm repository on GitHub. It is a 2-layer board of 52.5 × 55.8 mm with 42 parts on 50 nets, routed with 304 tracks and 38 vias.
It is built around the AP2112K-3.3 and WS2812B-2020. Its parts include 18 resistors, 7 capacitors, 5 connectors, 3 diodes and 2 ICs. It belongs with the RP2040 boards of this library.
Transformer LLM inference on the RP2350.
Write-up: From 9M to 4B Parameters on a $1 Microcontroller
All on an RP2350 at 250 MHz, 62.5 MHz SDIO bus, same firmware.
| Model | Quant | On card | Time/token | Bottleneck |
|---|---|---|---|---|
| Custom 9M test model | int8 | 15 MB | 0.69 s | SD I/O |
| Qwen3-0.6B | int8 | 570 MB | 55 s | SD I/O |
| Qwen3-4B-Thinking-2507 | Q4_0 | 2.16 GB | 3–6 min | SD I/O |
| Bonsai-1.7B | Q1_0_g128 | 232 MB | 29.1 s | compute |
| Qwen3-0.6B | Q4_0 | 321 MB | 19.4 s | SD I/O |
pico-llm-kicad/v1/docs/sd-card-pinmap.md)Requires the Pico SDK (PICO_SDK_PATH) and an arm-none-eabi toolchain.
cmake -B build -DPICO_BOARD=pico2
cmake --build build --target pico_llm
picotool load -f -x build/pico_llm.uf2Options:
| Flag | Effect |
|---|---|
-DPICO_LLM_MODEL=bonsai | Build for Bonsai-1.7B (Q1_0_g128) instead of Qwen3-0.6B |
-DPICO_LLM_PROFILE=ON | Per-token timing breakdown over serial |
-DPICO_LLM_BENCH=ON | Also build bench_sd, a raw SD read benchmark |
-DSDIO_DATA_CLK_DIVIDER=5 | Force a 50 MHz (in-spec) bus instead of the 62.5 MHz default |
Export the model, then write it to the card's raw blocks — there is no filesystem.
python3 tools/export_qwen3_q4.py -o models/qwen3_0.6b_q4.bin
python3 tools/export_bonsai.py -o models/bonsai_1p7b_q1.bin # optionaldiskutil unmountDisk /dev/diskN # macOS; use umount on Linux
sudo dd if=models/qwen3_0.6b_q4.bin of=/dev/rdiskN bs=1mRaw block devices only accept writes in multiples of 512 bytes, and the exported
files are not a whole number of blocks. dd with bs=1m writes every full
megabyte and then fails on the remainder with Invalid argument, leaving the
tail of the classifier missing. Either pad the file to a 512-byte boundary
first, or write the tail separately and confirm dd reports equal records in
and out.
There is no tokenizer on the device, vocabulary does not fit in RAM. The host does tokenization, the chat template and detokenization:
python3 tools/serial_chat.py --model-name Qwen/Qwen3-0.6BThe chat template matters. Without it the model autocompletes the prompt instead of answering it.
python3 tools/test_qwen3_q4.py models/qwen3_0.6b_q4.bin \
--model-name Qwen/Qwen3-0.6B --rope-theta 1000000 --prompt "<a long prompt>"Inspired by Andrej Karpathy's llama2.c. SDIO by SDIO_RP2350. Q4_0 follows llama.cpp's block format.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | 10k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R1, R2, R3, R4, R5, R12, R13, R15, R16, R17, R18 |
| 6 | 33 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R6, R7, R8, R9, R10, R11 |
| 5 | 10uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C2, C3, C4, C5, C6 |
| 3 | Conn_01x04_Socket | Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal | J3, J4, J5 |
| 3 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_TopBottom | H1, H2, H3 |
| 3 | WS2812B-2020 | LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm | D1, D2, D3 |
| 2 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U3, U4 |
| 1 | 100nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C1 |
| 1 | 100uF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C7 |
| 1 | 1051620001 | 1051620001 (1):MOLEX_1051620001 | J1 |
| 1 | 470 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R14 |
| 1 | Conn_01x03_Socket | Connector_JST:JST_SH_SM03B-SRSS-TB_1x03-1MP_P1.00mm_Horizontal | J2 |
| 1 | LOGO | LOGO | G*** |
| 1 | RaspberryPi_Pico | Module:RaspberryPi_Pico_SMD_HandSolder | A1 |
| 1 | SW_SPST | Button_Switch_SMD:SW_Push_1P1T-SH_NO_CK_KMR2xxG | RST1 |
| 1 | SolderJumper_3_Bridged12 | Jumper:SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm | JP2 |
It measures 52.5 × 55.8 mm and has 2 copper layers, 1.6 mm thick.
42 parts, built around the AP2112K-3.3 and WS2812B-2020. 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 mattdeeds/pico-llm repository on GitHub, at the commit this page was made from: the board is pico-llm-kicad/v1/pico-llm.kicad_pcb and its schematic pico-llm-kicad/v1/pico-llm.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask mattdeeds before reusing the design.

VimDrones/AM32_esc_development_board
Open Source AM32 ESC development board

JamesTwallin/gas_sensor
A tiny plug-in board for the rev E phone-companion board. It stands upright in a notch in rev E's sensor end, between the two gas sensor cans, and pokes 4.5 mm out through a slot in the case face, so its tip sits in the…




aayanrahman/Star-Notifier
Star-shaped USB-C ESP32-C3 board that lights up when Claude or Cursor is done

albertoboffi-PERSONAL/fra-clock
A one-off gift PCB designed in KiCad 10: an ESP32 clock with a ring of 180 WS2812B‑2020 LEDs, a photo printed in exposed copper on the front, two Makerverse 8 Ω / 5 W speakers driven by two MAX98357A I²S amplifiers…

arvindsa/xmas-tree-earring
A pair of wireless, synchronized LED earrings with nRF52 MCUs running deterministic animation patterns.