Course Content
IoT Engineering Course using ESP32 with 12 Real-World Projects

💧 Water Quality Monitoring System

(ESP32 + Analog TDS Sensor + Blynk IoT Cloud)

In this lesson, we upgrade the system to Cloud-Based Monitoring using Blynk IoT.

This version allows:

  • 🌍 Monitor water quality from anywhere

  • 📊 Real-time TDS (PPM) display

  • 💧 Water quality classification on dashboard

  • 🚨 Alert if water is unsafe

  • ☁ Cloud-based data monitoring

Internet required ✔
WiFi required ✔
Blynk IoT Cloud ✔


📦 Components Used

  • ESP32

  • Analog TDS Sensor Module

  • TDS Probe

  • WiFi Connection

  • Blynk IoT Account


🔌 Pin Configuration

TDS Module Pin ESP32
VCC 3.3V
GND GND
AO GPIO 34

GPIO 34 = Analog Input


🌐 Blynk IoT Setup (Step-by-Step)

Go to:
👉 https://blynk.cloud

Login and follow the steps below.


🔹 Step 1 – Create Template

  1. Click New Template

  2. Template Name:

     
    Water Quality Monitor
     
  3. Hardware: ESP32

  4. Connection Type: WiFi

  5. Click Done


🔹 Step 2 – Create Datastreams

Go to Datastreams → New Datastream


1️⃣ V0 – TDS Value (PPM)

  • Type: Virtual Pin

  • Pin: V0

  • Data Type: Double

  • Min: 0

  • Max: 2000

Used to display TDS value.


2️⃣ V1 – Water Quality Text

  • Type: Virtual Pin

  • Pin: V1

  • Data Type: String

Used to display water quality status.


3️⃣ V2 – Unsafe Water LED

  • Type: Virtual Pin

  • Pin: V2

  • Data Type: Integer

  • Min: 0

  • Max: 1

1 = Unsafe
0 = Safe


🔹 Step 3 – Create Device

  1. Go to Devices

  2. Click New Device

  3. From Template

  4. Select Water Quality Monitor

  5. Copy Auth Token

You will paste it into code.


📱 Dashboard Setup (Mobile App)

Open Blynk App and add:


📊 Value Display – TDS Value

Datastream: V0


📝 Label / Value Display – Water Quality

Datastream: V1


💡 LED Widget – Unsafe Water

Datastream: V2
ON Color: Red
OFF Color: Green


💻 COMPLETE CODE

(ESP32 + TDS Sensor + Blynk IoT)

Replace credentials before uploading.

#define BLYNK_TEMPLATE_ID "YOUR_TEMPLATE_ID"
#define BLYNK_DEVICE_NAME "Water Quality Monitor"
#define BLYNK_AUTH_TOKEN "YOUR_AUTH_TOKEN"

#include <WiFi.h>
#include <BlynkSimpleEsp32.h>

#define TDS_PIN 34

char ssid[] = "YOUR_WIFI_NAME";
char pass[] = "YOUR_WIFI_PASSWORD";

float voltage = 0;
float tdsValue = 0;
String waterQuality;

void setup() {
Serial.begin(115200);

Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}

void loop() {
Blynk.run();

int adcValue = analogRead(TDS_PIN);

voltage = adcValue * (3.3 / 4095.0);

tdsValue = (133.42 * voltage * voltage * voltage
- 255.86 * voltage * voltage
+ 857.39 * voltage) * 0.5;

// Water Quality Classification
if (tdsValue < 50) {
waterQuality = "Very Pure";
Blynk.virtualWrite(V2, 0);
}
else if (tdsValue < 150) {
waterQuality = "Excellent";
Blynk.virtualWrite(V2, 0);
}
else if (tdsValue < 300) {
waterQuality = "Good";
Blynk.virtualWrite(V2, 0);
}
else if (tdsValue < 500) {
waterQuality = "Fair";
Blynk.virtualWrite(V2, 0);
}
else {
waterQuality = "Poor / Unsafe";
Blynk.virtualWrite(V2, 1);
}

Blynk.virtualWrite(V0, tdsValue);
Blynk.virtualWrite(V1, waterQuality);

delay(2000);
}

🧠 Code Explanation


1️⃣ Blynk Initialization

 
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
 

Connects ESP32 to:

  • WiFi

  • Blynk Cloud

  • Your dashboard


2️⃣ Read Analog Value

 
int adcValue = analogRead(TDS_PIN);
 

Reads TDS sensor voltage.

Range:
0 – 4095


3️⃣ Convert ADC to Voltage

 
voltage = adcValue * (3.3 / 4095.0);
 

Converts ADC value into voltage.


4️⃣ Convert Voltage to TDS

 
tdsValue = (133.42 * V³ – 255.86 * V² + 857.39 * V) * 0.5;
 

Polynomial equation converts voltage to PPM.


5️⃣ Water Quality Classification

Based on TDS value:

TDS (ppm) Quality
< 50 Very Pure
50–150 Excellent
150–300 Good
300–500 Fair
> 500 Poor / Unsafe

If water is unsafe:

 
Blynk.virtualWrite(V2, 1);
 

Turns ON red LED.


6️⃣ Dashboard Updates

 
Blynk.virtualWrite(V0, tdsValue);
Blynk.virtualWrite(V1, waterQuality);
 

Updates:

  • TDS numeric display

  • Water quality text


📟 System Working Flow

  1. ESP32 connects to WiFi

  2. Connects to Blynk Cloud

  3. Reads TDS sensor

  4. Converts voltage to PPM

  5. Classifies water quality

  6. Updates dashboard

  7. Turns LED ON if unsafe


🎯 What Students Learn

  • Cloud-based IoT system

  • Virtual pins concept

  • ADC & voltage conversion

  • Polynomial calibration formula

  • Environmental IoT monitoring

  • Real-time cloud dashboard


📌 Lesson Summary

In this lesson, students built a:

💧 Cloud-Based Water Quality Monitoring System

The system:

✔ Measures TDS
✔ Classifies water quality
✔ Sends data to cloud
✔ Alerts if water is unsafe
✔ Monitors from anywhere

Scroll to Top