Example submission

This submission is still in development, is currently in progress, and is not the final submission.

Tamagotchi Breadboard Journal

Session 1 | March 21 | ~45 min

Getting Started: Why a Tamagotchi?

I want to build a polished breadboard prototype of my Tamagotchi project. It's a project I already care about, so it felt like a natural fit for making something real and interactive rather than just a basic LED circuit. The kit gives me enough components to actually replicate the core Tamagotchi experience: a display, input buttons, a buzzer, and some sensors for ambient awareness.

ESP32 Schematic Symbol

First up: getting my ESP32 into KiCad. I couldn't find the exact schematic symbol for my specific board on SnapMagic or Ultra Librarian, and Tinkercad doesn't support the components I need, so I had to make my own symbol from scratch using a reference image of the board pinout.

Then disaster struck. I lost all my progress after a KiCad crash and had to restart the symbol from scratch.

After the redo and referencing the pinout image again, I finally finished it:

ESP32 Schematic Symbol

Time: ~45 min (including the redo after the crash)

Session 2 | March 21 | ~30 min

Adding the OLED Display

I want to be able to see my pet, so the next step is wiring up an OLED. I found my specific display via reverse image search: a 1.29" 128x64 I2C OLED.

I checked the datasheet to figure out pull-up resistors. The datasheet doesn't specify internal pull-ups, which means I need external pull-up resistors on the I2C lines (SDA and SCL).

My available resistor values were 220 ohm, 1k, and 10k. The recommended value for I2C pull-ups is typically around 4.7k, so 1k is the closest I have and will work fine.

I later confirmed via this post that the ESP32's internal pull-ups are around 45k, which is way too high for I2C. Such high resistance limits current too much for reliable signaling, so external pull-ups are definitely the right call here.

Per the ESP32 Arduino pin definitions, the default I2C pins are:

  • SDA: GPIO 21
  • SCL: GPIO 22

OLED Schematic Symbol

OLED + ESP32 Wiring

Time: ~30 min

Session 3 | March 21 | ~5 min

Adding Buttons

Tamagotchis have buttons, so I need those. I went with an active-low layout, which is the most common approach:

  • One side of each button connects to GND
  • The other side connects to a GPIO pin with the ESP32's internal pull-up enabled
  • This means the pin reads HIGH at rest and LOW when pressed
Why active-low?

Active-low means the button is "active" (pressed) when the signal is LOW (0V / GND). The internal pull-up resistor holds the pin HIGH when idle. This is clean and simple, no extra resistors needed, just the button and ground.

Schematic with Buttons

Time: ~5 min

Session 4 | March 21 | ~5 min

Adding a Buzzer

Tamagotchis make sounds, and I have a buzzer available. I added one from a similar LCSC listing. Wiring is simple: one pin to a GPIO output, the other to GND. The GPIO will drive it with a square-wave signal to produce tones.

Schematic with Buzzer

Time: ~5 min

Session 5 | March 21 | ~20 min

3D Assembly in Onshape

I wanted a visual of how all these components actually fit on the breadboard before physically placing things. I found an 830-hole breadboard model on GrabCAD, imported it into Onshape, then did the same for the other components and assembled everything together.

This was useful for two reasons: it helped me see whether component spacing would be an issue, and it surfaced the interesting question of whether an ESP32 even fits on a standard breadboard. After testing, a bent wire bridges the ESP32 across the gap perfectly and still makes contact on both rails.

Breadboard 3D Assembly

Time: ~20 min

Session 6 | March 21 | ~1 hr

Adding the Photosensitive Resistor Module

I thought it'd be a fun mechanic if the Tamagotchi gets tired or sleepy when it's dark, and the photosensitive resistor module is perfect for this. Finding usable documentation took surprisingly long. I finally found the wiring info here.

The wiring itself was simple. The KiCad symbol was not.

I ran into a really frustrating bug: the parent symbol was named photomod, but the sub-symbols were named TFT_MSP1803_0_1 and TFT_MSP1803_1_1. In KiCad, sub-symbols must match the parent name exactly, which I had to discover through trial and error. This caused errors that nuked my schematic progress again.

My workaround: instead of creating a new schematic from scratch (which kept breaking), I imported a working schematic as a base and built from there.

Photosensor Schematic Symbol

Schematic with Photosensor

Time: ~1 hr

Total time so far: ~2h 45min

Build with ❤️ by teenagers, for teenagers at Hack Club

Hack Club is a 501(c)(3) nonprofit and network of 60k+ technical high schoolers. We believe you learn best by building so we're creating community and providing grants so you can make awesome projects. In the past few years, we've partnered with GitHub to run Summer of Making, hosted the world's longest hackathon on land, and ran Canada's largest high school hackathon.

enes