Painlover

PUMP HEALTH

Jan 23rd, 2025
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifdef ESP32
  2. #include <WiFi.h>
  3. #else
  4. #include <ESP8266WiFi.h>
  5. #endif
  6. #include <PubSubClient.h>
  7. #include <DHT.h>
  8. #include <ESP32Servo.h>
  9. #include <UniversalTelegramBot.h>
  10. #include <WiFiClientSecure.h>
  11.  
  12. // **DHT11 Configuration**
  13. #define DHTPIN 4        // Pin 4 digunakan untuk DHT11
  14. #define DHTTYPE DHT11   // Menyatakan jenis sensor DHT11
  15. DHT dht(DHTPIN, DHTTYPE); // Membuat objek sensor DHT11 pada pin 4
  16.  
  17. // **Pulse Sensor Configuration**
  18. #define PULSE_SENSOR_PIN 34  // Menggunakan pin 34 untuk Pulse Sensor
  19. int threshold = 300;       // Menurunkan threshold
  20. unsigned long lastBeat = 0;
  21. int bpm = 0;
  22. bool pulseDetected = false;
  23.  
  24. // **PIR Sensor Configuration**
  25. #define PIR_SENSOR_PIN 23    // Pin 23 digunakan untuk PIR Sensor
  26.  
  27. // **Servo Motor Configuration**
  28. Servo myServo;             // Membuat objek untuk kontrol Servo
  29. #define SERVO_PIN 13        // Pin 13 untuk Servo Motor
  30.  
  31. // **WiFi Credentials**
  32. // const char* ssid = "kai";
  33. // const char* password = "lupapassword";
  34. const char* ssid = "Xiaomi 12 Lite";
  35. const char* password = "34343434";
  36.  
  37. // **MQTT Broker Configuration**
  38. const char* mqttServer = "202.10.40.163";  // Alamat broker MQTT
  39. const int mqttPort = 1883;                 // Port default MQTT (1883)
  40. const char* mqttUser = "ba221";            // Username MQTT
  41. const char* mqttPassword = "myiot";       // Password MQTT
  42. const char* clientID = "ESP32Client";      // ID unik untuk setiap koneksi MQTT
  43.  
  44. #define BOT_TOKEN "7973643121:AAFNlfQaRucLEAntyBQdljX7aQYmNW7SLwc"
  45. #define CHAT_ID "6942098176"
  46.  
  47. WiFiClientSecure secured_client;
  48. UniversalTelegramBot bot(BOT_TOKEN, secured_client);
  49.  
  50. // MQTT Client
  51. WiFiClient espClient;
  52. PubSubClient mqttClient(espClient);
  53.  
  54. // **Serial Monitor Initialization**
  55. void setup() {
  56.   // Initialize Serial Monitor
  57.   Serial.begin(115200);
  58.  
  59.   // Initialize DHT11 sensor
  60.   dht.begin();
  61.  
  62.   // Initialize Pulse Sensor
  63.   pinMode(PULSE_SENSOR_PIN, INPUT);  // Set pin 34 untuk Pulse Sensor
  64.  
  65.   // Initialize PIR Sensor
  66.   pinMode(PIR_SENSOR_PIN, INPUT);    // Set pin 23 untuk PIR Sensor
  67.  
  68.   // Initialize Servo Motor
  69.   myServo.attach(SERVO_PIN);         // Servo motor terhubung ke pin 13
  70.  
  71.   // Connect to WiFi
  72.   WiFi.begin(ssid, password);
  73.   Serial.print("Menghubungkan ke WiFi");
  74.   while (WiFi.status() != WL_CONNECTED) {
  75.     delay(500);
  76.     Serial.print(".");
  77.   }
  78.   Serial.println("\nWiFi terhubung!");
  79.   Serial.println("IP address: " + WiFi.localIP().toString());
  80.  
  81.   // Setup MQTT
  82.   mqttClient.setServer(mqttServer, mqttPort);
  83.   mqttClient.setCallback(mqttCallback);
  84.  
  85.   // Connect to MQTT broker
  86.   while (!mqttClient.connected()) {
  87.     Serial.print("Menghubungkan ke MQTT...");
  88.     if (mqttClient.connect(clientID, mqttUser, mqttPassword)) {
  89.       Serial.println("Terhubung ke MQTT!");
  90.     } else {
  91.       Serial.print("Gagal, rc=");
  92.       Serial.print(mqttClient.state());
  93.       delay(2000);
  94.     }
  95.   }
  96.   secured_client.setInsecure();
  97. }
  98.  
  99. void loop() {
  100.   // Ensure MQTT connection is still active
  101.   if (!mqttClient.connected()) {
  102.     while (!mqttClient.connected()) {
  103.       Serial.print("Menghubungkan kembali ke MQTT...");
  104.       if (mqttClient.connect(clientID, mqttUser, mqttPassword)) {
  105.         Serial.println("Terhubung kembali ke MQTT!");
  106.       } else {
  107.         Serial.print("Gagal, rc=");
  108.         Serial.print(mqttClient.state());
  109.         delay(2000);
  110.       }
  111.     }
  112.   }
  113.   mqttClient.loop();  // Proses pesan MQTT
  114.  
  115.   // Membaca suhu dan kelembapan dari DHT11
  116.   float t = dht.readTemperature();  // Membaca suhu dalam Celsius
  117.   float h = dht.readHumidity();     // Membaca kelembapan dalam persen
  118.  
  119.   // Cek apakah pembacaan gagal
  120.   if (isnan(t) || isnan(h)) {
  121.     Serial.println("Gagal membaca data dari DHT11");
  122.   } else {
  123.     // Menampilkan suhu dan kelembapan di Serial Monitor
  124.     Serial.print("Suhu: ");
  125.     Serial.print(t);
  126.     Serial.print(" °C");
  127.     Serial.print(" | Kelembapan: ");
  128.     Serial.print(h);
  129.     Serial.println(" %");
  130.  
  131.     // Publish data suhu dan kelembapan ke MQTT
  132.     mqttClient.publish("sensor/suhu", String(t).c_str());
  133.     mqttClient.publish("sensor/kelembapan", String(h).c_str());
  134.  
  135.     // Kirim data suhu dan kelembapan ke Telegram
  136.     String message = "Suhu: " + String(t) + " °C\nKelembapan: " + String(h) + " %";
  137.     bot.sendMessage(CHAT_ID, message, "");
  138.   }
  139.  
  140.   // Pulse Sensor Logic
  141.   int sensorValue = analogRead(PULSE_SENSOR_PIN);  // Membaca nilai dari Pulse Sensor pada pin 34
  142.   Serial.print("Pulse Sensor Raw Value: ");
  143.   Serial.println(sensorValue);
  144.  
  145.   if (sensorValue > threshold) {
  146.     if (!pulseDetected) {
  147.       unsigned long currentTime = millis();
  148.       unsigned long interval = currentTime - lastBeat;
  149.       if (interval > 300) {  // Minimal interval antara dua detak
  150.         bpm = 60000 / interval;  // Menghitung BPM
  151.         lastBeat = currentTime;
  152.         pulseDetected = true;
  153.         Serial.print("BPM: ");
  154.         Serial.println(bpm);
  155.  
  156.         // Publish BPM ke MQTT
  157.         mqttClient.publish("sensor/bpm", String(bpm).c_str());
  158.  
  159.         // Kirim BPM ke Telegram
  160.         String bpmMessage = "Detak Jantung: " + String(bpm) + " BPM";
  161.         bot.sendMessage(CHAT_ID, bpmMessage, "");
  162.       }
  163.     }
  164.   } else {
  165.     pulseDetected = false;
  166.   }
  167.  
  168.   // PIR Sensor Logic
  169.   int pirState = digitalRead(PIR_SENSOR_PIN); // Membaca status PIR Sensor
  170.   if (pirState == HIGH) {
  171.     Serial.println("Gerakan terdeteksi!");
  172.     myServo.write(90); // Servo bergerak ke posisi 90 derajat saat ada gerakan
  173.     mqttClient.publish("sensor/gerakan", "Terjadi");  // Publish gerakan ke MQTT
  174.  
  175.     // Kirim pesan gerakan terdeteksi ke Telegram
  176.     bot.sendMessage(CHAT_ID, "Gerakan terdeteksi!", "");
  177.   } else {
  178.     Serial.println("Tidak ada gerakan.");
  179.     myServo.write(0);  // Servo bergerak ke posisi 0 derajat jika tidak ada gerakan
  180.     mqttClient.publish("sensor/gerakan", "Tidak ada");  // Publish tidak ada gerakan ke MQTT
  181.  
  182.     // Kirim pesan tidak ada gerakan ke Telegram
  183.     bot.sendMessage(CHAT_ID, "Tidak ada gerakan.", "");
  184.   }
  185.  
  186.   // Delay sebelum membaca lagi
  187.   delay(2000);  // Delay selama 2 detik
  188. }
  189.  
  190. // Callback function untuk MQTT
  191. void mqttCallback(char* topic, byte* payload, unsigned int length) {
  192.   // Handle incoming MQTT messages here if needed
  193. }
  194.  
Advertisement
Add Comment
Please, Sign In to add comment