I've used Pwnagotchis for a while, and they were a big part of how I learned to use SBCs and some of the basics of wireless security. Years went by and I got sucked into tinkering with ESP32 boards. I wanted to see if I could make a pwnagotchi on an ESP32, specifically the Waveshare ESP32-S3-ePaper-1.54.
I found minigotchi-ESP32 by dj1ch and started working from that. I kept adding to it until it became its own thing, and eventually I pulled the minigotchi guts out completely. What's left is Nico. I wanted it to be shareable and easy for other people to build too, so the whole thing is on GitHub under GPLv3.
Code:
The hardware
It's a single off-the-shelf board, no custom PCB. The Waveshare ESP32-S3-ePaper-1.54 has:
- a 200x200 SSD1681 e-paper screen
- an SHTC3 temp/humidity sensor
- a PCF85063 real-time clock
- an ES8311 audio codec with a mic and a little speaker
- a microSD slot
- two buttons (BOOT and PWR)
- a LiPo header with onboard charging
- a 2x6 header on the back
Add a single-cell LiPo and a micro SD card and that's it. Everything runs off the two buttons: tap BOOT for next, double tap for back a step, hold to go back, PWR to select.
One thing that tripped me up early: the e-paper has a power enable on GPIO6 that's active-low. If you don't drive it low, the panel just stays dark, which is why a lot of plain e-ink sketches show nothing on this board.
The pet
Nico is a little tamagotchi. He has food, fun, energy, and a bond level that drift over time (even while he's off), and you look after him with the buttons.
Every Nico rolls hidden stats when he hatches: what temperature feels comfy, early bird or night owl, how fast he gets hungry, shy or outgoing, and a favorite game he'll grin about even when he loses. There's no stat screen. You figure your Nico out by living with him, and as your bond grows a traits page spells it out one trait at a time.
The one trait you can see is his body. Every face is drawn inside a bracket shell: round (^-^), boxy [^-^], curly {^-^}, a cat (=^-^=), bear ears o(^-^)o, and a few more. The faces are kaomoji that change with his mood and with his body temperature. The SHTC3 sits right next to the warm guts of the board so it reads way hotter than the room, so I just made that Nico's body temp. He gets sweaty when he's hot and shivery when he's cold.
He levels up through ranks from Hatchling to Legend and unlocks about 70 bonus faces and a veteran badge on the way. XP comes from the radio stuff, winning games, taking care of him, and a slow drip just from being awake and looked after.
Once you raise a Nico all the way to Legend you can release him. He gets a little send-off, waves goodbye, and the next generation wanders in. The new one inherits one gene and one "heirloom" face, and every generation unlocks rarer bodies. Every Nico you release goes into a Hall of Fame for good. It works the other way too: if you neglect a Nico for days he'll leave on his own (with plenty of warning first, and you can turn that off in Settings).
Games
- 21 (blackjack) with Nico as the dealer
- Pig dice, a push-your-luck race to 100. You watch Nico decide roll by roll whether to keep going or bank, and how greedy he gets depends on whether he's shy or outgoing.
- Copynico: hold PWR and talk into the mic, and he plays it back pitched up in a little "neko" voice.
- Treasure hunt: a metal detector game. Nico locks onto a nearby network as buried treasure and you walk around sweeping for the strongest signal to dig it up. Loot is rolled by rarity, and each network can only be dug once a day.
- SSID fishing: cast a line and the wait for a bite is a Wi-Fi scan. Each AP is a fish (SSID is the name, signal is the size, encryption is the rarity), and every catch goes into a logbook on the SD card. It's a plain scan, no connecting, no attacking.
I'm still adding more.
The radio stuff
Nico only has one radio, so capture and tracker are one or the other.
Packet capture: passive sniffing to a normal...
Read more »
Dallin Adams
CiferTech
Udi Tirosh