Govindhasamy K
Published © Apache-2.0

IoT Water Level Monitoring System Using ESP8266 & KiwisIoT

IoT water tank monitor using ESP8266 & KiwisIoT with live levels and full-tank alerts.

BeginnerProtip30 minutes69
IoT Water Level Monitoring System Using ESP8266 & KiwisIoT

Things used in this project

Hardware components

ESP8266 ESP-01
Espressif ESP8266 ESP-01
×1
water level sensor
×1
Buzzer
Buzzer
×1
LED (generic)
LED (generic)
×1
Jumper wires (generic)
Jumper wires (generic)
×1

Software apps and online services

Arduino IDE
Arduino IDE
KiwisIoT
Kiwistron KiwisIoT

Story

Read more

Schematics

wiring diagram

Code

ESP8266 Water Level Monitoring with KiwisIoT

C/C++
This Arduino sketch reads the water level using an analog water level sensor connected to the ESP8266. The sensor value is converted into a 0–100% water level and classified as LOW, MEDIUM, HIGH, or FULL. The water level and status are sent to KiwisIoT every 2 seconds. When the tank reaches 90% or above, an LED and optional buzzer are activated as a full-tank alert.
#include <ESP8266WiFi.h>
#include <KiwisIoT.h>

// -------- WiFi ----------
const char* ssid = "xxxxxxxxx";
const char* pass = "xxxxxxxxxx";

// -------- KiwisIoT ----------
const char* topic = "xxxxxxxxxxx";

// -------- Pins ----------
#define WATER_PIN A0
#define FULL_LED D2

// -------- Calibration ----------
#define EMPTY_VALUE 0
#define FULL_VALUE 1023

KiwisIoT kiwisiot(ssid, pass, topic);

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

  pinMode(FULL_LED, OUTPUT);
  digitalWrite(FULL_LED, LOW);

  kiwisiot.begin();

  Serial.println("Water Level Monitoring Started");
}

void loop()
{
  // Read water level sensor
  int sensorValue = analogRead(WATER_PIN);

  // Convert to percentage
  int waterLevel = map(sensorValue,
                        EMPTY_VALUE,
                        FULL_VALUE,
                        0,
                        100);

  waterLevel = constrain(waterLevel, 0, 100);

  // Water level status
  String statusMsg;

  if (waterLevel >= 90)
  {
    digitalWrite(FULL_LED, HIGH);
    statusMsg = "Water Tank FULL";
  }
  else if (waterLevel >= 60)
  {
    digitalWrite(FULL_LED, LOW);
    statusMsg = "Water Level HIGH";
  }
  else if (waterLevel >= 30)
  {
    digitalWrite(FULL_LED, LOW);
    statusMsg = "Water Level MEDIUM";
  }
  else
  {
    digitalWrite(FULL_LED, LOW);
    statusMsg = "Water Level LOW";
  }

  // Serial Monitor
  Serial.print("Water Level: ");
  Serial.print(waterLevel);
  Serial.print("% - ");
  Serial.println(statusMsg);

  // KiwisIoT
  kiwisiot.send("0", waterLevel);
  kiwisiot.send("1", statusMsg);

  kiwisiot.run();

  delay(2000);
}

Credits

Govindhasamy K
3 projects • 0 followers

Comments