Waveshare ESP32-C6-LCD-1.47 · open source · MIT
Una mascota que vive en 172 × 320 píxeles.A pet that lives in 172 × 320 pixels.
Seis especies en pixel-art, cinco etapas de evolución y un carácter que depende de cómo la cuides. Corre en una placa de menos de 15 € con un solo botón, y el propio chip sirve el panel para cuidarla desde el móvil.
Six pixel-art species, five evolution stages and a personality shaped by how you look after it. Runs on a board that costs under $15, with a single button, and the chip itself serves the panel you care for it from.
v…Chrome o Edge de escritorio, con la placa por USB. Nada pasa por un servidor.
v…Desktop Chrome or Edge, board plugged in over USB. Nothing goes through a server.
Este navegador no tiene Web Serial. Abre la página en Chrome o Edge de escritorio, o compila
el firmware con make flash.
This browser has no Web Serial. Open the page in desktop Chrome or Edge, or build the
firmware yourself with make flash.
Demo en vivo con los sprites reales del firmware. El tiempo va acelerado: aquí evoluciona en segundos, en la placa tarda días.
Live demo using the firmware's actual sprites. Time runs fast here: it evolves in seconds, on the board it takes days.
La web la sirve el propio chip
The chip serves its own web app
Sin app, sin cuenta, sin nube. El panel vive dentro del ESP32.
No app, no account, no cloud. The panel lives inside the ESP32.
La placa levanta su propio servidor y publica http://espgotchi.local en tu red. Abre
esa dirección en el navegador de cualquier móvil, guárdala en la pantalla de inicio y ya tienes la
companion app. Nada sale de tu WiFi.
The board runs its own server and announces http://espgotchi.local on your network. Open
that address in any phone browser, add it to the home screen, and that is your companion app. Nothing
leaves your WiFi.
Care
Log
- Meal: ramen
- Played with Pixel
- Uh oh, Pixel made a mess
Settings
- 🪞Espejo de la pantalla en tiempo realReal-time screen mirror
El panel dibuja lo mismo que ves en la placa, con los mismos sprites y animaciones. El de este móvil es el pet de arriba: pulsa un botón aquí y mira el espejo.
The panel draws exactly what the board shows, same sprites and animations. This phone mirrors the pet above: press a button here and watch the mirror.
- 🍔Acciones y log de 16 eventosActions and a 16-event log
Comer, snack, jugar, acariciar, limpiar, luces, medicina, eclosionar y huevo nuevo con selector de especie. Cada cosa que pasa queda en el log con su hora.
Feed, snack, play, pet, clean, lights, medicine, hatch and new egg with a species picker. Everything that happens lands in the log with its time.
- ⚙️Ajustes del dispositivoDevice settings
Renombrar al pet, brillo en vivo, orientación horizontal o vertical (con giro) y zona horaria POSIX para el modo noche.
Rename the pet, live brightness, landscape or portrait orientation (flipped too) and a POSIX time zone for night mode.
- 📶WiFi y portal cautivoWiFi and captive portal
Sin credenciales, la placa abre la red
ESPgotchi-XXXXy el portal te lleva al formulario. Después puedes cambiar de red desde el propio panel.With no credentials the board opens the
ESPgotchi-XXXXnetwork and the portal takes you to the form. Later you can switch networks from the panel itself.
Es una sola página en JavaScript sin dependencias: unos 26 KB que viajan comprimidos a 9 KB
desde la flash del chip con Content-Encoding: gzip. Los sprites los lee de /sprites.json,
el mismo fichero que usa esta página.
It is a single vanilla JavaScript page with no dependencies: about 26 KB, shipped gzipped
to 9 KB from the chip's flash with Content-Encoding: gzip. It reads its sprites from
/sprites.json, the same file this page uses.
Seis especies
Six species
Del huevo al anciano, y lo que pase por medio depende de ti.
From egg to elder, and what happens in between is up to you.
Cada especie tiene su propio huevo, sus frames de bebé, niño, adolescente y adulto, y tres formas adultas. Con un error de cuidado o menos, salud alta y buen ánimo sale la forma elite. Con cinco errores o la salud por los suelos, la feral. El resto, el adulto normal. Los dormidos no están dibujados: se generan cerrando los ojos del sprite despierto. Boo y Jack son la edición especial de Halloween: un fantasma y una calabaza que evolucionan igual que el resto.
Each species has its own egg, its baby, child, teen and adult frames, and three adult forms. One care mistake or fewer, high health and good mood gets you the elite form. Five mistakes or rock-bottom health, the feral one. Everything else, the regular adult. Sleeping frames are not drawn by hand: they are generated by closing the eyes of the awake sprite. Boo and Jack are the Halloween special edition: a ghost and a pumpkin that evolve like everyone else.
Cuidados
Care
Cinco barras, y todas bajan solas.
Five bars, and every one of them drains on its own.
La simulación corre una vez por segundo en la placa. Los números de aquí son los de verdad,
sacados de pet.cpp.
The simulation ticks once a second on the board. These numbers are the real ones, straight
from pet.cpp.
HambreHunger
−1 / 90 s despierto. Una comida da +30, un snack +8 y engorda. Si está lleno, rechaza el plato.while awake. A meal gives +30, a snack +8 and adds weight. When full, it refuses the plate.
DiversiónFun
−1 / 120 s. Jugar da +25 y gasta energía; acariciar +8 y funciona incluso dormido (ronronea).Playing gives +25 and costs energy; petting +8 and works even asleep (it purrs).
EnergíaEnergy
−1 / 150 s. Al llegar a 10 se duerme agotado. Dormido recupera +1 cada 20 s y las demás barras casi se congelan.At 10 it falls asleep exhausted. Asleep it recovers +1 every 20 s and the other bars nearly freeze.
LimpiezaHygiene
−1 / 180 s, el triple con una caca en la habitación. Las cacas llegan unos diez minutos después de comer, hasta tres.three times faster with a poop in the room. Poops show up about ten minutes after a meal, up to three.
SaludHealth
±1 / 30 s. Baja con hambre a cero, suciedad a cero o enfermedad; sube cuando todo lo demás está por encima de 40. A cero, se acabó.Drops with zero hunger, zero hygiene or sickness; climbs when everything else is above 40. At zero, it is over.
Errores de cuidadoCare mistakes
Cada vez que enferma cuenta uno. Son los que deciden la forma adulta a las 48 h, y no se borran.Every illness counts as one. They decide the adult form at 48 h, and they never reset.
Si lo dejas solo
If you leave it alone
- ~2.5 hhambre a cerohunger hits zero
- +15–30 minprobablemente enfermamost likely gets sick
- ~4 hsalud a cerohealth hits zero
- 6 sde BOOT para un huevo nuevo, generación +1on BOOT for a new egg, generation +1
Apagada, la placa no simula nada; al volver a encenderse con hora NTP recupera lo que pasó, con un tope de ocho horas. Dormido con las luces apagadas, todo va diez veces más lento.
Powered off, the board simulates nothing; on the next boot with NTP time it catches up on what happened, capped at eight hours. Asleep with the lights off, everything runs ten times slower.
Instalar
Install
Del cable USB al pet en tres minutos.
From USB cable to pet in three minutes.
- Flashea desde el navegador.Flash from the browser.
Conecta la placa por USB-C y pulsa Instalar en la placa arriba. Usa Web Serial, así que hace falta Chrome o Edge de escritorio. Si no la detecta: mantén BOOT, toca RST, suelta BOOT.
Plug the board in over USB-C and press Install on the board above. It uses Web Serial, so it needs desktop Chrome or Edge. If it is not detected: hold BOOT, tap RST, release BOOT.
- Conéctate a
ESPgotchi-XXXX.JoinESPgotchi-XXXX.Es una red abierta que la placa levanta mientras no tiene WiFi guardado. El portal cautivo se abre solo; si no, entra en
http://192.168.4.1. Elige tu red de la lista y guarda.An open network the board brings up while it has no saved WiFi. The captive portal opens by itself; if not, go to
http://192.168.4.1. Pick your network from the list and save. - Abre
http://espgotchi.local.Openhttp://espgotchi.local.La placa reinicia, se une a tu red y publica su nombre por mDNS. Ahí está el espejo de la pantalla, las acciones, el log, el brillo, la orientación y la zona horaria. Guárdalo en la pantalla de inicio del móvil.
The board reboots, joins your network and announces itself over mDNS. There you get the screen mirror, the actions, the log, brightness, orientation and time zone. Add it to your phone's home screen.
# O compílalo tú (arduino-cli + Node ≥ 18)# Or build it yourself (arduino-cli + Node ≥ 18)
git clone https://github.com/Adrianmtzb/espgotchi
cd espgotchi
make deps # core esp32 3.2.0 + librerías fijadas# esp32 core 3.2.0 + pinned libraries
make flash # genera assets, compila y sube# generates assets, compiles, uploads
make monitor # consola serie, escribe 'help'# serial console, type 'help'
| Función | Function | GPIO | Notas | Notes |
|---|---|---|---|---|
| LCD ST7789 172×320 | 6 7 14 15 21 | SPI 80 MHz, offset de columna 34, INVON | SPI 80 MHz, column offset 34, INVON | |
| Backlight | 22 | MOSFET, PWM 5 kHz | MOSFET, 5 kHz PWM | |
| LED WS2812 | 8 | rgbLedWrite | ||
| BOOT | 9 | activo bajo, pull-up en placa | active low, on-board pull-up | |
| USB | — | USB-Serial-JTAG nativo del C6 | C6 native USB-Serial-JTAG |
Por dentro
Inside
Un JSON dibuja la pantalla, la web y esta página.
One JSON draws the screen, the web panel and this page.
Los sprites son texto: filas de dígitos que apuntan a una paleta de ocho colores. Un generador los convierte en tablas C para el firmware; la web embebida y esta demo leen el mismo fichero tal cual. Cambias un píxel en un sitio y cambia en los tres.
Sprites are text: rows of digits pointing into an eight-color palette. A generator turns them into C tables for the firmware; the embedded web panel and this demo read the very same file. Change one pixel in one place and it changes in all three.
shared/sprites.json 24×24 pets, 16×16 icons, species themes
│
├── tools/gen_sprites.mjs ──▶ firmware/espgotchi/sprites.h
│ └── tools/sleepy.mjs closed-eye frames, derived
├── tools/gen_web.mjs ───────▶ firmware/espgotchi/web_assets.h
│ (web/index.html + sprites.json, gzip, PROGMEM)
└── served as-is ───────────▶ /sprites.json on the board, and here
Cuídalo con una IALet an AI look after it
El repo incluye un servidor MCP (mcp/) que envuelve la API: un asistente como
Claude puede preguntar get_state, recibir consejos de qué le hace falta y llamar a
feed, play, clean o medicine. Un prompt
caretaker le enseña a no pasarse con los snacks ni despertarlo.
The repo ships an MCP server (mcp/) wrapping the API: an assistant like
Claude can ask get_state, get advice on what the pet needs and call feed,
play, clean or medicine. A caretaker prompt teaches it
not to overdo the snacks or wake the pet up.
claude mcp add espgotchi -e ESPGOTCHI_HOST=espgotchi.local \
-- node /path/to/espgotchi/mcp/server.mjs
| Ruta | Route | Qué hace | What it does |
|---|---|---|---|
GET /api/state | Nombre, especie, etapa, forma, las cinco barras, animación en curso | Name, species, stage, form, the five bars, current animation | |
GET /api/events | Los últimos 16 eventos | The last 16 events | |
GET /api/info | Firmware, IP, RSSI, heap, hora local, brillo | Firmware, IP, RSSI, heap, local time, brightness | |
POST /api/action | {"type":"feed"} · snack · play · pet · clean · sleep · medicine · hatch · reset | ||
POST /api/settings | Zona horaria, brillo, orientación | Time zone, brightness, orientation | |
POST /api/name | Renombrar (15 caracteres) | Rename (15 characters) |