Go to file
2026-02-15 19:05:19 +01:00
.gitignore extract secrets out 2026-02-12 22:13:17 +01:00
esp32_MachineNotify.ino Improved state change mechanism 2026-02-15 19:05:19 +01:00
README.md extract secrets out 2026-02-12 22:13:17 +01:00
secrets_template.h extract secrets out 2026-02-12 22:13:17 +01:00

ESP32 Washing Machine Activity Notifier

This project turns an ESP32 into a smart device that monitors a washing machine's activity using vibration and light sensors and sends notifications when a cycle starts and finishes. It also displays the current status on an OLED display.

Features

  • Vibration Sensing: Detects machine operation by monitoring vibrations.
  • Light Sensing: Detects the machine's internal light to determine if the door is open.
  • Status Display: Shows real-time sensor data and device status on a small OLED display.
  • Notifications: Sends start and stop notifications to a ntfy.sh topic.
  • WiFi Connectivity: Connects to your local WiFi network.

Hardware Requirements

  • ESP32 development board
  • SW-420 vibration sensor module (or similar)
  • BH1750 light sensor module
  • SSD1306 128x64 OLED display (I2C)
  • Breadboard and jumper wires

Pinout

Component Pin on ESP32
Vibration Sensor GPIO 4
I2C SCL (OLED, BH1750) GPIO 22
I2C SDA (OLED, BH1750) GPIO 21

Wiring Diagram

+-----------------+      +-----------------+      +-----------------+      +-----------------+
| ESP32 Dev Board |      | Vibration Sensor|      |  BH1750 Sensor  |      |   OLED Display  |
+-----------------+      +-----------------+      +-----------------+      +-----------------+
| 3.3V            |----->| VCC             |----->| VCC             |----->| VCC             |
| GND             |----->| GND             |----->| GND             |----->| GND             |
| GPIO 4          |----->| OUT             |      |                 |      |                 |
|                 |      +-----------------+      |                 |      |                 |
| GPIO 22 (SCL)   |------------------------------>| SCL             |----->| SCL             |
| GPIO 21 (SDA)   |------------------------------>| SDA             |----->| SDA             |
+-----------------+                               +-----------------+      +-----------------+

Setup & Usage

  1. Install Libraries:

    • Open the Arduino IDE and go to Sketch > Include Library > Manage Libraries....
    • Install the following libraries:
      • Adafruit SSD1306 by Adafruit
      • Adafruit GFX Library by Adafruit
      • BH1750 by Christopher Laws
  2. Configure the Code:

    • Copy secrets_template.h to a new file named secrets.h in the same directory.
    • Open secrets.h and populate SECRET_WIFI_SSID, SECRET_WIFI_PASSWORD, and SECRET_NTFY_TOPIC with your WiFi credentials and desired ntfy.sh topic.
    • The secrets.h file is ignored by git to keep your credentials safe.
  3. Upload the Code:

    • Connect your ESP32 board to your computer.
    • Select the correct board and port in the Arduino IDE.
    • Click the upload button.
  4. Deploy the Device:

    • Place the vibration sensor on the washing machine where it can detect vibrations from the spin cycle.
    • Place the light sensor inside the machine's drum to detect the internal light.

Code Explanation

The code is structured as follows:

  • Includes and Definitions: Includes the necessary libraries for WiFi, I2C devices, and the display. It also defines pins, thresholds, and other constants.
  • setup(): Initializes serial communication, I2C, sensors, the OLED display, and connects to WiFi.
  • loop(): This is the main part of the program.
    • It continuously reads the values from the vibration and light sensors.
    • It implements a non-blocking logic using millis() to check if the sensors have been in a certain state (e.g., vibration active or light level high) for a continuous period of 5 seconds.
    • It updates the overall device state (isDeviceActive) based on the individual sensor states.
    • If the device state changes, it calls sendNotification().
    • It calls updateDisplay() to show the latest data.
  • sendNotification(): Sends a POST request to the configured ntfy.sh topic with a message.
  • updateDisplay(): Manages the OLED display. It clears the screen and prints the current status of the sensors and the device. It also implements a scrolling feature to cycle through the displayed information every 2 seconds.