#include <WiFi.h> // کتابخانه اتصال به WiFi برای ESP32
#include <BlynkESP32.h> // کتابخانه Blynک مخصوص ESP32
// اطلاعات WiFi
char ssid[] = "Blackvid"; // نام وایفای
char pass[] = "Morteza@7078"; // رمز عبور وایفای
// توکن و اطلاعات Blynk
#define BLYNK_TEMPLATE_ID "TMPL4qDQ4yIde" // شناسه قالب Blynک
#define BLYNK_TEMPLATE_NAME "Smart Growth Chamber" // نام قالب
#define BLYNK_AUTH_TOKEN "_iSSMArX71qxc4aifQlNF1j9SIreSv2W" // توکن احراز هویت Blynک
// پینهای مجازی برای Blynk
#define TEMP_VPIN V0 // دما
#define MOISTURE_VPIN V1 // رطوبت
#define CO2_VPIN V2 // CO2
#define LIGHT_VPIN V3 // نور
// متغیرهای سنسورها
float temperature = 25.0; // مقدار دما (شبیهسازی شده)
float moisture = 70.0; // مقدار رطوبت (شبیهسازی شده)
int co2 = 400; // مقدار CO2 (شبیهسازی شده)
int light = 5000; // مقدار نور (شبیهسازی شده)
// وضعیت سنسورها
bool tempStatus = true; // وضعیت دما
bool moistureStatus = true; // وضعیت رطوبت
bool co2Status = true; // وضعیت CO2
bool lightStatus = true; // وضعیت نور
// تایمر برای ارسال داده به Blynk
SimpleTimer timer;
// تابع ارسال داده به Blynk
void sendSensorData() {
// شبیهسازی دادهها
temperature = 25.0 + random(-5, 5); // مقدار شبیهسازی شده دما
moisture = 70.0 + random(-10, 10); // مقدار شبیهسازی شده رطوبت
co2 = 400 + random(-50, 50); // مقدار شبیهسازی شده CO2
light = random(0, 10000); // مقدار شبیهسازی شده نور
// ارسال داده به Blynk اگر سنسور فعال باشد
if (tempStatus && Blynk.connected()) {
Blynk.virtualWrite(TEMP_VPIN, temperature); // ارسال داده دما به Blynk
}
if (moistureStatus && Blynk.connected()) {
Blynk.virtualWrite(MOISTURE_VPIN, moisture); // ارسال داده رطوبت به Blynk
}
if (co2Status && Blynk.connected()) {
Blynk.virtualWrite(CO2_VPIN, co2); // ارسال داده CO2 به Blynk
}
if (lightStatus && Blynk.connected()) {
Blynk.virtualWrite(LIGHT_VPIN, light); // ارسال داده نور به Blynk
}
// نمایش دادهها در سریال مانیتور
Serial.println("Data sent to Blynk:");
Serial.printf("Temp: %.2f, Moisture: %.2f, CO2: %d, Light: %d\n",
temperature, moisture, co2, light);
}
// تابع برای کنترل سنسورها با سوئیچهای Blynk
BLYNK_WRITE(V0) { // دما
tempStatus = param.asInt();
Serial.print("Temperature Sensor Status: ");
Serial.println(tempStatus ? "ON" : "OFF");
}
BLYNK_WRITE(V1) { // رطوبت
moistureStatus = param.asInt();
Serial.print("Moisture Sensor Status: ");
Serial.println(moistureStatus ? "ON" : "OFF");
}
BLYNK_WRITE(V2) { // CO2
co2Status = param.asInt();
Serial.print("CO2 Sensor Status: ");
Serial.println(co2Status ? "ON" : "OFF");
}
BLYNK_WRITE(V3) { // نور
lightStatus = param.asInt();
Serial.print("Light Sensor Status: ");
Serial.println(lightStatus ? "ON" : "OFF");
}
void setup() {
// پورت سریال برای دیباگ
Serial.begin(115200);
Serial.println("Starting ESP32...");
// جلوگیری از ورود به حالت Access Point
WiFi.mode(WIFI_STA); // فقط حالت استیشن را فعال میکنیم
// اتصال به WiFi
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, pass);
int attempts = 0;
// تلاش برای اتصال به WiFi
while (WiFi.status() != WL_CONNECTED && attempts < 50) { // افزایش تعداد تلاشها به 50
delay(1000);
attempts++;
Serial.print("."); // نمایش نقطه برای نشان دادن تلاشها
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected to WiFi");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP()); // نمایش آدرس IP دستگاه
} else {
Serial.println("\nFailed to connect to WiFi");
return; // اگر اتصال برقرار نشد، از اجرای کد جلوگیری میشود
}
// اتصال به Blynk
Serial.println("Connecting to Blynk...");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
int blynkAttempts = 0;
// تلاش برای اتصال به Blynk
while (!Blynk.connected() && blynkAttempts < 40) { // تلاش بیشتر برای اتصال به Blynk
delay(1000);
blynkAttempts++;
Serial.print("."); // نمایش نقطه برای نشان دادن تلاشها
}
if (Blynk.connected()) {
Serial.println("\nConnected to Blynk!");
} else {
Serial.println("\nFailed to connect to Blynk");
return; // اگر اتصال به Blynک برقرار نشد، از اجرای کد جلوگیری میشود
}
// تنظیم تایمر برای ارسال داده هر 5 ثانیه
timer.setInterval(5000L, sendSensorData);
}
void loop() {
Blynk.run(); // برای ارتباط با سرور Blynk
timer.run(); // اجرای تایمر
// بررسی وضعیت اتصال به Blynk
if (!Blynk.connected()) {
Serial.println("Not connected to Blynk!");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // تلاش مجدد برای اتصال به Blynk
}
}