#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6KEDkRDyq"
#define BLYNK_TEMPLATE_NAME "tempDht"
#define BLYNK_AUTH_TOKEN "5HSbifUmg6AQlY3wrLoBQIeiMJRswdu3"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <PubSubClient.h>
#include "DHTesp.h"
const int DHT_PIN = 15;
const int LDR_PIN = 34; // استخدام حساس الضوء (LDR)
DHTesp dhtSensor;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// إعدادات MQTT
const char* mqttServer = "broker.hivemq.com";
const int mqttPort = 1883;
const char* mqttTopic = "smart_farm/dht";
WiFiClient espClient;
PubSubClient client(espClient);
BlynkTimer timer;
// إرسال البيانات إلى Blynk و MQTT
void sendSensorData() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
int lightLevel = analogRead(LDR_PIN); // قراءة قيمة حساس الضوء (LDR)
// طباعة القيم في Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("Light Level: " + String(lightLevel));
Serial.println("---");
// إرسال البيانات إلى HiveMQ
String payload = String(data.temperature) + "," + String(data.humidity) + "," + String(lightLevel);
client.publish(mqttTopic, payload.c_str());
// إرسال البيانات إلى Blynk
Blynk.virtualWrite(V0, data.temperature); // درجة الحرارة
Blynk.virtualWrite(V1, data.humidity); // الرطوبة
Blynk.virtualWrite(V2, lightLevel); // شدة الإضاءة
}
// الاتصال بـ MQTT
void connectToMQTT() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP32_DHT")) {
Serial.println("Connected to MQTT!");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
// تهيئة Blynk و MQTT
Blynk.begin(auth, ssid, pass);
client.setServer(mqttServer, mqttPort);
// إعداد مستشعر DHT22
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// ضبط الموقت لإرسال البيانات كل ثانية
timer.setInterval(1000, sendSensorData);
}
void loop() {
if (!client.connected()) {
connectToMQTT();
}
client.loop();
Blynk.run();
timer.run();
}