In an age where birthday greetings are mostly reduced to templated social media messages, this project aims to bring back the magic of personal celebrations with a technological twist
What if you could make a birthday wish interactive What if your message didn't just exist on a screen but was broadcast live, shown in big bold letters, and sung aloud by a smart little device
This project turns that idea into reality
Using the ultra-compact and powerful XIAO ESP32S3, a 0.96 OLED display, and a buzzer, we created a portable Birthday Message Display system that works entirely offline no internet or router required. While the project does use WiFi, it operates in local access point mode. This means the ESP32 creates its own network that nearby users can connect to directly.
Through this private network, users can access a built-in web page hosted by the ESP32 to type and send a custom birthday message. The message is then beautifully rendered on the OLED display, line by line, and accompanied by a cheerful birthday melody
Whether it's used as a digital gift, a classroom IoT demo, or a party centerpiece, this project showcases how embedded systems can create meaningful and joyful experiences one message, one melody, one smile at a time.
How it worksESP32 starts in access point mode and creates a local WiFi network
User connects to the ESP32 network using a phone or laptop
- A built-in web page is served from the ESP32 to input a birthday message
- Message is saved and displayed on a 0.96 inch OLED, animated line by line
- A cheerful melody is played through a buzzer
- All functions work offline without internet access
The project includes several visual modes to enhance the celebration experience
Startup mode displays the WiFi connection instructions on the OLED screen including the SSID and IP address
This helps users easily connect to the device
Message mode shows the received birthday message across up to four lines with a fade in or scrolling animation effect for added visual appeal
For example, if the user types "happy birthday brother", the OLED will display happy birthday brother.
Music mode plays a short birthday melody through the buzzer whenever the play button is triggered from the web interface
Reset mode clears the stored message and resets the screen back to the initial state so a new message can be entered
These modes work together to create an interactive flow that is both fun and easy to use.
OLED 0.96 Inch
VCC → 3V3
GND → GND
SDA → SDA / GPIO5
SCL → SCL / GPIO6
BUZZER
+ → D10 / GPIO9
- → GND
This code enables the ESP32 to host its own WiFi network and serve a web page for message input. No external router or internet is required.
Getting Started- Upload the Birthday\_Whises code to the ESP32S3 board
- Connect the OLED display and buzzer as shown in the circuit diagram
- Power the board and wait for the OLED to display the WiFi SSID and IP address
- On your phone or laptop, connect to the WiFi network created by the ESP32 (e.g., Birthday-ESP32)
- Open the IP address shown on the OLED in a browser
- Enter your birthday message and press the play button to display it and play the song
The ESP32 uses WiFi access point (AP) mode to create its own local network using this code:
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
const char* ssid = "Birthday-ESP32";
const char* password = "";
AsyncWebServer server(80);
void setup() {
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/html", "<form>...</form>");
});
server.begin();
}
Possible Extensions- Add an SD card to store multiple birthday messages and switch between them
- Integrate a real-time clock module to trigger the message automatically at a scheduled time
- Replace the buzzer with a speaker and use an audio file (MP3 or WAV) for better sound quality
- Use a larger OLED or LED matrix to show longer messages or add emojis
- Add a battery and enclosure to make it fully portable
- Create a version that supports multiple languages or animated fonts
- Implement Bluetooth for mobile app control in addition to WiFi
This project uses a helper file named pitches.h that contains frequency definitions for musical notes. Each note (like NOTE\_C4, NOTE\_D4, etc.) is mapped to its correct frequency in Hertz. This makes it easier to write melodies using note names instead of raw numbers. The buzzer uses these note definitions to play the Happy Birthday melody cleanly and accurately.
ConclusionThis project is more than a technical showcase. It brings together code, hardware, and creativity to turn a birthday wish into a memorable experience. With just a small ESP32 board, an OLED screen, and a buzzer, you can create something that brings joy, surprise, and smiles all offline, and all yours to build.
Comments