TC
Troy’s Tech Corner
build tech2026-02-1045 min

Build a Smart Mirror with Raspberry Pi: Complete Guide

Create a futuristic "magic mirror" that displays weather, calendar, news, time, and more while you get ready in the morning. This impressive project combines a two-way mirror with a monitor and Raspberry Pi to create an interactive information display.

What You're Building

A smart mirror that displays:

  • Current time and date
  • Weather forecast and conditions
  • Calendar appointments
  • News headlines
  • Customizable widgets (stocks, traffic, sports, etc.)
  • Compliments and motivational quotes
  • While still functioning as a regular mirror

Difficulty: ⭐⭐⭐⭐ Advanced Time Required: 4-8 hours (plus frame building time) Cost: $150-300 depending on size and features Wow Factor: 10/10 - Everyone will be impressed!

What You'll Need

Required Components

Raspberry Pi

  • Raspberry Pi 4 (4GB or 8GB) - Recommended for smooth performance
  • Raspberry Pi 3 B+ - Budget option, still works well
  • microSD card: 16GB minimum, 32GB recommended

Display

  • HDMI monitor: 19-24 inches (non-touch LCD)
  • Must be able to remove plastic housing/bezel
  • Thinner is better for mounting
  • 1080p resolution recommended
  • Look for cheap used monitors

Mirror

  • Two-way mirror glass OR
  • Two-way mirror acrylic film (cheaper option)
  • Size: Slightly larger than monitor screen
  • Acrylic sheet as backing (if using film)

Frame

  • Picture frame (matching mirror size) OR
  • Build custom frame from wood
  • Must be deep enough to hold monitor (2-4 inches)
  • Black interior reduces glare

Power

  • Raspberry Pi power supply
  • Monitor power cable
  • Power strip for internal wiring

Mounting Materials

  • Mounting brackets/L-brackets
  • Screws and anchors
  • Adhesive strips or mounting tape
  • Cable management clips

Optional Enhancements

Motion Sensor

  • PIR motion sensor
  • Turns display on/off when you approach
  • Saves power, extends monitor life

Speakers

  • Small USB speakers
  • For voice feedback or music

Camera

  • Raspberry Pi camera module
  • For facial recognition or photos

Voice Control

  • USB microphone
  • For voice commands (advanced)

Mirror Options Explained

Two-Way Mirror Glass

Pros:

  • Professional appearance
  • Clearer reflection
  • Durable
  • No bubbles or imperfections

Cons:

  • Expensive ($80-150)
  • Heavy
  • Can break during shipping
  • Harder to cut to size

Best for: Premium builds, permanent installations

Two-Way Mirror Film + Acrylic

Pros:

  • Much cheaper ($20-40)
  • Lightweight
  • Easy to cut to size
  • Safer (won't shatter)

Cons:

  • Can bubble during application
  • Scratches easier
  • Slightly less reflective
  • Requires careful application

Best for: First-time builds, budget-conscious

Recommendation: Start with mirror film for your first build. Upgrade to glass later if desired.

Software: MagicMirror²

We'll use MagicMirror² - the most popular open-source smart mirror platform.

Features:

  • Modular design (add/remove widgets)
  • Hundreds of community modules
  • Easy configuration
  • Active development
  • Great documentation

Step-by-Step Build Guide

Phase 1: Prepare the Monitor

Disassemble Monitor:

  1. Unplug and lay monitor face-down on soft surface
  2. Remove screws from back panel
  3. Carefully separate plastic housing from screen
  4. Remove all unnecessary plastic bezels
  5. Keep only the LCD panel and circuit board
  6. Note: Some monitors are easier to disassemble than others

Safety:

  • Don't force anything
  • Take photos during disassembly
  • Be gentle with ribbon cables
  • Some monitors have capacitors that hold charge

Goal: Reduce monitor to thinnest possible profile (just screen + electronics)

Phase 2: Software Setup

1. Install Raspberry Pi OS:

# Use Raspberry Pi Imager
# Choose: Raspberry Pi OS (64-bit) - full version
# Enable SSH in advanced options
# Set username and password

2. Boot Pi and Update:

sudo apt update
sudo apt full-upgrade -y
sudo reboot

3. Install MagicMirror²:

# Download installation script
bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh)"

Installation takes 15-30 minutes. Follow prompts, accept defaults.

4. Start MagicMirror:

cd ~/MagicMirror
npm start

You should see the default MagicMirror interface on your monitor!

Phase 3: Configure MagicMirror

Edit config file:

cd ~/MagicMirror/config
cp config.js.sample config.js
nano config.js

Basic configuration:

let config = {
    address: "0.0.0.0", // Allow access from network
    port: 8080,
    ipWhitelist: [], // Allow all IPs
    language: "en",
    locale: "en-US",
    timeFormat: 24,
    units: "imperial", // or "metric"
    
    modules: [
        {
            module: "alert",
        },
        {
            module: "updatenotification",
            position: "top_bar"
        },
        {
            module: "clock",
            position: "top_left",
            config: {
                displaySeconds: false,
                showDate: true,
                dateFormat: "dddd, MMMM D"
            }
        },
        {
            module: "calendar",
            header: "Appointments",
            position: "top_left",
            config: {
                calendars: [
                    {
                        url: "YOUR_CALENDAR_URL",
                        symbol: "calendar-check"
                    }
                ]
            }
        },
        {
            module: "weather",
            position: "top_right",
            config: {
                weatherProvider: "openweathermap",
                type: "current",
                location: "Your City",
                apiKey: "YOUR_API_KEY"
            }
        },
        {
            module: "weather",
            position: "top_right",
            header: "Weather Forecast",
            config: {
                weatherProvider: "openweathermap",
                type: "forecast",
                location: "Your City",
                apiKey: "YOUR_API_KEY"
            }
        },
        {
            module: "newsfeed",
            position: "bottom_bar",
            config: {
                feeds: [
                    {
                        title: "New York Times",
                        url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
                    }
                ]
            }
        },
        {
            module: "compliments",
            position: "lower_third"
        }
    ]
};

Get OpenWeatherMap API key:

  1. Go to openweathermap.org
  2. Sign up for free account
  3. Get API key from account dashboard
  4. Replace "YOUR_API_KEY" in config

Save and restart:

# Ctrl+X, Y, Enter to save
pm2 restart mm

Phase 4: Install Additional Modules

Browse modules: github.com/MichMich/MagicMirror/wiki/3rd-Party-Modules

Popular modules:

MMM-GoogleAssistant (Voice control):

cd ~/MagicMirror/modules
git clone https://github.com/bugsounet/MMM-GoogleAssistant
cd MMM-GoogleAssistant
npm install

MMM-Spotify (Now playing):

cd ~/MagicMirror/modules
git clone https://github.com/skuethe/MMM-Spotify
cd MMM-Spotify
npm install

MMM-PIR-Sensor (Motion detection):

cd ~/MagicMirror/modules
git clone https://github.com/paviro/MMM-PIR-Sensor
cd MMM-PIR-Sensor
npm install

Add to config.js and restart MagicMirror.

Phase 5: Build the Frame

Materials needed:

  • Wood (1x4 or 1x6 boards)
  • Wood glue
  • Screws or nails
  • Black paint or stain
  • Saw (miter saw ideal)
  • Measuring tape

Frame construction:

  1. Measure: Monitor dimensions + desired border
  2. Cut wood: Four pieces for frame rectangle
  3. Miter corners: 45-degree angles for professional look
  4. Assemble: Glue and screw/nail together
  5. Paint interior black: Reduces light bleed and reflections
  6. Add mounting depth: Attach strips to back for monitor depth

Alternative: Buy oversized picture frame and modify to fit

Phase 6: Apply Mirror Film (If Not Using Glass)

Materials:

  • Acrylic sheet (cut to size)
  • Two-way mirror film
  • Spray bottle with soapy water
  • Squeegee
  • Sharp knife or razor blade

Application steps:

  1. Clean acrylic thoroughly: No dust or fingerprints
  2. Cut mirror film: Slightly larger than acrylic
  3. Spray acrylic with soapy water: Helps position film
  4. Peel backing from film carefully
  5. Apply film to wet acrylic: Start from one edge
  6. Squeegee out bubbles: Work from center outward
  7. Trim excess film: Use sharp blade
  8. Let dry 24 hours

Tips:

  • Work in dust-free area
  • Take your time
  • Small bubbles often disappear as it dries
  • Practice on small piece first

Phase 7: Assembly

Mount components in frame:

  1. Position monitor in frame
  2. Secure with L-brackets to frame interior
  3. Mount Raspberry Pi to back of monitor or frame
  4. Connect HDMI cable from Pi to monitor
  5. Wire power for both Pi and monitor to power strip
  6. Cable management: Use clips and ties
  7. Test everything before final assembly

Mount mirror:

  1. Place mirror/acrylic over monitor
  2. Ensure centered and level
  3. Secure with mounting strips or brackets
  4. Leave small gap if possible for ventilation

Final assembly:

  1. Attach back panel (plywood or hardboard)
  2. Seal edges to keep dust out
  3. Add hanging hardware (French cleat or D-rings)
  4. Test all functions

Phase 8: Wall Mounting

Choose location:

  • Near mirror's typical use (bathroom, bedroom, hallway)
  • Access to power outlet
  • Studs for secure mounting (recommended)
  • Height: Eye level when standing

Mounting options:

French Cleat (Best):

  • Two interlocking beveled pieces
  • Very secure
  • Easy to remove for maintenance
  • Distribute weight well

Heavy-duty brackets:

  • Use wall anchors or screws into studs
  • Support mirror weight (20-30+ lbs)

Installation:

  1. Locate studs with stud finder
  2. Mark mounting points
  3. Install hanging hardware
  4. Hang mirror
  5. Ensure level
  6. Plug in power
  7. Boot up!

Auto-Start Configuration

Make MagicMirror start on boot:

cd ~/MagicMirror
npm install -g pm2
pm2 startup
pm2 start mm.sh
pm2 save

Hide mouse cursor:

sudo apt-get install unclutter

Add to autostart:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

Add line:

@unclutter -display :0 -noevents -grab

Auto-login Pi (if not already):

sudo raspi-config
# System Options → Boot / Auto Login → Desktop Autologin

Adding Motion Sensor

Connect PIR sensor:

  • VCC → Pin 2 (5V)
  • GND → Pin 6 (Ground)
  • OUT → Pin 7 (GPIO 4)

Install module:

cd ~/MagicMirror/modules
git clone https://github.com/paviro/MMM-PIR-Sensor
cd MMM-PIR-Sensor
npm install

Add to config.js:

{
    module: 'MMM-PIR-Sensor',
    config: {
        sensorPin: 4,
        powerSavingDelay: 60, // Turn off after 60 seconds
        preventHDMITimeout: 4,
        supportCEC: true
    }
}

Monitor turns on when you approach!

Customization Ideas

Layout Customization

Positions available:

  • top_bar
  • top_left, top_center, top_right
  • upper_third
  • middle_center
  • lower_third
  • bottom_left, bottom_center, bottom_right
  • bottom_bar

Arrange modules by changing "position" in config.

Custom Modules

Create your own widgets:

  • Fitness tracker stats
  • Smart home controls
  • Cryptocurrency prices
  • Public transit times
  • Inspirational quotes
  • Birthdays reminder
  • Habit tracker

Find modules: github.com/MichMich/MagicMirror/wiki/3rd-Party-Modules

Themes and Styling

Change colors:

Create custom CSS file:

nano ~/MagicMirror/css/custom.css

Example:

body {
    color: #00ff00; /* Green text */
}

.module-header {
    color: #00ffff; /* Cyan headers */
}

Font changes:

body {
    font-family: 'Roboto', sans-serif;
}

Troubleshooting

Mirror Doesn't Turn On

Check:

  • Power connections
  • HDMI cable secure
  • Monitor input source correct
  • Pi booted successfully

Display Not Showing

Solutions:

  • SSH into Pi, check if MagicMirror running: pm2 status
  • Restart: pm2 restart mm
  • Check logs: pm2 logs mm

Bubbles in Mirror Film

Solutions:

  • Small bubbles often disappear after 24-48 hours
  • Large bubbles: carefully lift film, reapply with soapy water
  • Prevention: clean acrylic thoroughly, work in dust-free area

Display Too Bright

Solutions:

  • Adjust monitor brightness settings
  • Reduce white in display (use dark theme)
  • Add more modules (more black areas)
  • Adjust mirror film opacity (multiple layers)

Weather Not Updating

Solutions:

  • Check OpenWeatherMap API key is valid
  • Verify internet connection
  • Check API usage limits (free tier limited)
  • Restart MagicMirror

Text Hard to Read

Solutions:

  • Increase font size in CSS
  • Adjust monitor brightness
  • Better quality mirror (more transparent)
  • Reduce ambient light in room
  • Dark background behind mirror

Maintenance

Regular tasks:

  • Clean mirror surface weekly (glass cleaner)
  • Reboot Pi monthly for stability
  • Update MagicMirror: git pull && npm install
  • Update Raspberry Pi OS quarterly
  • Check for module updates

Advanced Features

Voice Control

Google Assistant integration:

  1. Install MMM-GoogleAssistant module
  2. Set up Google Cloud project
  3. Configure OAuth credentials
  4. Connect USB microphone
  5. Voice commands control mirror

Facial Recognition

Personalized displays:

  1. Install MMM-Face-Recognition-SMAI
  2. Connect Pi camera
  3. Train with your photos
  4. Display different content per user

Gesture Control

Control with hand gestures:

  1. Install MMM-Gestures module
  2. Use Pi camera for gesture detection
  3. Wave to change pages
  4. Swipe to scroll news

Smart Home Integration

Display smart home status:

  1. Install Home Assistant
  2. Add MMM-HomeAssistant module
  3. Show thermostat, lights, locks status
  4. Control devices from mirror

Cost Breakdown

Budget Build (~$150):

  • Used monitor: $30-50
  • Raspberry Pi 4: $35-45
  • Mirror film + acrylic: $25-35
  • Frame materials: $30-40
  • microSD + cables: $20

Premium Build (~$300):

  • New monitor: $100-150
  • Raspberry Pi 4 (8GB): $55
  • Two-way mirror glass: $80-100
  • Custom frame: $50-80
  • Sensors + extras: $30-50

Tips for Success

Monitor selection:

  • Thinner is better
  • Easy-to-disassemble models
  • Good brightness (300+ nits)
  • IPS panel for viewing angles

Mirror quality:

  • 70/30 or 60/40 transmission ratio ideal
  • Too reflective = can't see display
  • Too transparent = poor mirror

Frame building:

  • Measure twice, cut once
  • Black interior is critical
  • Allow ventilation
  • Plan for cable access

Software:

  • Start simple, add modules gradually
  • Back up config.js frequently
  • Test modules before committing
  • Join MagicMirror community forum

What's Next?

Expand your mirror:

  • Multiple displays (bedroom, bathroom, hallway)
  • Integrate with smart home
  • Add touch screen for interaction
  • Build rotating stand
  • Create mirror TV (larger display)

Resources

Official:

  • MagicMirror²: magicmirror.builders
  • Documentation: docs.magicmirror.builders
  • Forum: forum.magicmirror.builders

Communities:

  • r/MagicMirror
  • r/raspberry_pi
  • MagicMirror Discord

Tutorials:

  • MagicMirror YouTube channel
  • DIY guides on Instructables
  • Build logs on Reddit

Final Thoughts

A smart mirror is one of the most impressive Raspberry Pi projects:

Wow factor - Everyone will be amazed ✅ Practical - Use daily ✅ Customizable - Make it yours ✅ Learning - Touch many skills (woodworking, coding, electronics) ✅ Future-proof - Always adding features

The build requires patience and attention to detail, but the result is a unique, functional piece of technology that will impress everyone who sees it.

Take your time, don't rush the frame building or mirror application, and you'll have a professional-looking smart mirror you'll use and enjoy every day!


Ready to build your smart mirror? Follow this guide and create a futuristic addition to your home!

Enjoyed this guide?

Get more beginner-friendly tech explanations and guides sent to your inbox.

No spam. Unsubscribe at any time. We respect your privacy.

Related Guides