Skip to the content
2 layersPicopet, the printed circuit board in 3D

A vpet built on embedded hardware in rust

Copper layers
2
Thickness
1.6 mm
Parts
56
Nets
64
Pads
273
Tracks, vias
300, 39
Pours
4
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
16 Aug 2023
Updated
15 Sep 2026

Overview

Picopet is an open-source printed circuit board by bytomancer, from the bytomancer/pico-pet repository on GitHub, published under the MIT licence. It is a 2-layer board with 56 parts on 64 nets, routed with 300 tracks and 39 vias.

It is built around the RP2040, W25Q32JVSSIQ and AT24CS32-SSHM-T, with the DS3231MZ/V+, S-T111B33MC-OGSTFU and SS8050 among its other parts. Its parts include 21 capacitors, 15 resistors, 6 ICs, 6 switches and 5 connectors. It belongs with the RP2040 boards of this library.

Main components

7

README

README.md

Pico Pet

A virtual pet that requires the user to complete pomodoros for the health of their pet.

Hardware

NVM Utilization

The NVM (Non-Volatile Memory) module included with the DS3231 provides 4KiB arranged in 512 pages of 8 bytes each.

Permanent storage must be serializable to a specified number of pages, and write to an assigned page address.

Pages are addressed from hexidecimal 0x000 to 0x1ff.

Page StartPage EndModule
000000Header
001002Settings
003003Inventory
004005Pet

note: If the NVM becomes corrupted, try changing the const NVM_SENTINEL to force a header guard check failure. This will factory reset the device, and all data will be lost.

Header
0if set to the NVM_SENTINEL value, then the EEPROM is assumed to contain a valid savefile
1
2
3
4
5
6
7
Settings Page 1minmax
0User brightness015
1User volume04
2nyi Vibration enabled01
3nyi 12hr clock enabled01
4nyi minutes before device sleeps190
5
6
7
Settings Page 2minmax
0Pomodoro length in minutes190
1Short break length in minutes190
2Long break length in minutes190
3Cycles, aka number of pomodoros before a long rest19
4Pet feeding deadline hr023
5Pet feeding deadline min059
6
7
Inventoryminmax
0Tomatoes099
1Raspberries09
2Lower byte of juice value
3Higher byte of juice value
4
5
6
7

Max juice is 9999ml as a u16

Pet Page 1
0Birth Day
1Birth Month
2Birth Year
3
4
5
6
7
Pet Page 2
0Current HP
1Sickness
2Daily Hunger
3Last Fed Day
4Last Fed Month
5Last Fed Year
6
7

Max HP = Daily Hunger + 4

Last Fed Year is probably excessive, but it'd be a weird bug if someone started the pet up after exactly 1 year, and their pet showed no signs of missed days of hunger...

Pin Out For Raspberry Pico

mermaid
graph LR
    subgraph RP2040
        Pin1
        Pin2
        %%Pin3[GND]
        Pin4
        Pin5
        Pin6
        Pin7
        %%Pin8[GND]
        Pin9
        %%Pin10
        Pin11
        Pin12
        %%Pin13[GND]
        Pin14
        Pin15
        Pin16
        Pin17
        %%Pin18[GND]
        %%Pin19
        Pin20
        %%Pin21
        Pin22

Pinout for Waveshare RP2040-Tiny

mermaid
graph LR
    subgraph RP2040-Tiny
        TinyPin0
        TinyPin1
        TinyPin2
        TinyPin3
        TinyPin4
        TinyPin5
        TinyPin6
        %%TinyPin7
        TinyPin8
        TinyPin9
        TinyPin10
        TinyPin11
        TinyPin12
        TinyPin13
        %%TinyPin14
        TinyPin15
        %%TinyPin16
        %%TinyPin17
        %%TinyPin18
        TinyPin19
        %%TinyPin20
        %%TinyPin21[3V3]

Development Breakboard Build

Below are my recommendations for how to build the development board.

Shopping List

All amazon links are tracking free and affiliate free; feel free to source these where you wish, but compatability is not guaranteed for other similar products. The current iteration of the software is absolutely tied to the LCD module below, as well as the combination DS3231 & AT24C32 board. Theoretically any RTC and NVM module could replace the aformentioned, but the I2C addresses have been set to match the product below. Additionally, any ST7735S driven 128x128 display could be adapted. All four buttons provided on the waveshare LCD hat are used as well.

Assembly

  1. Socket the Raspberry Pico into center of the Expansion Board.
  2. Socket the LCD Module into the left slot of the Expansion Board.
  3. Using a command strip, attach the breadboard to the flat side of the breakout board.
    • The 1A point of the breadboard should be in the top left, near where the word VBUS is printed on the back of the breakout board.
    • While many breadboards do come with stickers, there is often no solid insulating layer for the conductive rails, and the breakout board has sharp solder points that can stab through this thin soft layer. Whatever you do, I recommend insulating these two boards or you will risk a short...
  4. Connect the breakout terminal VSYS and tie point 1A on the breadboard, preferably using a red wire.
    • I recommend running this wire over the top of the board rather than the side as it would be natural to do, because there will be essentially no space between the Raspberry Pico and this specific Breakout Board when they are eventually mated.
  5. Connect the breakout terminal GND (the one adjacent to VSYS) and tie point 2A on the breadboard, preferably using a black wire.
    • Again, I recommend running this wire over the top of the board.
  6. Connect the data lines to the breadboard, this time allowing the wires to wrap around the side of the board (recommended colors in parenthesis):
    • GP0 to J1 (green)
    • GP1 to J2 (white)
    • GP4 to J5 (yellow)
    • GP5 to J6 (blue)
    • GP6 to J7 (green)
  7. Connect new lines on the breadboard for the RTC module:
    • C2 to C3 (black)
    • D1 to D4 (red)
    • H1 to B5 (green)
    • H2 to B6 (white)
    • H6 to B7 (blue) (I recommend routing this cable up then following the other 2 data lines)
  8. Connect new lines on the breadboard for the piezo buzzer:
    • G5 to F17 (orange)
    • E2 to G13 (black) (I recommend routing this along the top side, then down the gap I left in the I column)
  9. Connect new lines on the breadboard for the vibration motor:
    • G7 to K16 (green)
    • F13 to F15 (black)
  10. Stick the vibration motor onto the bottom of the breadboard.
  11. Attach the vibration motor wires (letting the wires lay to the right):
    • red wire to G16
    • blue wire to G15
  12. Place the piezo buzzer onto pins J17 and J13 (placement will secure the vibration motor wires)
  13. Insert a CR2032 battery into the RTC module.
  14. Place the RTC module onto pins A3, A4, A5, A6, A7, and A8.
  15. Finally, socket the breakout board onto the right slot of the Expansion Board.

Development Environment Setup

NixOS

I recommend running the following to open the VSCodium development environment:

bash
nix develop --command codium .

You can of course just use whatever text editor you like, and simply enter the flake in a terminal with:

bash
nix develop
Other Linux Distros

You'll need Rust installed and set to nightly-2023-11-16. Other versions may not be supported. You will likely also need udev to detect the raspberry pico. To use the makefile, you'll also want gnu make. You can review the flake.nix and attempt to reproduce it in your own OS.

First Time Setup

Your first time opening this repo, you'll need to setup the dependencies and enable the thumbv6m-none-eabi target. This has been automated for you:

bash
make init

Running The Code

The build process performs a number of actions. The sprites will be converted from PNG files to raw binary files containing RGB332 data. Fonts will be converted from PNG files to binary files containg black&white data. The custom PEAT audio files will be converted from plaintext files to the binary custom BEAT format. With all assets converted, the project will finally build and attempt to upload.

All of this is as simple as invoking:

bash
make run

Attributions

Placeholder artwork (lofi.png) copyright belongs to Juan Pablo Machado.

Parts

56
QtyValueFootprintReferences
10100nCapacitor_SMD:C_0402_1005MetricC1, C2, C3, C4, C5, C6, C7, C10, C11, C14
31uCapacitor_SMD:C_0402_1005MetricC8, C9, C16
34.7uCapacitor_SMD:C_0805_2012MetricC19, C20, C21
35K1Resistor_SMD:R_0201_0603MetricR13, R14, R15
35k1Resistor_SMD:R_0201_0603MetricR10, R11, R12
2100kResistor_SMD:R_0402_1005MetricR8, R9
215pCapacitor_SMD:C_0402_1005MetricC12, C13
21kResistor_SMD:R_0201_0603MetricR4, R7
21uCapacitor_SMD:C_0805_2012MetricC17, C18
227Resistor_SMD:R_0201_0603MetricR1, R2
2PH1.25mm 2PConnector_JST:JST_GH_SM02B-GHS-TB_1x02-1MP_P1.25mm_HorizontalJ2, J3
110Resistor_SMD:R_0201_0603MetricR5
110kResistor_SMD:R_0201_0603MetricR6
11kResistor_SMD:R_0402_1005MetricR3
12u2Capacitor_SMD:C_0402_1005MetricC15
1AT24CS32-SSHMPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU6
1BOOTSELButton_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mmSW2
1Btn0Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mmSW3
1Btn1Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mmSW4
1Btn2Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mmSW5
1Btn3Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mmSW6
1BuzzerBuzzer_Beeper:MagneticBuzzer_Kobitone_254-EMB84Q-ROBZ1
1CR1220 HolderBattery:BatteryHolder_LINX_BAT-HLD-012-SMTJ4
1DS3231MZPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU4
1MCP73831-2-OTPackage_TO_SOT_SMD:SOT-23-5U2
1PWRButton_Switch_SMD:SW_SPDT_CK_JS102011SAQNSW1
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1
1S-T111B33MC-OGSTFUPackage_TO_SOT_SMD:SOT-23-5U3
1SS8050Package_TO_SOT_SMD:SOT-23Q1
1ST7735 LCDcustom:ST7735_P0.8mmJ5
1USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1
1W25Q32JVSSIQPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU7
1X322512MSB4SICrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1

More from bytomancer/pico-pet

2
  • 2 layers30 × 30 mmUsb, the printed circuit board in 3D

    Usb

    bytomancer/pico-pet

    A vpet built on embedded hardware in rust

    17 parts1MIT
  • 2 layers28 × 21 mmRtc+nvm, the printed circuit board in 3D

    Rtc+nvm

    bytomancer/pico-pet

    A vpet built on embedded hardware in rust

    8 parts1MIT

Similar boards

  • 2 layers41.1 × 27.9 mmDS3231, the printed circuit board in 3D

    DS3231

    Lee34667/PCB_Kicad_Projects

    Creating a L9110 module using PCB techniques.

    17 parts1
  • 2 layers120 × 60 mmOverglade Badges, the printed circuit board in 3D

    Overglade Badges

    KaiPereira/Overglade-Badges

    NFC hackathon badges for the Overglade game jam in Singapore!

    69 parts126
  • 2 layers200 × 100 mmPH AC, the printed circuit board in 3D

    PH AC

    ph-design/PH-AC

    An arcade controller for rhythm games.

    68 parts7
  • 4 layers58.3 × 26.2 mmFireFlyV1 1, the printed circuit board in 3D

    FireFlyV1 1

    kylaro/firefly-led-controller

    PCB for the FireFly LED Controller

    59 parts1
  • 4 layers243.8 × 171.5 mmNeotron Pico, the printed circuit board in 3D

    Neotron Pico

    Neotron-Compute/Neotron-Pico

    A Neotron powered by the Raspberry Pi Pico

    242 parts250
  • 4 layers243.8 × 245.5 mmNeotron Common Hardware, the printed circuit board in 3D

    Neotron Common Hardware

    Neotron-Compute/Neotron-Common-Hardware

    Contains KiCad footprints and symbols shared across multiple Neotron projects.

    287 parts4CC-BY-SA-4.0
  • 4 layers243.8 × 171.5 mmNeotron pico, the printed circuit board in 3D

    Neotron pico

    kitspace-test-repos/kicad6-file-collection

    240 partsMIT

Questions

What parts does the Picopet use?

56 parts, built around the RP2040, W25Q32JVSSIQ, AT24CS32-SSHM-T and DS3231MZ/V+. 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.

Where can I download the Picopet KiCad files?

From the bytomancer/pico-pet repository on GitHub, at the commit this page was made from: the board is kicad/picopet/picopet.kicad_pcb and its schematic kicad/picopet/picopet.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Picopet design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).