#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
// إعدادات الشبكة
const char* ssid = "Wokwi-GUEST"; // تم تغيير اسم الشبكة
const char* password = ""; // تم إزالة كلمة المرور
// إعدادات ThingSpeak
const char* readServer = "api.thingspeak.com";
const String readAPIKey = "API_KEY_قناة_التحكم"; // استبدلها بمفتاح القناة
const int controlChannelID = 1234567; // استبدلها برقم قناة التحكم
// تعريف دبابيس المستشعر والمكونات
#define DHT_PIN 15
#define FAN_PIN 12
#define HEATER_PIN 14
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(FAN_PIN, OUTPUT);
pinMode(HEATER_PIN, OUTPUT);
// الاتصال بالواي فاي
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
// قراءة البيانات من المستشعر
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
delay(2000);
return;
}
// عرض القراءات
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print("°C, Humidity: ");
Serial.print(humidity);
Serial.println("%");
// التحقق من حالة أجهزة التحكم في ThingSpeak
checkControlStatus();
delay(2000); // انتظر ثانيتين قبل القراءة التالية
}
void checkControlStatus() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://" + String(readServer) + "/channels/" + String(controlChannelID) + "/fields/1,2.json?api_key=" + readAPIKey + "&results=1";
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
// استخراج قيم الحقول من JSON
int fanStatus = extractValue(payload, "field1");
int heaterStatus = extractValue(payload, "field2");
// تطبيق حالات التحكم
digitalWrite(FAN_PIN, fanStatus);
digitalWrite(HEATER_PIN, heaterStatus);
Serial.print("Fan Status: ");
Serial.println(fanStatus ? "ON" : "OFF");
Serial.print("Heater Status: ");
Serial.println(heaterStatus ? "ON" : "OFF");
} else {
Serial.println("Error reading control status from ThingSpeak");
}
http.end();
}
}
int extractValue(String json, String field) {
int startIndex = json.indexOf("\"" + field + "\":");
if (startIndex == -1) return -1;
startIndex = json.indexOf(":", startIndex) + 1;
int endIndex = json.indexOf(",", startIndex);
if (endIndex == -1) endIndex = json.indexOf("}", startIndex);
String valueStr = json.substring(startIndex, endIndex);
valueStr.trim();
return valueStr.toInt();
}