#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"
// ——— التعاريف ———
#define DHTPIN 27 // دبوس بيانات DHT22
#define DHTTYPE DHT22
#define MOISTURE_PIN 34 // دبوس ADC لقراءة حساس الرطوبة
#define RELAY_PIN 23 // دبوس التحكم بالريليه
// ——— إعدادات WiFi و ThingSpeak ———
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
const char* apiKey = "NID9BWYT8JVB5M6E";
// ——— روابط ThingHTTP لتشغيل/إيقاف المضخة ———
const char* thingHttpOnURL = "http://api.thingspeak.com/apps/thinghttp/send_request?api_key=YOG2OLCGVLYFB85Y";
const char* thingHttpOffURL = "http://api.thingspeak.com/apps/thinghttp/send_request?api_key=KXGFSA1FBTFREBQN";
// ——— إعدادات المعايرة للقراءة كـ% ———
const int sensorDry = 4095;
const int sensorWet = 0;
const int thresholdPercent = 30; // عتبة تشغيل المضخة
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // إيقاف المضخة بالبداية
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi متصل!");
}
void loop() {
// 1. قراءة الحساسات
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int rawValue = analogRead(MOISTURE_PIN);
// 2. تحويل إلى نسبة مئوية
int moisturePercent = map(rawValue, sensorDry, sensorWet, 0, 100);
moisturePercent = constrain(moisturePercent, 0, 100);
// 3. طباعة القراءات
Serial.print("Soil Moisture: ");
Serial.print(moisturePercent);
Serial.println(" %");
Serial.print("Air Temp: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Air Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// 4. تحكم بالمضخة و ThingHTTP
if (moisturePercent < thresholdPercent) {
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Pump: ON");
// استدعاء ThingHTTP لتشغيل المضخة
HTTPClient http;
http.begin(thingHttpOnURL);
int httpCode = http.GET();
Serial.print("ThingHTTP ON Response: ");
Serial.println(httpCode);
http.end();
} else {
digitalWrite(RELAY_PIN, LOW);
Serial.println("Pump: OFF");
// استدعاء ThingHTTP لإيقاف المضخة
HTTPClient http;
http.begin(thingHttpOffURL);
int httpCode = http.GET();
Serial.print("ThingHTTP OFF Response: ");
Serial.println(httpCode);
http.end();
}
// 5. إرسال البيانات لـ ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
String url = String("http://api.thingspeak.com/update?api_key=")
+ apiKey
+ "&field1=" + String(moisturePercent)
+ "&field2=" + String(temperature)
+ "&field3=" + String(humidity);
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
Serial.print("ThingSpeak Response: ");
Serial.println(httpCode);
http.end();
}
Serial.println("----------------------------");
delay(2000); // انتظار 2 ثانية بين القراءات
}