

Picopet
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
7RP2040
LQFN-56(7x7)12bit 133MHz 30 LQFN-56(7x7) Microcontrollers (MCU/MPU/SOC) ROHSRaspberry PiMicrocontrollers (MCU/MPU/SOC)W25Q32JVSSIQ
SOIC-8-208mil-40℃~+85℃ 100,000 cycles 133MHz 1uA 2.7V~3.6V 20 Years 32Mbit 3ms SPI SOIC-8-208mil NOR FLASH ROHSWinbondNOR FLASHAT24CS32-SSHM-T
SOIC-8-40℃~+85℃ 1,000,000 cycles 1.7V~5.5V 100 years 1MHz 32Kbit 3mA 5ms 6uA 900ns Hardware write protection function、Noise suppression function、Built-in power-on reset (POR) I2C SOIC-8 EEPROM ROHSMicrochip TechnologyEEPROMDS3231MZ/V+
SOIC-8-40℃~+85℃ 2.3V~5.5V Built-in I2C Temperature compensation、Backup power management and battery charging、Alarm function、Locking and tamper-proof、Periodic interrupt output SOIC-8 Real Time Clocks ROHSMaxim Integrated (Analog Devices)Real Time ClocksS-T111B33MC-OGSTFU
SOT-23-5-40℃~+85℃ 1 3.3V 5.5V Fixed Over Current Protection Positive SOT-23-5 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSABLICVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsSS8050
SOT-323-55℃~+150℃ 1 NPN 1.5A 100MHz 100nA 200 25V 300mW 500mV 5V NPN SOT-23 Bipolar (BJT) ROHSJiangsu Changjing Electronics Technology (CJ)Bipolar (BJT)X322512MSB4SI
SMD3225-4P-40℃~+85℃ 12MHz 20pF 80Ω Crystal Oscillator ±10ppm ±20ppm SMD3225-4P Crystals ROHSYXCCrystals
README
README.mdPico Pet
A virtual pet that requires the user to complete pomodoros for the health of their pet.
Hardware
- Raspberry Pi Pico
- Raspberry Pi Pico for development
- Waveshare RP2040-Tiny for release
- Waveshare 1.44" LCD
- DS3231
- Any 5v to 3v3 shifter for the DS3231, for example
- Any 5v speaker or buzzer, for example
- Any 3v-5v vibrating motor, for example
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 Start | Page End | Module |
|---|---|---|
| 000 | 000 | Header |
| 001 | 002 | Settings |
| 003 | 003 | Inventory |
| 004 | 005 | Pet |
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 | |
|---|---|
| 0 | if 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 1 | min | max | |
|---|---|---|---|
| 0 | User brightness | 0 | 15 |
| 1 | User volume | 0 | 4 |
| 2 | nyi Vibration enabled | 0 | 1 |
| 3 | nyi 12hr clock enabled | 0 | 1 |
| 4 | nyi minutes before device sleeps | 1 | 90 |
| 5 | |||
| 6 | |||
| 7 |
| Settings Page 2 | min | max | |
|---|---|---|---|
| 0 | Pomodoro length in minutes | 1 | 90 |
| 1 | Short break length in minutes | 1 | 90 |
| 2 | Long break length in minutes | 1 | 90 |
| 3 | Cycles, aka number of pomodoros before a long rest | 1 | 9 |
| 4 | Pet feeding deadline hr | 0 | 23 |
| 5 | Pet feeding deadline min | 0 | 59 |
| 6 | |||
| 7 |
| Inventory | min | max | |
|---|---|---|---|
| 0 | Tomatoes | 0 | 99 |
| 1 | Raspberries | 0 | 9 |
| 2 | Lower byte of juice value | ||
| 3 | Higher byte of juice value | ||
| 4 | |||
| 5 | |||
| 6 | |||
| 7 |
Max juice is 9999ml as a u16
| Pet Page 1 | |
|---|---|
| 0 | Birth Day |
| 1 | Birth Month |
| 2 | Birth Year |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 |
| Pet Page 2 | |
|---|---|
| 0 | Current HP |
| 1 | Sickness |
| 2 | Daily Hunger |
| 3 | Last Fed Day |
| 4 | Last Fed Month |
| 5 | Last 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
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
Pin22Pinout for Waveshare RP2040-Tiny
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.
- Components
- Expansion Board https://www.amazon.com/dp/B08X6FPRYF/
- Breakout Board https://www.amazon.com/dp/B0B982B9HV/
- Breadboard https://www.amazon.com/dp/B07VFFXPH3/
- LCD Module https://www.amazon.com/dp/B0957NJP97/
- Raspberry Pico w/ presoldered headers https://www.amazon.com/dp/B08X7HN2VG/
- RTC Board https://www.amazon.com/dp/B09KPC8JZQ/
- Vibrating Motor https://www.amazon.com/dp/B073YFR5WR/
- Piezo Buzzer https://www.amazon.com/dp/B07P6X9YX7/
- Tools/Resources
- 22 AWG solid hookup wire https://www.amazon.com/dp/B07TX6BX47/
- 22 AWG wire stripper https://www.amazon.com/dp/B06X9875Z7/
- CR2032 battery https://www.amazon.com/dp/B071D4DKTZ/
- Command strip https://www.amazon.com/dp/B07P32RHQ4/
Assembly
- Socket the Raspberry Pico into center of the Expansion Board.
- Socket the LCD Module into the left slot of the Expansion Board.
- 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...
- 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.
- 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.
- 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)
- 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)
- 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)
- Connect new lines on the breadboard for the vibration motor:
- G7 to K16 (green)
- F13 to F15 (black)
- Stick the vibration motor onto the bottom of the breadboard.
- Attach the vibration motor wires (letting the wires lay to the right):
- red wire to G16
- blue wire to G15
- Place the piezo buzzer onto pins J17 and J13 (placement will secure the vibration motor wires)
- Insert a CR2032 battery into the RTC module.
- Place the RTC module onto pins A3, A4, A5, A6, A7, and A8.
- 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:
nix develop --command codium .You can of course just use whatever text editor you like, and simply enter the flake in a terminal with:
nix developOther 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:
make initRunning 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:
make runAttributions
Placeholder artwork (lofi.png) copyright belongs to Juan Pablo Machado.
Parts
56| Qty | Value | Footprint | References |
|---|---|---|---|
| 10 | 100n | Capacitor_SMD:C_0402_1005Metric | C1, C2, C3, C4, C5, C6, C7, C10, C11, C14 |
| 3 | 1u | Capacitor_SMD:C_0402_1005Metric | C8, C9, C16 |
| 3 | 4.7u | Capacitor_SMD:C_0805_2012Metric | C19, C20, C21 |
| 3 | 5K1 | Resistor_SMD:R_0201_0603Metric | R13, R14, R15 |
| 3 | 5k1 | Resistor_SMD:R_0201_0603Metric | R10, R11, R12 |
| 2 | 100k | Resistor_SMD:R_0402_1005Metric | R8, R9 |
| 2 | 15p | Capacitor_SMD:C_0402_1005Metric | C12, C13 |
| 2 | 1k | Resistor_SMD:R_0201_0603Metric | R4, R7 |
| 2 | 1u | Capacitor_SMD:C_0805_2012Metric | C17, C18 |
| 2 | 27 | Resistor_SMD:R_0201_0603Metric | R1, R2 |
| 2 | PH1.25mm 2P | Connector_JST:JST_GH_SM02B-GHS-TB_1x02-1MP_P1.25mm_Horizontal | J2, J3 |
| 1 | 10 | Resistor_SMD:R_0201_0603Metric | R5 |
| 1 | 10k | Resistor_SMD:R_0201_0603Metric | R6 |
| 1 | 1k | Resistor_SMD:R_0402_1005Metric | R3 |
| 1 | 2u2 | Capacitor_SMD:C_0402_1005Metric | C15 |
| 1 | AT24CS32-SSHM | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U6 |
| 1 | BOOTSEL | Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mm | SW2 |
| 1 | Btn0 | Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mm | SW3 |
| 1 | Btn1 | Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mm | SW4 |
| 1 | Btn2 | Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mm | SW5 |
| 1 | Btn3 | Button_Switch_SMD:SW_SPST_EVQP2_MiddlePushTravel_H2.5mm | SW6 |
| 1 | Buzzer | Buzzer_Beeper:MagneticBuzzer_Kobitone_254-EMB84Q-RO | BZ1 |
| 1 | CR1220 Holder | Battery:BatteryHolder_LINX_BAT-HLD-012-SMT | J4 |
| 1 | DS3231MZ | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U4 |
| 1 | MCP73831-2-OT | Package_TO_SOT_SMD:SOT-23-5 | U2 |
| 1 | PWR | Button_Switch_SMD:SW_SPDT_CK_JS102011SAQN | SW1 |
| 1 | RP2040 | Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm | U1 |
| 1 | S-T111B33MC-OGSTFU | Package_TO_SOT_SMD:SOT-23-5 | U3 |
| 1 | SS8050 | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | ST7735 LCD | custom:ST7735_P0.8mm | J5 |
| 1 | USB_C_Receptacle_USB2.0_14P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J1 |
| 1 | W25Q32JVSSIQ | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U7 |
| 1 | X322512MSB4SI | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
More from bytomancer/pico-pet
2- 2 layers30 × 30 mm

- 2 layers28 × 21 mm

Similar boards
- 2 layers41.1 × 27.9 mm

- 2 layers120 × 60 mm

Overglade Badges
KaiPereira/Overglade-Badges
NFC hackathon badges for the Overglade game jam in Singapore!
69 parts126 - 2 layers200 × 100 mm

- 4 layers120 × 80 mm

- 4 layers58.3 × 26.2 mm

- 4 layers243.8 × 171.5 mm

- 4 layers243.8 × 245.5 mm

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 mm

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).