Smart Environmental & Water Tank Monitoring System
A wireless IoT system for monitoring environmental conditions (temperature, humidity, CO2) and water tank levels using ESP32 microcontrollers with ESP-NOW communication.
Microcontrollers project
IoT
Sep 1, 2023
Sensor Node (Transmitter) DHT11 temperature/humidity sensor HC-SR04 ultrasonic distance sensor (water level) MQ-135 air quality sensor (CO2 levels) RGB LED status indicator Buzzer alerts for warnings Button calibration system Display Unit (Receiver) ILI9341 TFT display interface Real-time data visualization Warning system for critical conditions Auto-calibration prompts Connection status monitoring

Hardware Requirements
Sensor Node
ESP32 microcontroller
DHT11 sensor
HC-SR04 ultrasonic sensor
MQ-135 gas sensor
Passive buzzer
Tactile button
Common cathode RGB LED
Breadboard & jumper wires
Display Unit
ESP32 microcontroller
ILI9341 2.8" TFT display
Breadboard & jumper wires
Installation
Arduino IDE Setup
Install ESP32 board support
Required libraries:
DHT sensor library
ESP32 ESP-NOW
Adafruit SSD1306
Adafruit GFX Library
Adafruit ILI9341
Hardware Connections
Sensor Node
DHT11 -> GPIO17
HC-SR04: Trig -> GPIO15 Echo -> GPIO18
Buzzer -> GPIO19
Button -> GPIO13 (pull-up)
RGB LED: Red -> GPIO14 Green -> GPIO12 Blue -> GPIO27
MQ-135 -> GPIO35
Display Unit
TFT_CS -> GPIO5
TFT_RST -> GPIO4
TFT_DC -> GPIO16
TFT_MOSI -> GPIO23
TFT_CLK -> GPIO18
Configuration
ESP-NOW Setup Update MAC addresses in both sketches:
// Transmitter code (replace with receiver MAC) uint8_t receiverMacAddress[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
// Receiver code (replace with transmitter MAC) uint8_t expectedMac[] = {0x80,0x7D,0x3A,0xF8,0x1A,0x24};
Calibration
Initial calibration on first boot: Hold button for 3 seconds System measures empty tank distance RGB LED confirms calibration Usage
Sensor Node Automatically sends data every 500ms Button press for recalibration Visual alerts: White: Normal operation Blinking blue: Calibration needed Blinking red: Warning condition Display Unit Shows real-time sensor data Warning displays for: Tank overflow/empty Critical CO2 levels Connection status monitoring
Customization
Adjust thresholds in waterTankStatus() Modify update intervals: const unsigned long updateInterval = 500; // Transmitter const unsigned long displayTimeout = 5000; // Receiver Enhance MQ-135 calibration (current implementation uses simple linear conversion) Troubleshooting
Ensure MAC addresses match between devices Check sensor wiring connections Monitor serial output (115200 baud) Reset both devices if connection drops
Note: This system requires line-of-sight between ESP32 devices for reliable ESP-NOW communication (range up to 200m in open space).