Vin <--------------6V or 12V
Simplified Code(no Wifi or OLED):
// Simplified Irrigation Controller Program
#define pumpPin 6 //Output pin to turn on pump with transistor
int moisture;
int threshold= 300;
void setup() {
pinMode(pumpPin, OUTPUT);
moisture=0;
Serial.begin(9600);
}
void loop() {
moisture = analogRead(A0);
Serial.println(moisture);
if (moisture < threshold){ // if water needed, pump runs for 10 seconds, then shuts off for 10 seconds.
digitalWrite(pumpPin, HIGH);
delay (10000);
digitalWrite(pumpPin, LOW);
delay(10000);
} else {
digitalWrite(pumpPin, LOW);
}
}
Code Example-Irrigation Controller
#include "thingProperties.h"
#include <Wire.h>. //code for OLED display
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#include <Adafruit_Sensor.h>
void setup() {
pinMode(LED, OUTPUT);
pinMode(6, OUTPUT);
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
}
void loop() {
ArduinoCloud.update();
moisture = analogRead(A0);
Serial.println(moisture);
delay(2000);
// OLED Display:
display.clearDisplay();
delay(2000);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.println(moisture);
display.display();
delay(500);
}
void onPumpChange() {
// Do something
if (pump) {
digitalWrite(LED, HIGH);
digitalWrite(6, HIGH);
}
else {
digitalWrite(LED, LOW);
digitalWrite(6, LOW);
}
}
// Code generated by Arduino IoT Cloud, DO NOT EDIT.
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
const char SSID[] = SECRET_SSID; // Network SSID (name)
const char PASS[] = SECRET_PASS; // Network password (use for WPA, or use as key for WEP)
void onPumpChange();
int moisture;
bool pump;
void initProperties(){
ArduinoCloud.addProperty(moisture, READ, ON_CHANGE, NULL);
ArduinoCloud.addProperty(pump, READWRITE, ON_CHANGE, onPumpChange);
}
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
esp32 code:
#include "thingProperties.h"
#include "DHT.h"
#define DHTPIN 32 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
delay(1500);
pinMode(33, OUTPUT); // control pin for pump
Serial.println(F("DHTxx test!"));
dht.begin();
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
moisture = analogRead(34);
humidity = dht.readHumidity();
temperature = dht.readTemperature();
Serial.println(moisture);
Serial.println(humidity);
Serial.println(temperature);
delay(2000);
}
void onNewpumpPinChange() {
if (newpumpPin) {
digitalWrite(33, HIGH);
}
else {
digitalWrite(33, LOW);
}
}