// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
#include "DHT.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_SSD1306.h"
#if defined(ESP8266)
#define WIRE Wire
#elif defined(ESP32)
#define WIRE Wire
#elif defined(ARDUINO_STM32_FEATHER)
#define WIRE Wire
#elif defined(TEENSYDUINO)
#define WIRE Wire
#elif defined(ARDUINO_FEATHER52832)
#define WIRE Wire
#elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040)
#define WIRE Wire1
#else
#define WIRE Wire
#endif
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &WIRE);
#define DHTPIN 7 // Digital pin connected to the DHT sensor
#define MOISTUREPIN A0
#define FANPIN 8
float h;
float t;
float f;
int moistureValue = 0;
String soilState = "";
String motorState = "";
int motorPin = 3;
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
pinMode(motorPin, OUTPUT);
pinMode(FANPIN, OUTPUT);
Serial.println(F("DHTxx test!"));
digitalWrite(FANPIN, LOW);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
dht.begin();
display.display();
delay(1000);
// Clear the buffer.
display.clearDisplay();
display.display();
}
void loop() {
moistureValue = analogRead(MOISTUREPIN);
Serial.println(moistureValue);
// 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();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
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;
}
// 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.println(F("°C "));
// text display tests
display.clearDisplay();
// display.display();
display.drawRect(0, 0, display.width(), display.height(), WHITE);
display.drawLine(64, 0, 64, 63, WHITE);
display.drawLine(0, 32, 64, 32, WHITE);
display.drawLine(64, 32, 128, 32, WHITE);
display.fillRect(2, 2, 61, 8, WHITE);//hu
display.fillRect(2, 34, 61, 8, WHITE);//moi
display.fillRect(66, 2, 60, 8, WHITE);
display.fillRect(66, 34, 60, 8, WHITE);
display.setTextSize(1);
display.setTextColor(SSD1306_BLACK);
display.setCursor(9, 2);
display.print("Humidity");
display.setCursor(83, 2);
display.print("Temp");
display.setCursor(9, 34);
display.print("Moisture");
display.setCursor(82, 34);
display.print("Motor");
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(20, 15);
display.print(h, 0);
display.setCursor(84, 15);
display.print(t, 0);
display.setCursor(16, 45);
display.print(soilState);
display.setCursor(82, 45);
display.print(motorState);
display.setTextSize(1);
display.setCursor(46, 15);
display.print("%");
display.setCursor(108, 15);
display.print((char)247);
display.print("C");
if (moistureValue < 512) {
digitalWrite(motorPin, LOW);
motorState = "OFF";
soilState = "WET";
digitalWrite(FANPIN, HIGH);
}
if (moistureValue > 512) {
digitalWrite(motorPin, HIGH);
motorState = "ON";
soilState = "DRY";
digitalWrite(FANPIN, HIGH);
}
if (t <= 40.0) {
digitalWrite(FANPIN, HIGH);
}
if (t > 40) {
digitalWrite(FANPIN, LOW);
}
// display.setCursor(108, 0);
// display.setCursor(108, 16);
// display.setCursor(115, 16);
// display.setTextSize(1);
// display.setTextColor(SSD1306_WHITE);
// display.setCursor(0, 2);
// display.print("Humidity:");
// display.setCursor(24, 18);
// display.print("Temp:");
// display.setCursor(0, 34);
// display.print("Moisture:");
// display.setCursor(18, 51);
// display.print("Motor:");
// display.setTextSize(2);
// display.setCursor(60, 1);
// display.print(h,1);
// display.setCursor(60, 16);
// display.print(t,1);
// display.setCursor(60, 32);
// display.print("Dry");
// display.setCursor(60, 50);
// display.print("ON");
// display.setTextSize(1);
// display.setCursor(108, 0);
// display.print("%");
// display.setCursor(108, 16);
// display.print((char)247);
// display.setCursor(115, 16);
// display.print("C");
display.display(); // actually display all of the above
// Wait a few seconds between measurements.
// delay(1000);
}