The ESP32 Cheap Yellow Display is one of the best value development boards available right now. A 2.8 inch colour touchscreen, WiFi, Bluetooth, and a 240MHz dual-core processor, all on a single board with no wiring required. This project turns it into a live stock and cryptocurrency price tracker that sits on your desk and updates automatically.
Prices are pulled from Finnhub for stocks and CoinGecko for crypto. Configuration is handled entirely through a browser on your local network, so there is no need to touch the code to change tickers, refresh rates, or holdings. Up to eight symbols can be tracked at once, including US stocks, crypto, and forex pairs.
Features
- Live stock prices via Finnhub (free API key required)
- Live crypto prices via CoinGecko (no key required)
- Touch to drill into a detail view for any ticker
- Portfolio mode showing holdings value and day profit and loss
- Price alerts with LED flash on breach
- Dark and light mode
- Browser-based configuration panel accessible from any device on your network
- JSON API endpoint at
/api/quotesfor Home Assistant or Node-RED integration

What You Need
- ESP32 CYD (ESP32-2432S028) - The display, touch, and WiFi are all built in
- USB-C cable
- USB power supply (any 5V phone charger works)
- A WiFi network
- A free Finnhub API key from finnhub.io
No breadboard, no jumper wires, no soldering. The CYD has everything on board, which makes it an ideal platform for display projects like this one.
Prefer to skip the flashing step? The pre-configured version comes with the firmware already loaded. Connect it to WiFi and you are ready to go. Get the pre-flashed CYD here.
1. Set Up Arduino IDE
Arduino IDE is the software used to compile and upload the firmware to the ESP32. A full setup guide for ESP32 with Arduino IDE is available here: Installing and Configuring Arduino IDE for ESP32.
During setup, install the ESP32 board package by Espressif. Once installed, open Arduino IDE, go to Tools > Board, and select ESP32 Dev Module.

2. Install the Required Libraries
Four libraries are required. Each can be installed through the Arduino Library Manager (Sketch > Include Library > Manage Libraries).
- TFT_eSPI by Bodmer
- XPT2046_Touchscreen by Paul Stoffregen
- ArduinoJson by Benoit Blanchon
- WiFiManager by tzapu

A full walkthrough of installing libraries and using the serial monitor is available here: Installing Libraries and Using the Serial Monitor on ESP32.
Important: TFT_eSPI Configuration
TFT_eSPI requires a hardware configuration file to work correctly with the CYD. The default configuration will produce a blank or garbled screen. This is the most common setup mistake for CYD projects.
A pre-configured User_Setup.h file is included in the /config folder of the GitHub repository. Copy this file into the TFT_eSPI library folder, replacing the existing User_Setup.h. The library folder is typically located at Documents/Arduino/libraries/TFT_eSPI/.
3. Download the Code
The full source code is available on GitHub at github.com/Zaitronics/esp32-cyd-stock-ticker.
Download the repository as a ZIP file using the green Code button, then extract it to a location of your choice. Open the .ino file in Arduino IDE. If you are asked to create a folder when opening the file, click OK

4. Flash the Firmware
Connect the CYD to your computer using a USB-C cable. In Arduino IDE, go to Tools > Port and select the COM port that appears when the board is connected. On Windows this will be a COM number. On Mac and Linux it will appear as /dev/cu.usbserial- or similar.
Click the Upload button (the right-facing arrow) to compile and flash the firmware. The process takes around 30 to 60 seconds. The CYD screen will show a WiFi connection prompt once flashing is complete.
If the upload fails or the serial output shows errors, the serial monitor guide linked in Step 2 covers the most common causes.
5. Connect to WiFi
On first boot, the CYD will create a WiFi access point named StockTicker-Setup. Connect to this network from your phone or computer. A captive portal will open automatically (or navigate to 192.168.4.1 if it does not).
Enter your home WiFi credentials and your Finnhub API key. A free Finnhub key is available at finnhub.io with no credit card required. CoinGecko for crypto prices requires no key at all.
After saving, the CYD will connect to your network and display the local IP address on screen. Subsequent boots connect automatically without repeating this step.

6. Configure Your Tickers
Open the IP address shown on the CYD screen in any browser on the same network. The configuration panel allows you to set tickers, refresh rate, brightness, holdings, and price alerts without touching the code.
Ticker Formats
| Type | Format | Example |
|---|---|---|
| US Stocks | Symbol | AAPL |
| Cryptocurrency | CRYPTO:coingecko-id |
CRYPTO:bitcoin |
| Forex | Finnhub format | OANDA:EUR_USD |
Crypto IDs use the CoinGecko identifier, which is the lowercase slug from the CoinGecko URL. For example, bitcoin, ethereum, or solana.

API Rate Limits and Refresh Rate
The Finnhub free tier allows 60 requests per minute. CoinGecko free allows 30 requests per minute. Each ticker fetch takes approximately 800ms. The default refresh interval of 15 seconds provides comfortable headroom for up to 8 tickers on both free tiers. The minimum allowed refresh is 10 seconds.
Additional Features
Portfolio Mode
Portfolio mode displays the total value of your holdings and the day profit and loss for each position. Enter the number of shares or units held for each ticker in the Holdings column of the configuration panel.

Light Mode
The display supports both dark and light mode, switchable from the configuration panel.

Price Alerts
High and low price alerts can be set for any ticker. When a price breaches the threshold, the onboard RGB LED flashes yellow. A dot indicator on the grid cell also highlights the breach. Set either value to 0 to disable that alert.
Home Assistant and Node-RED Integration
A JSON API is available at http://[device-ip]/api/quotes and returns current price data for all configured tickers. This endpoint can be polled by Home Assistant, Node-RED, or any other home automation platform.
For more on building web server projects with ESP32, the following guide covers the fundamentals: ESP32 WiFi Web Server Tutorial.
How It Works
The firmware runs two tasks in parallel using FreeRTOS. The fetch task runs on core 0 and handles all HTTP requests to Finnhub and CoinGecko. The main loop runs on core 1 and handles the display, touch input, and web server. A mutex protects the shared quote data between the two cores.
WiFiManager handles the initial WiFi setup and stores credentials in flash memory. All settings including tickers, holdings, alerts, and display preferences are stored in non-volatile storage using the ESP32 Preferences library, so configuration survives power cycles.
The web server embedded in the device serves the configuration panel and the JSON API from the ESP32 itself, with no cloud dependency and no external service required beyond the price APIs.
Troubleshooting
Blank or garbled screen after flashing
The User_Setup.h file from the /config folder has not been copied into the TFT_eSPI library folder, or the wrong file was used. Repeat the step from Step 2 and re-upload.
Prices show -- after connecting
The Finnhub API key is missing or invalid. Open the configuration panel in a browser and check the API key field. A fresh key can be obtained at finnhub.io at no cost.
Upload fails in Arduino IDE
Check that the correct port is selected under Tools > Port and that no other application is using the serial port. The serial monitor guide covers additional upload troubleshooting: Installing Libraries and Using the Serial Monitor on ESP32.
Touch not responding or registering wrong positions
The touch rotation is hardcoded to match the display rotation in the firmware. Changing the rotation values in the source code will break touch alignment. Leave both values at their defaults.
Crypto ticker showing no data
Check that the CoinGecko ID is correct. The ID is the lowercase slug from the CoinGecko URL for that coin, not the ticker symbol. For example, the correct ID for Bitcoin is bitcoin, not BTC.
Where to Buy
The ESP32 CYD is available from Zaitronics with international delivery:
- ESP32 CYD Standard (flash it yourself)
- ESP32 CYD Stock Ticker (pre-flashed, ready to connect to WiFi)
Source Code
The full source code is open source under the MIT licence and available at github.com/Zaitronics/esp32-cyd-stock-ticker.