=====Arduino===== The Arduino IDE you can get here: https://www.arduino.cc/en/Main/Software ====esp8266==== Setup esp8266: https://dzone.com/articles/programming-the-esp8266-with-the-arduino-ide-in-3 ====esp32==== https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/esp32-jetzt-mit-boardverwalter-installieren https://dl.espressif.com/dl/package_esp32_index.json ==== Irrigation System ==== Enhanced code to control a waterpump, a display and an "Capacitive Soil Moisture Sensor". The display shows a diagramm in: *Sensor values *dry or wet *% value //Irrigation //version 1.2 //by tmade #include #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Adafruit_SSD1306 display(-1); //variables int SLEEP = 1; const int DRY = 694; const int WET = 344; int sensorValue = 0; int rectangle = 0; const int X = 10; const int Y = 1; const int WIDTH = 35; const int HEIGHT = 63; void setup() { // put your setup code here, to run once: Serial.begin(9600); //to debug set to 115200 !! //Serial.begin(115200); digitalWrite(0, 1); pinMode (2, OUTPUT); digitalWrite(2, 1); // initialize with the I2C addr 0x3C display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Clear the buffer. display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); //Define the position where the text starts using the setCursor(x,y) method display.setCursor(0,20); display.println("Startup.."); display.display(); delay(4000); } void loop() { // put your main code here, to run repeatedly: display.clearDisplay(); int sensorValue=analogRead(A0); int val = analogRead(0); val = map(val, DRY, WET, 0, 100); delay(200); int rectangle = analogRead(0); rectangle = map(rectangle, DRY, WET, 1, 63); delay(200); // debugging & examples /* Serial.print("rectanglevalue: "); Serial.println(rectangle); analogWrite(9, val); Serial.print("Dry: "); Serial.println(WET); Serial.print("Wet: "); Serial.println(WET); delay(200); */ SLEEP = SLEEP-1; if ((sensorValue > 570) && (SLEEP < 2)) { display.clearDisplay(); // drawRect(x, y, width, height, color) display.drawRoundRect(X, Y, WIDTH, HEIGHT, 2, WHITE); display.fillRoundRect(X, Y, WIDTH, rectangle, 2, WHITE); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(60,5); display.println("dry!"); display.setCursor(60,25); display.setTextSize(2); display.println(sensorValue); display.setCursor(60,45); display.setTextSize(2); display.print(val); display.println(" %"); // write the buffer to the display display.display(); delay(200); Serial.print("sensorValue: "); Serial.println(sensorValue); Serial.println("Pump On"); // 0 = LOW = ON digitalWrite(2,0); //set pump duration per loop in milliseconds delay(5000); // 1 = HIGH = OFF digitalWrite(2,1); Serial.println("Pump Off"); delay(200); //set wait until next check SLEEP = 60; } else if (sensorValue < 571) { Serial.print("sensorValue: "); Serial.println(sensorValue); Serial.print("humidity: "); Serial.print(val); Serial.println(" %"); Serial.println("Sensor is wet"); delay(1000); // Display display.clearDisplay(); // drawRect(x, y, width, height, color) display.drawRoundRect(X, Y, WIDTH, HEIGHT, 2, WHITE); display.fillRoundRect(X, Y, WIDTH, rectangle, 2, WHITE); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(60,5); display.println("wet!"); display.setCursor(60,25); display.setTextSize(2); display.println(sensorValue); display.setCursor(60,45); display.setTextSize(2); display.print(val); display.println(" %"); // write the buffer to the display display.display(); delay(1000); } else if (SLEEP > 2) { display.clearDisplay(); // drawRect(x, y, width, height, color) display.drawRoundRect(X, Y, WIDTH, HEIGHT, 2, WHITE); display.fillRoundRect(X, Y, WIDTH, rectangle, 2, WHITE); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(60,5); display.println("dry!"); display.setCursor(60,25); display.setTextSize(2); display.println(sensorValue); display.setCursor(60,45); display.setTextSize(2); display.print(val); display.println(" %"); // write the buffer to the display display.display(); delay(200); Serial.print("sensorValue: "); Serial.println(sensorValue); Serial.print("humidity: "); Serial.print(val); Serial.println(" %"); Serial.println("Sensor is dry"); Serial.print("wait another: "); Serial.print(SLEEP); Serial.println(" seconds"); delay(200); } } ==== Alles & nichts ==== Code to control a waterpump, a display and an "Capacitive Soil Moisture Sensor". Many thanks to "Alles & nichts" for sharing this code! :-) Have also a look on: https://www.youtube.com/watch?v=sRStuXpqiQ4 /* VCC = 5 Volt cap sens VCC = 3,3 Volt Relais -------------------------------------------------------------*/ #include #include #include #include Adafruit_SSD1306 display(-1); /* const unsigned char Smiley_lachen [] PROGMEM = { }; const unsigned char Smiley_middle [] PROGMEM = { }; const unsigned char Smiley_traurig [] PROGMEM = { };*/ /*const int waterValue= 400; const int moistValue= 600; const int dryValue = 850; const int pumpON = 660;*/ int val = 1; void setup() { // put your setup code here, to run once: Serial.begin(9600); digitalWrite(0, 1); pinMode (2, OUTPUT); digitalWrite(2, 1); // initialize with the I2C addr 0x3C display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Clear the buffer. display.clearDisplay(); //display.invertDisplay(1); // symbol_leer display.drawRoundRect(0, 14, 30, 50, 5, WHITE); display.display(); delay(2000); // symbol_viertelvoll display.fillRoundRect(0, 14, 30, 12.5, 2, WHITE); display.display(); delay(2000); // symbol_halbvoll display.fillRoundRect(0, 14, 30, 25, 2, WHITE); display.display(); delay(2000); // symbol_dreiviertelvoll display.fillRoundRect(0, 14, 30, 38, 2, WHITE); display.display(); delay(2000); // symbol_voll display.fillRoundRect(0, 14, 30, 50, 2, WHITE); display.display(); delay(2000); } void loop() { // put your main code here, to run repeatedly: display.clearDisplay(); int sensorValue=analogRead(A0); Serial.println(sensorValue); delay(200); //display.println(sensorValue); if (sensorValue > 570) { //val=!val; display.drawRoundRect(0, 14, 30, 50, 5, WHITE); display.display(); digitalWrite(2,0); // 0 bzw. LOW = AN } else if ((sensorValue < 550) && (sensorValue > 500)) { display.fillRoundRect(0, 14, 30, 12.5, 2, WHITE); display.display(); } else if ((sensorValue < 500) && (sensorValue > 450)) { display.fillRoundRect(0, 14, 30, 38, 2, WHITE); display.display(); } else if (sensorValue < 450) { display.fillRoundRect(0, 14, 30, 50, 2, WHITE); display.display(); digitalWrite(2,1); // 1 bzw. HIGH = AUS } display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(50,20); display.println(sensorValue); display.display(); delay(200); } ==== Another example ==== http://hyperdramatik.net/mediawiki/index.php?title=Bew%C3%A4sserungsanlage_mit_Arduino_Uno_und_DIY-Feuchtigkeitssensor void setup() { Serial.begin(9600); pinMode(A0, OUTPUT); //Default pinMode einstellung auf INPUT/OUTPUT digitalWrite(A0, HIGH); } void loop() { int sensor = analogRead(A1); Serial.println(sensor); //SENSOR FEUCHT - 500 //SENSOR TROCKEN - 0 delay(1000); if (sensor < 430 ) { //Relais einschalten digitalWrite(A0, LOW); Serial.println("Pumpe AN"); //2 Sekunden anlassen delay(2000); //Relais ausschalten digitalWrite(A0, HIGH); Serial.println("Pumpe Aus"); //10 Sekunden warten delay(10000); } } ====Display==== https://randomnerdtutorials.com/guide-for-oled-display-with-arduino/ To check HEX-adress of your display - which has to be referenced - please run this sketch: /********* Rui Santos Complete project details at https://randomnerdtutorials.com *********/ #include void setup() { Wire.begin(); Serial.begin(115200); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) { Serial.print("0"); } Serial.println(address,HEX); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) { Serial.print("0"); } Serial.println(address,HEX); } } if (nDevices == 0) { Serial.println("No I2C devices found\n"); } else { Serial.println("done\n"); } delay(200); } **Note:** You have to change baud rate in serial monitor to "115200" to get the result!! ====Links==== https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/pflanzenwaechter-fuer-die-fensterbank-teil-3-erweiterung-der-bodenfeuchtesensoren-auf-maximal-sechs-stueck https://gardenbot.org/parts/ https://create.arduino.cc/projecthub/biswa11/garduino-bba809