Skip to main content
Version: FILS English

pico-console

A retro games console supporting multiplayer.

info

Author: Lungu Adrian-Costin
GitHub Project Link: https://github.com/UPB-PMRust-Students/project-addrian-77

Description

The pico-console is a compact, embedded retro game console built using Rust and the Raspberry Pi Pico 2W microcontroller. It receives player inputs through WIFI using UDP, simplifying the hardware design.

Motivation

I've always been passionate about video games, from playing to observing how they work, experimenting with settings and game modifications. Building a game console felt like a natural decision, helping me better understand embedded systems and low-level programming in Rust.

Architecture

Schematic diagram

architecture

Raspberry Pi Pico 2W

  • Role: Processing user inputs, updating and sending frames
  • Connections: LCD Display

LCD Display

  • Interface: SPI
  • Connections:
    • SCK (Serial clock) to GPIO 10
    • SDA (Serial data) to GPIO 11
    • RST (Reset) to GPIO 14
    • CS (Chip Select) to GPIO 13
    • DC (Data/Command) to GPIO 15

Log

Week 7 - 13 April

Tested the display, made the controller webserver in Rust.

Week 14 - 20 April

Implemented the UDP socket on the RP Pico, drawing received data on the screen.

Week 28 April - 4 May

Created a menu interface with working inputs and a working 2-player snake game.

Week 5 - 11 May

Week 12 - 18 May

Week 19 - 25 May

Hardware

Due to the inputs being handled through Wi-Fi, the hardware is very simple, consisting of 2 Raspberry Pi Pico 2W microcontrollers and a ST7735 LCD 128x160 display.

photo

Schematics

Wiring diagram

wiring-diagram

Bill of Materials

DeviceUsagePrice
2 x Raspberry Pi Pico 2WThe microcontroller79.32 RON (2 x 39.66 RON)
ST7735 LCD DisplayThe display28.99 RON
BreadboardBase for components9.98 RON
Wires (male-male)Connecting components7.99 RON
Wires (male-female)Connecting components4.45 RON

Software

LibraryDescriptionUsage
cyw43Internet driver for RP PicoSetting up the Wi-Fi chip
embassy-rpHardware Abstraction Layer for RP2350Setting up SPI and GPIO
embassy_netNetwork stack for embedded systemsSetting up the UDP Socket
embassy_timeProvides timekeeping, delaysManaging game loop times
embassy_syncOffers synchronization primitives and data structures with async supportSending data between tasks
mipidsiGeneric driver for TFT displaysRendering graphics using the ST7735
embedded-graphics2D graphics library with primitives, text and imagesRendering visuals, UI elements and text
heaplessData structures that don't require dynamic memory allocation, suitable for no-stdStoring game data in vectors and queues
randRandom number generationRandomizing game events
defmtHighly efficient logging framework for microcontrollersLogging debugging information during development and testing
  1. embassy examples for RP