This project develops a real-time flood monitoring system using water level, humidity, rain, and IoT sensors connected to the FAVORIOT platform via a GSM/4G module (SIM800L/SIM7600). It is ideal for deployment in remote areas without WiFi connectivity.
1. System Architecture
1.1. Workflow
- Data Collection – Sensors measure water level, humidity, temperature, and rain detection.
- Data Processing – The microcontroller (ESP32/Arduino) receives the data.
- Cloud Transmission – Data is uploaded to FAVORIOT using 4G LTE via GSM modules (SIM800L/SIM7600).
- Analysis & Visualization – The FAVORIOT dashboard displays real-time monitoring data.
- Early Warning System – If the water level exceeds the threshold, FAVORIOT sends an SMS or Telegram alert.
2. Recommended Hardware Components
| Component | Function |
|---|---|
| ESP32 / Arduino Mega 2560 | Main processor |
| GSM 4G Module (SIM800L / SIM7600) | Data transmission to cloud |
| Ultrasonic Sensor (HC-SR04) | Measures water level |
| Soil Moisture Sensor (YL-69) | Detects soil moisture level |
| Rain Sensor (FC-37) | Detects rainfall presence |
| DHT11 / DHT22 | Measures temperature & humidity |
| Relay Module | Controls siren or water pump |
| LiPo Battery + Solar Panel | Power supply for off-grid deployment |
3. Hardware Setup & Wiring
3.1. Connection Overview
| Component | ESP32/Arduino Pin |
|---|---|
| Ultrasonic Sensor (Trig / Echo) | GPIO 5, GPIO 18 |
| Rain Sensor (Digital Out) | GPIO 15 |
| Soil Moisture Sensor (Analog Out) | GPIO 34 |
| DHT11 / DHT22 (Data Pin) | GPIO 4 |
| GSM Module (TX/RX) | GPIO 16, GPIO 17 |
| Relay Module | GPIO 23 |
4. Software Development
4.1. Install Required Libraries
For ESP32/Arduino, ensure the following libraries are installed in the Arduino IDE:
#include <SoftwareSerial.h>
#include <DHT.h>
4.2. Connecting to FAVORIOT IoT Cloud via 4G GSM
SoftwareSerial gsmSerial(16, 17); // TX to 16, RX to 17 (adjust for GSM module)
String apiKey = "your_favoriot_api_key";
String deviceId = "your_device_id";
String serverURL = "https://apiv2.favoriot.com/v2/streams";
4.3. Flood Detection & Data Transmission to FAVORIOT via GSM
#include <SoftwareSerial.h>
#include <DHT.h>
#define TRIG_PIN 5
#define ECHO_PIN 18
#define DHTPIN 4
#define DHTTYPE DHT11
#define RAIN_SENSOR 15
#define SOIL_SENSOR 34
#define RELAY_PIN 23
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial gsmSerial(16, 17); // TX to 16, RX to 17
String apiKey = "your_favoriot_api_key";
String deviceId = "your_device_id";
String serverURL = "https://apiv2.favoriot.com/v2/streams";
void setup() {
Serial.begin(115200);
gsmSerial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RAIN_SENSOR, INPUT);
pinMode(SOIL_SENSOR, INPUT);
pinMode(RELAY_PIN, OUTPUT);
dht.begin();
Serial.println("Initializing GSM...");
sendATCommand("AT", "OK");
sendATCommand("AT+CSQ", "OK");
sendATCommand("AT+CREG?", "OK");
sendATCommand("AT+CGATT=1", "OK");
sendATCommand("AT+CSTT=\"internet\"", "OK"); // Ensure correct APN
sendATCommand("AT+CIICR", "OK");
sendATCommand("AT+CIFSR", ".");
Serial.println("GSM Connection Established!");
}
void sendATCommand(String command, String expectedResponse) {
gsmSerial.println(command);
delay(1000);
while (gsmSerial.available()) {
String response = gsmSerial.readString();
if (response.indexOf(expectedResponse) != -1) {
Serial.println(response);
break;
}
}
}
float getWaterLevel() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float duration = pulseIn(ECHO_PIN, HIGH);
return (duration * 0.034 / 2); // Distance in cm
}
void sendDataToFavoriot(float waterLevel, float temp, float humidity, int rain, int soil) {
String jsonData = "{\"device_developer_id\":\"" + deviceId +
"\", \"data\": {\"water_level\":\"" + String(waterLevel) +
"\", \"temperature\":\"" + String(temp) +
"\", \"humidity\":\"" + String(humidity) +
"\", \"rain_detected\":\"" + String(rain) +
"\", \"soil_moisture\":\"" + String(soil) + "\"}}";
String command = "AT+HTTPPARA=\"URL\",\"" + serverURL + "\"";
sendATCommand(command, "OK");
sendATCommand("AT+HTTPPARA=\"CONTENT\",\"application/json\"", "OK");
sendATCommand("AT+HTTPDATA=" + String(jsonData.length()) + ",10000", "DOWNLOAD");
gsmSerial.println(jsonData);
delay(5000);
sendATCommand("AT+HTTPACTION=1", "OK");
}
void loop() {
float waterLevel = getWaterLevel();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int rainDetected = digitalRead(RAIN_SENSOR);
int soilMoisture = analogRead(SOIL_SENSOR);
Serial.print("Water Level: "); Serial.println(waterLevel);
Serial.print("Temperature: "); Serial.println(temperature);
Serial.print("Humidity: "); Serial.println(humidity);
Serial.print("Rain Detected: "); Serial.println(rainDetected);
Serial.print("Soil Moisture: "); Serial.println(soilMoisture);
if (waterLevel > 50) {
digitalWrite(RELAY_PIN, HIGH); // Activate siren or pump
} else {
digitalWrite(RELAY_PIN, LOW);
}
sendDataToFavoriot(waterLevel, temperature, humidity, rainDetected, soilMoisture);
delay(60000); // Send data every 1 minute
}
5. Benefits of Using 4G LTE
✅ Ideal for remote locations without WiFi
✅ Can function even during extreme weather
✅ Real-time flood alerts sent directly to FAVORIOT
Conclusion
By integrating a GSM 4G LTE module, smart sensors, and the FAVORIOT platform, this system enables real-time flood monitoring, early warning alerts, and supports disaster risk management for enhanced safety.
References
- Favoriot Platform Registration (FREE and Paid)
- Favoriot Full Documentation (Official)
- Favoriot Github
- How-To Use Favoriot Platform Video Playlist
Disclaimer
This article provides a step-by-step guide. The source code may need adjustments to fit the final project design.
![[Tutorial] : Flood Monitoring & Detection System Using FAVORIOT IoT via 4G LTE](https://iotworld.co/wp-content/uploads/2025/03/DALL·E-2025-03-20-12.24.47-A-highly-advanced-flood-monitoring-station-in-a-futuristic-smart-city-bathed-in-magenta-neon-lights.-The-station-is-equipped-with-IoT-sensors-measuri.webp)





Leave a Reply