81 lines
4.2 KiB
Markdown
81 lines
4.2 KiB
Markdown
# 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.
|