#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <WiFi.h>
#include <HTTPClient.h>
#include <PubSubClient.h>
#include <DHT.h>
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define THINGSBOARD_TOKEN "E4dpKCDohrSRBQpAMPBt"
#define DHT22PIN 13
#define PULSE_PIN 35
DHT dht(DHT22PIN, DHT22);
const int LM35Pin = 34;
const int numReadings = 10;
const int pir_pin =32;
int readings[numReadings];
int readingIndex = 0;
int total = 0;
LiquidCrystal_I2C oled(0x27,16,2);
void setup() {
Serial.begin(115200);
pinMode(LM35Pin, INPUT);
analogReadResolution(12);
dht.begin();
pinMode(pir_pin, INPUT);
oled.init();
oled.backlight();
for (int i = 0; i < numReadings; i++) {
readings[i] = 0;
}
Serial.print("Connecting to WiFi");
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.println(" Starting!");
delay(2000);
}
void loop() {
int sensorValue = analogRead(LM35Pin);
float temperature = (sensorValue / 4095.0) * 330.0;
float humi = dht.readHumidity();
float temp = dht.readTemperature();
int16_t pulseValue = analogRead(PULSE_PIN);
// Convert pulseValue to voltage
float voltage = pulseValue * (5 / 4095.0);
// calculate heartRate from volatge
int heartrate = (voltage / 3.3) * 675;
Serial.print("Body Temperature: ");
Serial.print(temperature);
Serial.print(" °C");
Serial.println();
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print("°C");
Serial.println();
Serial.print("Humidity: ");
Serial.print(humi);
Serial.print(" %");
Serial.println("");
Serial.print("Heartbeat Pulse: ");
Serial.print(heartrate);
Serial.println("");
const int IP = digitalRead(pir_pin);
if(IP==1){
Serial.print("Status Gerakan: ");
Serial.print(IP);
Serial.println(" Ada Gerakan");
Serial.println("");
}
else{
Serial.print("Status Gerakan: ");
Serial.print(IP);
Serial.println(" Tidak ada Gerakan");
Serial.println("");
}
// Kirim data ke ThingsBoard
sendDataToThingsBoard(temperature, temp, humi, heartrate, IP);
oled.setCursor(0,0); //Menampilkan text di posisi kolom ke 0 baris ke 0
oled.println ("BTemp: " + String(temperature) + " C ");
oled.setCursor(0,2); //Menampilkan text di posisi kolom ke 0 baris ke 2
oled.println ("Temperature: " + String(temp) + " C ");
oled.setCursor(0,3); //Menampilkan text di posisi kolom ke 0 baris ke 3
oled.println ("Humidity: " + String(humi) + " % ");
delay(1000);
oled.setCursor(0,0); //Menampilkan text di posisi kolom ke 0 baris ke 0
oled.println ("Heart Rate: " + String(heartrate));
if(IP==1){
oled.setCursor(0,2); //Menampilkan text di posisi kolom ke 0 baris ke 2
oled.println ("Status Gerakan: " + String(IP) + " ");
oled.setCursor(0,3); //Menampilkan text di posisi kolom ke 0 baris ke 3
oled.println ("Sapi Bergerak ");
}
else{
oled.setCursor(0,2); //Menampilkan text di posisi kolom ke 0 baris ke 2
oled.println ("Status Gerakan: " + String(IP) + " ");
oled.setCursor(0,3); //Menampilkan text di posisi kolom ke 0 baris ke 3
oled.println ("Sapi Diam ");
}
}
void sendDataToThingsBoard(float temperature, float temp, float humi, float heartrate, float IP) {
WiFiClient client;
HTTPClient http;
// URL untuk mengirim data ke ThingsBoard
String url = "http://" + String(THINGSBOARD_SERVER) + "/api/v1/" + String(THINGSBOARD_TOKEN) + "/telemetry";
// String payload = "{\"temperature\":" + String(temperature) + "}";
// Buat payload JSON untuk dikirim ke ThingsBoard
String payload = "{";
payload += "\"BodyTemperature\":";
payload += String(temperature);
payload += ",\"TemperatureUdara \":";
payload += String(temp);
payload += ",\"Humidity\":";
payload += String(humi);
payload += ",\"HeartRate\":";
payload += String(heartrate);
payload += ",\"Motion\":";
payload += String(IP);
payload += "}";
// Kirim data ke ThingsBoard
http.begin(client, url);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(payload);
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error sending data to ThingsBoard. HTTP Response code: ");
Serial.println(httpResponseCode);
}
http.end();
}