#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
// Define pins for the sensors
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define ONE_WIRE_BUS 5 // Pin where the DS18B20 is connected
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// Initialize BMP280 sensor
Adafruit_BMP280 bmp; // I2C
// Initialize OneWire instance for DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
// Start DHT sensor
dht.begin();
// Start DS18B20 sensor
sensors.begin();
// Start BMP280 sensor
if (!bmp.begin(0x76)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring or try a different address!"));
while (1);
}
// Print sensor initialization message
Serial.println(F("DHT22, DS18B20, and BMP280 sensors initialized."));
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Read temperature from DS18B20
sensors.requestTemperatures();
float tempC_DS18B20 = sensors.getTempCByIndex(0);
// Read temperature, pressure, and altitude from BMP280
float tempC_BMP280 = bmp.readTemperature();
float pressure = bmp.readPressure();
float altitude = bmp.readAltitude(1013.25); // Adjust the sea level pressure as necessary
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.print(F("°F"));
Serial.print(F(" DS18B20 Temperature: "));
Serial.print(tempC_DS18B20);
Serial.print(F("°C"));
Serial.print(F(" BMP280 Temperature: "));
Serial.print(tempC_BMP280);
Serial.print(F("°C Pressure: "));
Serial.print(pressure);
Serial.print(F("Pa Altitude: "));
Serial.print(altitude);
Serial.println(F("m"));
// Wait a few seconds between measurements.
delay(2000);
}