Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef ESP32
- #include <WiFi.h>
- #else
- #include <ESP8266WiFi.h>
- #endif
- #include <PubSubClient.h>
- #include <DHT.h>
- #include <ESP32Servo.h>
- #include <UniversalTelegramBot.h>
- #include <WiFiClientSecure.h>
- // **DHT11 Configuration**
- #define DHTPIN 4 // Pin 4 digunakan untuk DHT11
- #define DHTTYPE DHT11 // Menyatakan jenis sensor DHT11
- DHT dht(DHTPIN, DHTTYPE); // Membuat objek sensor DHT11 pada pin 4
- // **Pulse Sensor Configuration**
- #define PULSE_SENSOR_PIN 34 // Menggunakan pin 34 untuk Pulse Sensor
- int threshold = 300; // Menurunkan threshold
- unsigned long lastBeat = 0;
- int bpm = 0;
- bool pulseDetected = false;
- // **PIR Sensor Configuration**
- #define PIR_SENSOR_PIN 23 // Pin 23 digunakan untuk PIR Sensor
- // **Servo Motor Configuration**
- Servo myServo; // Membuat objek untuk kontrol Servo
- #define SERVO_PIN 13 // Pin 13 untuk Servo Motor
- // **WiFi Credentials**
- // const char* ssid = "kai";
- // const char* password = "lupapassword";
- const char* ssid = "Xiaomi 12 Lite";
- const char* password = "34343434";
- // **MQTT Broker Configuration**
- const char* mqttServer = "202.10.40.163"; // Alamat broker MQTT
- const int mqttPort = 1883; // Port default MQTT (1883)
- const char* mqttUser = "ba221"; // Username MQTT
- const char* mqttPassword = "myiot"; // Password MQTT
- const char* clientID = "ESP32Client"; // ID unik untuk setiap koneksi MQTT
- #define BOT_TOKEN "7973643121:AAFNlfQaRucLEAntyBQdljX7aQYmNW7SLwc"
- #define CHAT_ID "6942098176"
- WiFiClientSecure secured_client;
- UniversalTelegramBot bot(BOT_TOKEN, secured_client);
- // MQTT Client
- WiFiClient espClient;
- PubSubClient mqttClient(espClient);
- // **Serial Monitor Initialization**
- void setup() {
- // Initialize Serial Monitor
- Serial.begin(115200);
- // Initialize DHT11 sensor
- dht.begin();
- // Initialize Pulse Sensor
- pinMode(PULSE_SENSOR_PIN, INPUT); // Set pin 34 untuk Pulse Sensor
- // Initialize PIR Sensor
- pinMode(PIR_SENSOR_PIN, INPUT); // Set pin 23 untuk PIR Sensor
- // Initialize Servo Motor
- myServo.attach(SERVO_PIN); // Servo motor terhubung ke pin 13
- // Connect to WiFi
- WiFi.begin(ssid, password);
- Serial.print("Menghubungkan ke WiFi");
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("\nWiFi terhubung!");
- Serial.println("IP address: " + WiFi.localIP().toString());
- // Setup MQTT
- mqttClient.setServer(mqttServer, mqttPort);
- mqttClient.setCallback(mqttCallback);
- // Connect to MQTT broker
- while (!mqttClient.connected()) {
- Serial.print("Menghubungkan ke MQTT...");
- if (mqttClient.connect(clientID, mqttUser, mqttPassword)) {
- Serial.println("Terhubung ke MQTT!");
- } else {
- Serial.print("Gagal, rc=");
- Serial.print(mqttClient.state());
- delay(2000);
- }
- }
- secured_client.setInsecure();
- }
- void loop() {
- // Ensure MQTT connection is still active
- if (!mqttClient.connected()) {
- while (!mqttClient.connected()) {
- Serial.print("Menghubungkan kembali ke MQTT...");
- if (mqttClient.connect(clientID, mqttUser, mqttPassword)) {
- Serial.println("Terhubung kembali ke MQTT!");
- } else {
- Serial.print("Gagal, rc=");
- Serial.print(mqttClient.state());
- delay(2000);
- }
- }
- }
- mqttClient.loop(); // Proses pesan MQTT
- // Membaca suhu dan kelembapan dari DHT11
- float t = dht.readTemperature(); // Membaca suhu dalam Celsius
- float h = dht.readHumidity(); // Membaca kelembapan dalam persen
- // Cek apakah pembacaan gagal
- if (isnan(t) || isnan(h)) {
- Serial.println("Gagal membaca data dari DHT11");
- } else {
- // Menampilkan suhu dan kelembapan di Serial Monitor
- Serial.print("Suhu: ");
- Serial.print(t);
- Serial.print(" °C");
- Serial.print(" | Kelembapan: ");
- Serial.print(h);
- Serial.println(" %");
- // Publish data suhu dan kelembapan ke MQTT
- mqttClient.publish("sensor/suhu", String(t).c_str());
- mqttClient.publish("sensor/kelembapan", String(h).c_str());
- // Kirim data suhu dan kelembapan ke Telegram
- String message = "Suhu: " + String(t) + " °C\nKelembapan: " + String(h) + " %";
- bot.sendMessage(CHAT_ID, message, "");
- }
- // Pulse Sensor Logic
- int sensorValue = analogRead(PULSE_SENSOR_PIN); // Membaca nilai dari Pulse Sensor pada pin 34
- Serial.print("Pulse Sensor Raw Value: ");
- Serial.println(sensorValue);
- if (sensorValue > threshold) {
- if (!pulseDetected) {
- unsigned long currentTime = millis();
- unsigned long interval = currentTime - lastBeat;
- if (interval > 300) { // Minimal interval antara dua detak
- bpm = 60000 / interval; // Menghitung BPM
- lastBeat = currentTime;
- pulseDetected = true;
- Serial.print("BPM: ");
- Serial.println(bpm);
- // Publish BPM ke MQTT
- mqttClient.publish("sensor/bpm", String(bpm).c_str());
- // Kirim BPM ke Telegram
- String bpmMessage = "Detak Jantung: " + String(bpm) + " BPM";
- bot.sendMessage(CHAT_ID, bpmMessage, "");
- }
- }
- } else {
- pulseDetected = false;
- }
- // PIR Sensor Logic
- int pirState = digitalRead(PIR_SENSOR_PIN); // Membaca status PIR Sensor
- if (pirState == HIGH) {
- Serial.println("Gerakan terdeteksi!");
- myServo.write(90); // Servo bergerak ke posisi 90 derajat saat ada gerakan
- mqttClient.publish("sensor/gerakan", "Terjadi"); // Publish gerakan ke MQTT
- // Kirim pesan gerakan terdeteksi ke Telegram
- bot.sendMessage(CHAT_ID, "Gerakan terdeteksi!", "");
- } else {
- Serial.println("Tidak ada gerakan.");
- myServo.write(0); // Servo bergerak ke posisi 0 derajat jika tidak ada gerakan
- mqttClient.publish("sensor/gerakan", "Tidak ada"); // Publish tidak ada gerakan ke MQTT
- // Kirim pesan tidak ada gerakan ke Telegram
- bot.sendMessage(CHAT_ID, "Tidak ada gerakan.", "");
- }
- // Delay sebelum membaca lagi
- delay(2000); // Delay selama 2 detik
- }
- // Callback function untuk MQTT
- void mqttCallback(char* topic, byte* payload, unsigned int length) {
- // Handle incoming MQTT messages here if needed
- }
Advertisement
Add Comment
Please, Sign In to add comment