/************************************************************
* NABBEH AI - Worker Monitor (Temporary Wokwi Version)
* ESP32 + DS18B20 + 2 Potentiometers + Blynk + Telegram
************************************************************/
#define BLYNK_TEMPLATE_ID "TMPL6NaARIoQC"
#define BLYNK_TEMPLATE_NAME "NABBEH AI"
#define BLYNK_AUTH_TOKEN "bSWRb7-dd4mJtpeTCGJ-Mi3nVS_lNQKB"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <BlynkSimpleEsp32.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <HTTPClient.h>
/************* WIFI *************/
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
/************* TELEGRAM *************/
String BOT_TOKEN = "8672103654:AAEh8FUsDVo8qMU07NFutrvG-8oMRMU8UZQ";
String CHAT_ID = "-1003977507133"; // ضع Chat ID الخاص بالقروب
/************* PINS *************/
#define ONE_WIRE_BUS 4 // DS18B20
#define HEART_PIN 34 // Potentiometer 1
#define PRESSURE_PIN 35 // Potentiometer 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
BlynkTimer timer;
/************* VARIABLES *************/
float bodyTemp = 36.5;
int heartRate = 80;
int pressure = 120;
String currentStatus = "✅ الحالة: طبيعي";
String lastStatus = "";
/************* TELEGRAM SEND *************/
void sendTelegram(String msg) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String encodedMsg = msg;
encodedMsg.replace(" ", "%20");
encodedMsg.replace("\n", "%0A");
encodedMsg.replace("✅", "%E2%9C%85");
encodedMsg.replace("⚠️", "%E2%9A%A0%EF%B8%8F");
encodedMsg.replace("🛑", "%F0%9F%9B%91");
encodedMsg.replace("🚨", "%F0%9F%9A%A8");
encodedMsg.replace("❤️", "%E2%9D%A4%EF%B8%8F");
encodedMsg.replace("🌡️", "%F0%9F%8C%A1%EF%B8%8F");
encodedMsg.replace("🩸", "%F0%9F%A9%B8");
String url = "https://api.telegram.org/bot" + BOT_TOKEN +
"/sendMessage?chat_id=" + CHAT_ID +
"&text=" + encodedMsg;
http.begin(url);
int httpCode = http.GET();
Serial.print("Telegram HTTP Code: ");
Serial.println(httpCode);
http.end();
} else {
Serial.println("WiFi not connected. Telegram not sent.");
}
}
/************* MAIN SENSOR LOGIC *************/
void sendWorkerData() {
// قراءة حرارة الجسم من DS18B20
sensors.requestTemperatures();
bodyTemp = sensors.getTempCByIndex(0);
// قراءة النبض والضغط من Potentiometers
heartRate = map(analogRead(HEART_PIN), 0, 4095, 50, 140);
pressure = map(analogRead(PRESSURE_PIN), 0, 4095, 80, 180);
// تحديد الحالة
if (bodyTemp > 38.0 || heartRate > 110 || pressure > 160) {
currentStatus = "🛑 الحالة: خطر";
}
else if (bodyTemp > 37.0 || heartRate > 100 || pressure > 140) {
currentStatus = "⚠️ الحالة: تحذير";
}
else {
currentStatus = "✅ الحالة: طبيعي";
}
// إرسال البيانات إلى Blynk
Blynk.virtualWrite(V4, bodyTemp); // حرارة الجسم
Blynk.virtualWrite(V5, heartRate); // النبض
Blynk.virtualWrite(V6, pressure); // الضغط
Blynk.virtualWrite(V7, currentStatus); // الحالة
// تلوين الحالة في Blynk
if (currentStatus == "🛑 الحالة: خطر") {
Blynk.setProperty(V7, "color", "#D3435C");
} else if (currentStatus == "⚠️ الحالة: تحذير") {
Blynk.setProperty(V7, "color", "#ED9D00");
} else {
Blynk.setProperty(V7, "color", "#23C48E");
}
// طباعة Serial
Serial.println("================================");
Serial.print("Body Temp: ");
Serial.print(bodyTemp);
Serial.println(" °C");
Serial.print("Heart Rate: ");
Serial.print(heartRate);
Serial.println(" bpm");
Serial.print("Pressure: ");
Serial.println(pressure);
Serial.print("Status: ");
Serial.println(currentStatus);
// إرسال Telegram فقط عند تغير الحالة
if (currentStatus != lastStatus) {
String msg = "📡 NABBEH AI - Worker Health\n";
msg += "----------------------\n";
msg += "🌡️ حرارة الجسم: " + String(bodyTemp, 1) + " °C\n";
msg += "❤️ معدل القلب: " + String(heartRate) + " bpm\n";
msg += "🩸 الضغط: " + String(pressure) + "\n\n";
msg += currentStatus;
// أرسل فقط عند التحذير أو الخطر أو العودة للطبيعي
sendTelegram(msg);
lastStatus = currentStatus;
}
}
/************* SETUP *************/
void setup() {
Serial.begin(115200);
sensors.begin();
pinMode(HEART_PIN, INPUT);
pinMode(PRESSURE_PIN, INPUT);
Serial.println("Connecting to Blynk...");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(3000L, sendWorkerData);
Serial.println("Worker Monitor Started ✅");
}
/************* LOOP *************/
void loop() {
Blynk.run();
timer.run();
}