# 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.