This is an old revision of the document!
In today’s connected world, real-time security monitoring at home or in small offices has become both practical and affordable. This project delivers a lightweight IoT door-security solution by combining an ESP32-CAM module with a Hall-effect sensor. Whenever the door opens, the sensor immediately signals the ESP32-CAM to capture a high-resolution image. That image is then uploaded to Firebase Storage, and its publicly accessible URL is written to Firebase Realtime Database. Simultaneously, Twilio’s API is invoked to send an SMS to your smartphone. Finally, a web gallery hosted on Firebase displays the latest snapshot instantly, giving you secure and remote visibility of every entry event.
Diagram
In many homes and small offices, it’s hard to know in real time if someone has opened a door while you’re away. Traditional locks only log locally or require you to check in person. This project closes that gap by combining a Hall-effect sensor, an ESP32-CAM, cloud storage and instant SMS alerts.
Key features:
When the door swings open, the Hall sensor’s output changes state. The ESP32-CAM immediately takes a JPEG, uploads it to Firebase Storage, and writes it into Realtime Database. A Twilio API call then sends you an SMS alert containing the gallery URL. Meanwhile, your web app—hosted on Firebase Hosting and listening to the database—updates instantly to show the new image.
Hardware Circuit
Connecting Components
Hall-effect Sensor (A3144) Mounted on the door frame. Detects the magnet fixed to the door as it swings past: output goes LOW when the magnet is within 5–10 mm (door closed), and HIGH when it moves away (door open).
ESP32-CAM Module Handles image capture, Firebase upload, and Twilio notifications.
USB-Serial Adapter *(only if not using the on-board USB shield)* Required to flash code to the ESP32-CAM.
Permanent Magnet Mounted on the door so its north pole passes within 5–10 mm of the Hall sensor when the door is closed. No wiring required.
<note tip>I used VS Code with the PlatformIO IDE extension. I’ve built the core logic so that each door-open triggers exactly one clean sequence:
After each step I check for errors and retry once if something fails (network hiccup, JSON parse error, etc.).
Finally, I release the camera buffer and reset state, so the loop stays non-blocking (using millis() for timing) and immediately resumes listening for the next door-open.
All of this makes the system rock-solid: one photo, one upload, one DB update, one SMS—every single time.