#include <Arduino.h>
#include <SoftwareSerial.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define FLOAT_SENSOR1_PIN A0
#define FLOAT_SENSOR2_PIN A1
#define FLOAT_SENSOR3_PIN A2
SoftwareSerial gsmSerial(10, 11); // RX, TX
const char* serverURL = "http://your_server_ip:5000/update_data"; // Replace with your server IP and port
// Define phone numbers to notify
const char* phoneNumbers[] = {"+1234567890", "+0987654321"}; // Replace with actual numbers
void setup() {
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(FLOAT_SENSOR1_PIN, INPUT);
pinMode(FLOAT_SENSOR2_PIN, INPUT);
pinMode(FLOAT_SENSOR3_PIN, INPUT);
Serial.begin(9600);
gsmSerial.begin(9600);
// Initialize GSM module
gsmSerial.println("AT"); // Check if GSM is working
delay(1000);
gsmSerial.println("AT+CGATT=1"); // Attach to GPRS service
delay(1000);
gsmSerial.println("AT+CGPADDR"); // Check IP address
delay(1000);
}
void loop() {
long duration;
int waterLevel;
// Trigger the ultrasonic sensor
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
waterLevel = duration * 0.0344 / 2; // Convert to cm
// Read float sensors
int float1 = analogRead(FLOAT_SENSOR1_PIN);
int float2 = analogRead(FLOAT_SENSOR2_PIN);
int float3 = analogRead(FLOAT_SENSOR3_PIN);
// Determine alert level
String alertLevel = "none";
if (float3 > 500) alertLevel = "red";
else if (float2 > 500) alertLevel = "orange";
else if (float1 > 500) alertLevel = "yellow";
// Send data to Flask server
String postData = "water_level=" + String(waterLevel);
postData += "&float1=" + String(float1);
postData += "&float2=" + String(float2);
postData += "&float3=" + String(float3);
postData += "&alert_level=" + alertLevel; // Include alert level
sendDataToServer(postData);
// Send SMS notification if orange alert is detected
if (alertLevel == "orange") {
sendSMS("Orange alert detected! Water level is " + String(waterLevel) + " cm.");
}
delay(60000); // Delay between measurements (1 minute)
}
void sendDataToServer(String postData) {
gsmSerial.println("AT+HTTPINIT"); // Initialize HTTP service
delay(1000);
gsmSerial.println("AT+HTTPPARA=\"URL\",\"" + String(serverURL) + "\""); // Set URL
delay(1000);
gsmSerial.println("AT+HTTPPARA=\"CID\",1"); // Set bearer profile
delay(1000);
gsmSerial.println("AT+HTTPDATA=" + String(postData.length()) + ",10000"); // Prepare data length
delay(1000);
gsmSerial.print(postData); // Send POST data
delay(1000);
gsmSerial.println("AT+HTTPACTION=1"); // Perform POST request
delay(10000); // Wait for server response
gsmSerial.println("AT+HTTPTERM"); // Terminate HTTP service
delay(1000);
}
void sendSMS(String message) {
gsmSerial.println("AT+CMGF=1"); // Set SMS to text mode
delay(1000);
for (int i = 0; i < sizeof(phoneNumbers) / sizeof(phoneNumbers[0]); i++) {
gsmSerial.println("AT+CMGS=\"" + String(phoneNumbers[i]) + "\""); // Set recipient number
delay(1000);
gsmSerial.println(message); // SMS message
delay(1000);
gsmSerial.write(26); // Ctrl+Z to send SMS
delay(5000); // Wait for message to be sent
}
}Loading
stm32-bluepill
stm32-bluepill