How to Build a Real-Time Auction Game Using 3.5 inch TFT LCD Shield and Python
(Best LCD for Arduino Projects – Full Code Included)

Why Most Arduino Projects Don’t Excite Students Anymore
If you’ve ever tried to engage students in an Arduino workshop or classroom, you know the struggle.
The typical projects — blinking LEDs, printing “Hello World” in the serial monitor — they’re useful, yes. But exciting? Not really.
The truth is, most students (and even hobbyists) crave interactive, real-time results. They want to see something actually happening, not just lights blinking.
That’s why I created a project called:
Bidding Battle – Live Auction Showdown
It’s a fun, real-time project where Python handles the GUI bidding interface, and Arduino with a 3.5 inch TFT LCD Shield displays the winning bidder instantly.
Project Overview: LCD for Arduino + Python Bidding System
This project connects:
- A Python GUI for entering bids
- A serial connection to Arduino
- A 3.5 inch TFT LCD Shield that shows the highest bidder on-screen in real-time
It’s simple, responsive, and feels like a mini game show in your classroom or lab.
Build This Project with These Recommended Components
To make sure this works smoothly, I recommend the following components:
- ✅ 3.5 inch TFT LCD Shield for Arduino → [Add your link here]
- ✅ Arduino Mega Board → [Your link]
- ✅ USB Cable for Arduino → [Your link]
🔗 Or visit my full part list page for bundle deals:
👉 [Visit Project Store Page → your_link_here]
I’ve personally tested these parts — they’re affordable and reliable for beginner to advanced use.
🧑💻 Step-by-Step: Connect Python with LCD for Arduino
We’ll now write two programs:
- One in Python for the GUI
- One in Arduino for displaying the winner on your TFT LCD
📄 Python Code: Auction GUI with Tkinter
💡 This code creates the GUI for users to enter name and bid. It sends the highest bid to Arduino over USB.
pythonCopyEditimport tkinter as tk
from tkinter import messagebox
import serial
import time
arduino = serial.Serial(port='COM4', baudrate=9600, timeout=1)
bids = {}
def update_leaderboard():
leaderboard_text.delete(1.0, tk.END)
sorted_bidders = sorted(bids.items(), key=lambda x: x[1], reverse=True)
for name, bid in sorted_bidders:
leaderboard_text.insert(tk.END, f"{name}: ₹{bid}\n")
def submit_bid():
name = name_entry.get().strip()
bid = bid_entry.get().strip()
if not name or not bid.isdigit():
messagebox.showerror("Invalid Entry", "Please enter a valid name and number.")
return
bid = int(bid)
bids[name] = bid
update_leaderboard()
highest = max(bids, key=bids.get)
highest_bid = bids[highest]
serial_data = f"{highest}:{highest_bid}\n"
arduino.write(serial_data.encode('utf-8'))
name_entry.delete(0, tk.END)
bid_entry.delete(0, tk.END)
root = tk.Tk()
root.title("Bidding Battle")
tk.Label(root, text="Name:").grid(row=0, column=0)
name_entry = tk.Entry(root, width=30)
name_entry.grid(row=0, column=1)
tk.Label(root, text="Bid (₹):").grid(row=1, column=0)
bid_entry = tk.Entry(root, width=30)
bid_entry.grid(row=1, column=1)
submit_btn = tk.Button(root, text="Submit Bid", command=submit_bid)
submit_btn.grid(row=2, columnspan=2, pady=10)
tk.Label(root, text="Leaderboard").grid(row=3, columnspan=2)
leaderboard_text = tk.Text(root, height=10, width=40)
leaderboard_text.grid(row=4, columnspan=2)
root.mainloop()
📄 Arduino Code: Display Winner on 3.5” TFT LCD Shield
💡 This sketch receives the serial data and shows the winner on the LCD for Arduino.
cppCopyEdit#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#define BLACK 0x0000
#define WHITE 0xFFFF
#define GREEN 0x07E0
#define YELLOW 0xFFE0
String inputString = "";
bool stringComplete = false;
void setup() {
Serial.begin(9600);
uint16_t ID = tft.readID();
tft.begin(ID);
tft.setRotation(1);
tft.fillScreen(BLACK);
tft.setTextColor(YELLOW);
tft.setTextSize(3);
tft.setCursor(10, 20);
tft.println("Bidding Battle");
tft.setTextSize(2);
tft.setCursor(20, 60);
tft.println("Waiting for bids...");
inputString.reserve(100);
}
void loop() {
if (stringComplete) {
tft.fillRect(0, 60, 320, 180, BLACK);
int colonIndex = inputString.indexOf(':');
if (colonIndex > 0) {
String name = inputString.substring(0, colonIndex);
String bid = inputString.substring(colonIndex + 1);
tft.setTextColor(GREEN);
tft.setCursor(10, 80);
tft.setTextSize(2);
tft.print("Winner: ");
tft.println(name);
tft.setCursor(10, 120);
tft.print("Bid: ₹");
tft.println(bid);
}
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '\n') {
stringComplete = true;
} else {
inputString += inChar;
}
}
}
✅ Want the Exact Hardware I Used?
Here’s everything I used in this project:
- 🖥️ 3.5 inch TFT LCD Shield for Arduino → [Insert your link here]
- 🔌 Arduino Mega Board → [Insert]
- 📦 USB Cable & Accessories → [Insert]
🎁 You can also check out my curated project bundle here:
👉 [Visit Project Parts Page → your_link_here]
These links help support my work if you purchase through them 🙏
Final Thoughts
This project combines Python, Arduino, and the 3.5 inch TFT LCD Shield to build something that’s actually fun, interactive, and teachable.
If you’re bored of basic projects and want to do something a little more real-world and exciting, start with this.
Even better — this is Project 1 from my upcoming course on Python + Arduino + AI Projects, so stay tuned for more modules like this.
Author: Vishabh Khajuria
🔗 vishabh.com,
🧑🏫 Arduino | AI | Python | Edtech

Hello! I sent a request, but have not yet received a response. Perhaps my message did not go through. I would be very grateful if you could contact me via WhatsApp.
wa.me/+79173031189