#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <WiFi.h>
#include <HTTPClient.h>
#include <PubSubClient.h>
#include <DHT.h>
#define Wifi_ssid "Wokwi-GUEST"
#define Wifipass ""
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define THINGSBOARD_TOKEN "hy4fD4nZXNRWkyFSL9xK"
#define DHT22PIN 13
#define PULSE_PIN 35
DHT dht(DHT22PIN, DHT22);
const int LM35_pin = 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(LM35_pin, 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_ssid, Wifipass);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.println(" Starting!");
delay(2000);
}
void loop() {
int sensorValue = analogRead(LM35_pin);
float temperature = (sensorValue / 4095.0) * 330.0;
float humidity = dht.readHumidity();
float temp = dht.readTemperature();
int16_t pulse = analogRead(PULSE_PIN);
// Convert pulseValue to voltage
float voltage = pulse * (5 / 4095.0);
// calculate heartRate from volatge
int heart_rate = (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(humidity);
Serial.print(" %");
Serial.println("");
Serial.print("Heartbeat Pulse: ");
Serial.print(heart_rate);
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, humidity, heart_rate, IP);
oled.setCursor(0,0);
oled.println ("BTemp: " + String(temperature) + " C ");
oled.setCursor(0,2);
oled.println ("Temperature: " + String(temp) + " C ");
oled.setCursor(0,3);
oled.println ("Humidity: " + String(humidity) + " % ");
delay(1000);
oled.setCursor(0,0);
oled.println ("Heart Rate: " + String(heart_rate));
if(IP==1){
oled.setCursor(0,2);
oled.println ("Status Gerakan: " + String(IP) + " ");
oled.setCursor(0,3);
oled.println ("Sapi Bergerak ");
}
else{
oled.setCursor(0,2);
oled.println ("Status Gerakan: " + String(IP) + " ");
oled.setCursor(0,3);
oled.println ("Sapi Diam ");
}
}
void sendDataToThingsBoard(float temperature, float temp, float humidity, float heart_rate, 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 = "{";
payload += "\"BodyTemperature\":";
payload += String(temperature);
payload += ",\"TemperatureUdara \":";
payload += String(temp);
payload += ",\"Humidity\":";
payload += String(humidity);
payload += ",\"HeartRate\":";
payload += String(heart_rate);
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();
}