This project turns a Waveshare ESP32-S3 board with a 5-inch LCD into a digital Pokemon card display. You can search for cards online, download them, and display them on the device.
- Shows Pokemon cards on a 5-inch LCD screen
- Connect via WiFi to control it remotely
- Download cards from the web interface
- Stores cards on SD card
- Can run in slideshow mode
- Waveshare ESP32-S3 RGB 5" LCD board (1024x600 version works best)
- MicroSD card (FAT32 format)
- WiFi connection (optional)
- Wiki: ESP32-S3-Touch-LCD-5 Wiki
- Schematic: ESP32-S3-Touch-LCD-5-Sch.pdf
- Open Arduino IDE
- Go to
File→Preferences - Add this URL to "Additional Board Manager URLs":
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Go to
Tools→Board→Boards Manager - Search for "ESP32" and install "esp32 by Espressif Systems"
- Configure Board Settings:
- Select
Tools→Board→ESP32 Arduino→ESP32S3 Dev Module - Set the following parameters:
- USB CDC On Boot: Enabled
- Flash Size: 16MB (or according to your board)
- Partition Scheme: Default 4MB with spiffs
- Select
- Upload the Firmware:
- Open
PokemonExpositor.inoin Arduino IDE - Connect your Waveshare ESP32-S3 board via USB
- Click the Upload button (→)
- Open
Go to the tools folder and run:
pip install -r requirements.txt
npm installStart the server:
node server.jsOpen http://localhost:3000 in your browser. Search for cards and download them. The site can be slow sometimes, just wait it out.
Cards get saved to images/raw/.
- Put a FAT32 SD card in your device and turn it on
- It'll create an
imagesfolder automatically - Copy your cards from
images/raw/to the SD card'simagesfolder - Put the SD card back in the device
The device connects to WiFi in two ways:
Client mode: Connects to your WiFi network. Check the serial monitor for the IP address.
Access Point mode: If it can't connect to WiFi, it creates its own network called "PokemonExpositor". Connect to it and go to http://192.168.4.1.
📦 PokemonCardExpositor-Firmware
├── 🎮 PokemonExpositor.ino # Main firmware file
├── 📊 *.h / *.cpp # System components
├── 🖼️ images/ # Image storage
│ ├── converted/ # Processed images
│ ├── downloaded/ # Raw downloads
│ └── raw/ # Ready-to-use images
└── 🛠️ tools/ # Development tools
├── 🌐 server.js # Node.js web server
├── 🐍 *.py # Python processing scripts
├── 📦 package.json # Node dependencies
└── 📋 requirements.txt # Python dependencies
Edit project_config.h to change:
- WiFi settings
- Display brightness and timing
- Debug output
- Enable/disable features
Device won't start: Check your SD card is FAT32 formatted. Look at the serial monitor (115200 baud).
WiFi not working: Double-check your WiFi password. Try access point mode instead.
No cards showing: Make sure images are in the images/ folder on the SD card.
Web interface won't load: Check the IP address in serial monitor. Try a different browser.
Hardware stuff:
- Some fast SD cards don't work - stick to Class 10 or slower (tested only with a 32GB samsung one)
- Screen can flickers sometimes when changing images, expecially in the upper part of the card
Software stuff:
- Pokemon API sometimes blocks you if you download too much (easy to reach, you need to wait and then add the new cards after some hours)
- Really big images (>2048px) might not convert properly
- WiFi drops out occasionally (it tries to reconnect automatically)
Performance:
- Takes 10-15 seconds to boot up
- First image load is slow while it processes
- Card search can be slow when lots of people are using the API
Compatibility:
- Arduino IDE 2.3+ might not compile - use 2.2.x
- ESP32 package newer than 2.0.11 can break the display
- Only FAT32 SD cards work
Quick fixes:
- If it crashes, restart it
- If API is limiting you, wait a couple hours
- If WiFi is flaky, power cycle the device
- If compilation fails, clear Arduino cache and restart
Most of these are being worked on. Check the GitHub issues for updates.
Anyone can contribute! Here's how:
- Found a bug? Report it
- Have an idea? Suggest it
- Want to code? Fork the repo and make a pull request
- Documentation unclear? Help improve it
- Built one? Show it off!
Standard GitHub workflow:
- Fork this repo
- Make a branch (
git checkout -b cool-feature) - Commit changes (
git commit -m 'Add cool feature') - Push it (
git push origin cool-feature) - Open a pull request
This is licensed under CC BY-NC-SA 4.0.
What that means:
- ✅ You can share, copy, and modify this
- ✅ You must credit the original project
- ✅ If you change it, share under the same license
- ❌ You can't use it commercially
Full license: CC BY-NC-SA 4.0
Pokemon and Pokemon cards are trademarks of their owners. This is just for fun and learning.
Made for Pokemon card fans
