#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Pin Definitions
#define DHTPIN 15 // DHT22 data pin connected to GPIO 15
#define DHTTYPE DHT22 // DHT 22 (AM2302)
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// Initialize ADXL345 sensor
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
// Initialize LCD Display (I2C address 0x27, 16 columns, 2 rows)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
// Initialize DHT22 sensor
dht.begin();
// Initialize ADXL345
if (!accel.begin()) {
Serial.println("No ADXL345 found!");
while (1);
}
accel.setRange(ADXL345_RANGE_2_G); // Set range for ADXL345
// Initialize LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
delay(2000);
}
void loop() {
// Read humidity and temperature from DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check if readings failed
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Simulate soil moisture (for example purposes, fixed at 40%)
float soilMoisture = 40.0;
// Read ADXL345 values
sensors_event_t event;
accel.getEvent(&event);
float x = event.acceleration.x;
float y = event.acceleration.y;
float z = event.acceleration.z;
// Display on Serial Monitor
Serial.print("Moisture: "); Serial.print(soilMoisture); Serial.println(" %");
Serial.print("ADXL X: "); Serial.print(x); Serial.print(" Y: "); Serial.print(y); Serial.print(" Z: "); Serial.println(z);
// Display on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Moisture: ");
lcd.print(soilMoisture);
lcd.print(" %");
lcd.setCursor(0, 1);
lcd.print("ADXL: ");
lcd.print(x, 1); // Display only x-axis value
delay(2000); // Update every 2 seconds
}