// #include <LiquidCrystal_I2C.h>
// #define Pulse_sensor 14
// #define Temp_sensor 27
// #define LED 2
// #define buzzer 4
// LiquidCrystal_I2C lcd(0x27, 16, 2);
// void setup() {
// // put your setup code here, to run once:
// Serial.begin(115200);
// Serial.println("Hello, ESP32!");
// ledcSetup(0, 1000, 10); // Use LEDC channel 0, 1000 Hz, 10-bit depth
// ledcAttachPin(buzzer, 0); // Attach buzzer to LEDC channel 0
// // initialize LCD
// lcd.init();
// // turn on LCD backlight
// lcd.backlight();
// pinMode(LED, OUTPUT);
// pinMode(buzzer ,OUTPUT );
// digitalWrite(buzzer, LOW);
// digitalWrite(LED, LOW);
// }
// void check(int pulse,int temp)
// {
// if(pulse >=1000)
// {
// digitalWrite(LED, HIGH);
// tone(buzzer,1030);
// }
// else if(temp>=1000)
// {
// digitalWrite(LED, HIGH);
// tone(buzzer,1030);
// }
// else
// {
// digitalWrite(LED,LOW);
// noTone(buzzer);
// }
// }
// // void checktemp(int temp)
// // {
// // }
// void loop() {
// // put your main code here, to run repeatedly:
// int pulse = analogRead(14);
// int temp= analogRead(27);
// //digitalWrite(LED, HIGH);
// //tone(buzzer,1030);
// // set cursor to first column, first row
// lcd.setCursor(0, 0);
// Serial.print("Pulse value: ");
// Serial.println(pulse);
// lcd.print("Pulse:");
// lcd.print(pulse);
// lcd.setCursor(0,1);
// Serial.print("Temperatue : ");
// Serial.println(temp);
// lcd.print("Temperature:");
// lcd.print(temp);
// check(pulse,temp);
// delay(1000);
// delay(10); // this speeds up the simulation
// lcd.clear();
// }
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
// ================== تعريف المكونات ==================
const int Pulse_sensor = 14;
const int Temp_sensor = 27;
const int LED = 2;
const int buzzer = 4;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ================== إعداد WiFi و ThingSpeak ==================
const char* ssid = "YourWiFi";
const char* password = "YourPassword";
const char* apiKey = "YOUR_THINGSPEAK_API_KEY";
// ================== إعداد المتوسط المتحرك ==================
const int windowSize = 5;
int pulseValues[windowSize] = {0};
int tempValues[windowSize] = {0};
int index = 0;
// ================== دوال المساعدة ==================
// دالة لحساب المتوسط المتحرك
int movingAverage(int values[], int newValue){
values[index] = newValue;
index = (index + 1) % windowSize;
long sum = 0;
for(int i=0; i<windowSize; i++) sum += values[i];
return sum / windowSize;
}
// دالة لعرض البيانات على LCD و Serial Monitor
void displayData(int pulse, int temp){
lcd.setCursor(0,0);
lcd.print("Pulse: "); lcd.print(pulse);
lcd.setCursor(0,1);
lcd.print("Temp: "); lcd.print(temp);
Serial.print("Pulse: "); Serial.println(pulse);
Serial.print("Temp: "); Serial.println(temp);
}
// دالة للتحكم بالمخرجات
void checkOutputs(int pulse, int temp){
if(pulse >= 800 || temp >= 800){ // عتبة مناسبة لمحاكاة
digitalWrite(LED, HIGH);
ledcWriteTone(0, 1030); // تشغيل Buzzer
} else {
digitalWrite(LED, LOW);
ledcWriteTone(0, 0); // إيقاف Buzzer
}
}
// دالة لإرسال البيانات إلى ThingSpeak
void sendToCloud(int pulse, int temp){
if(WiFi.status() == WL_CONNECTED){
HTTPClient http;
String url = "https://api.thingspeak.com/update?api_key=" + String(apiKey)
+ "&field1=" + String(pulse)
+ "&field2=" + String(temp);
http.begin(url);
int httpResponse = http.GET();
http.end();
}
}
// ================== setup ==================
void setup() {
Serial.begin(115200);
Serial.println("ESP32 IoT Project Started");
// إعداد Buzzer
ledcSetup(0, 1000, 10);
ledcAttachPin(buzzer, 0);
// إعداد LCD
lcd.init();
lcd.backlight();
// إعداد المخرجات
pinMode(LED, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(LED, LOW);
digitalWrite(buzzer, LOW);
// الاتصال بالواي فاي
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
}
// ================== loop ==================
void loop() {
// قراءة الحساسات
int rawPulse = analogRead(Pulse_sensor);
int rawTemp = analogRead(Temp_sensor);
// معالجة البيانات (متوسط متحرك)
int avgPulse = movingAverage(pulseValues, rawPulse);
int avgTemp = movingAverage(tempValues, rawTemp);
// عرض البيانات
displayData(avgPulse, avgTemp);
// التحكم بالمخرجات
checkOutputs(avgPulse, avgTemp);
// إرسال البيانات للسحابة
sendToCloud(avgPulse, avgTemp);
delay(1000); // تحديث كل ثانية
lcd.clear();
}