From 3a87a41d72179a98c04a9db8dcc87d0067c96887 Mon Sep 17 00:00:00 2001 From: schronka Date: Fri, 27 Sep 2024 22:08:30 +0200 Subject: [PATCH] Dateien nach "/" hochladen --- arduino_secrets.h | 47 ++++++++++++++++++++ buttons.h | 110 ++++++++++++++++++++++++++++++++++++++++++++++ display.h | 79 +++++++++++++++++++++++++++++++++ humidity.h | 31 +++++++++++++ pins.h | 23 ++++++++++ 5 files changed, 290 insertions(+) create mode 100644 arduino_secrets.h create mode 100644 buttons.h create mode 100644 display.h create mode 100644 humidity.h create mode 100644 pins.h diff --git a/arduino_secrets.h b/arduino_secrets.h new file mode 100644 index 0000000..19a7d16 --- /dev/null +++ b/arduino_secrets.h @@ -0,0 +1,47 @@ +// WiFi als AccessPoint +#define SECRET_AP_SSID "Salatmaschine"; +#define SECRET_AP_PASSWD "87494659+1456265+48salaSchmine"; +// Salatmaschine ist Client in folgendem WiFi +#define SECRET_SSID "HuiBu"; +#define SECRET_PASSWD "dandy jackknife importer affair boastful salami frenzy finite"; + + +const char* serverExt = "www.superschurkenhauptquartier.de"; // Server URL +const char* pathExt = "/salatmaschine/receiver.php"; // Server URL + +// root certificate authority, to verify the server +// change it to your server root CA +// SHA1 fingerprint is broken now! + +const char* shq_root_ca = + "-----BEGIN CERTIFICATE-----\n" + "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\n" + "-----END CERTIFICATE-----\n"; diff --git a/buttons.h b/buttons.h new file mode 100644 index 0000000..653c30d --- /dev/null +++ b/buttons.h @@ -0,0 +1,110 @@ +unsigned long lastDelay = millis(); +int delayIt = 300; +// Eingabe + +// Auxiliar variables to store the current output state +String stateButtonsWaterMore = "off"; +String stateButtonsWaterLess = "off"; +String stateButtonsWaterNow = "off"; +String stateButtonsIntMore = "off"; +String stateButtonsIntLess = "off"; +String stateButtonsResetAll = "off"; + +void setupButtons() { + + // Tastatur + pinMode(tasterWaterMore, INPUT_PULLUP); + pinMode(tasterWaterLess, INPUT_PULLUP); + pinMode(tasterWaterNow, INPUT_PULLUP); + pinMode(tasterIntMore, INPUT_PULLUP); + pinMode(tasterIntLess, INPUT_PULLUP); + pinMode(tasterReset, INPUT_PULLUP); +} + + + +// Push Hardware-Buttons +void buttonsWaterLess() { + // Bewässerungsdauer reduzieren + if (millis() >= lastDelay + delayIt) { + if (max_water - 1000 > 0) { + max_water = max_water - 1000; + } + Serial.println("MaxWater -1"); + + lastDelay = millis(); + } +} +void buttonsWaterMore() { + // Bewässerungsdauer verlängern + if (millis() >= lastDelay + delayIt) { + max_water = max_water + 1000; + Serial.println("MaxWater +1"); + + lastDelay = millis(); + } +} +void buttonsIntLess() { + // Bewässerungsintervall verkürzen + if (millis() >= lastDelay + delayIt) { + if (duration_interval - 60000 > 0) { + duration_interval = duration_interval - 60000; + } + Serial.println("IntWater -60"); + + lastDelay = millis(); + } +} +void buttonsIntMore() { + // Bewässerungsintervall erhöhen + if (millis() >= lastDelay + delayIt) { + duration_interval = duration_interval + 60000; + Serial.println("IntWater +60"); + + lastDelay = millis(); + } +} +void buttonsWaterNow() { + // sofort wässern + if (millis() >= lastDelay + delayIt) { + last_water = millis() - duration_interval; + Serial.print("NOW ------------------- "); + Serial.print(last_water); + + lastDelay = millis(); + } +} +void buttonsResetAll() { + // Werte zuruecksetzen + if (millis() >= lastDelay + delayIt) { + max_water = std_max_water; + duration_interval = std_duration_interval; + last_water = millis(); + Serial.println("RESET"); + + lastDelay = millis(); + } +} + +void loopButtons() { + + // Push Hardware-Buttons + if (digitalRead(tasterWaterLess) == LOW) { + buttonsWaterLess(); + } + if (digitalRead(tasterWaterMore) == LOW) { + buttonsWaterMore(); + } + if (digitalRead(tasterIntLess) == LOW) { + buttonsIntLess(); + } + if (digitalRead(tasterIntMore) == LOW) { + buttonsIntMore(); + } + if (digitalRead(tasterWaterNow) == LOW) { + buttonsWaterNow(); + } + if (digitalRead(tasterReset) == LOW) { + buttonsResetAll(); + } +} \ No newline at end of file diff --git a/display.h b/display.h new file mode 100644 index 0000000..ec4f0d4 --- /dev/null +++ b/display.h @@ -0,0 +1,79 @@ +//U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /*reset=*/ U8X8_PIN_NONE); +//Anzeige + + +//Anzeige +#include + +#ifdef U8X8_HAVE_HW_SPI +#include +#endif +#ifdef U8X8_HAVE_HW_I2C +#include +#endif +U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE); + + +void setupDisplay() { + // Display + u8g2.begin(); +} +void loopSalatdisplay() { + + + float temp0 = tempSensor[0]; + float temp1 = tempSensor[1]; + + // DISPLAY + u8g2.clearBuffer(); // clear the internal memory + u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font + + + u8g2.setCursor(0, 10); + if (accessPointMode == true) { + u8g2.print(local_ip); + } else { + u8g2.print(WiFi.localIP()); + } + u8g2.setCursor(85, 10); + u8g2.print(trigger); + + + u8g2.setCursor(0, 20); + u8g2.print("Int wet"); + u8g2.setCursor(55, 20); + u8g2.print(duration_interval / 1000); + u8g2.setCursor(85, 20); + u8g2.print(dry_time_left / 1000); + + u8g2.setCursor(0, 30); + u8g2.print("H2O"); + u8g2.setCursor(55, 30); + u8g2.print(max_water / 1000); + u8g2.setCursor(85, 30); + u8g2.print(wet_time_left / 1000); + + u8g2.setCursor(0, 40); + u8g2.print("Int dry"); + u8g2.setCursor(55, 40); + u8g2.print("--"); + u8g2.setCursor(85, 40); + u8g2.print(dry_since / 1000); + + u8g2.setCursor(0, 50); + u8g2.print("Hum %"); + u8g2.setCursor(55, 50); + u8g2.print(minMoisture); + u8g2.setCursor(85, 50); + //u8g2.print( WiFi.localIP()); + u8g2.print(sensor_moisture_value); + + + u8g2.setCursor(0, 60); + u8g2.print("Temp "); + //u8g2.setCursor(55, 60); + //u8g2.print(temp1); + u8g2.setCursor(85, 60); + u8g2.print(temp0); + u8g2.sendBuffer(); // transfer internal memory to the display +} \ No newline at end of file diff --git a/humidity.h b/humidity.h new file mode 100644 index 0000000..90bdd88 --- /dev/null +++ b/humidity.h @@ -0,0 +1,31 @@ + +int sensorPin = sensorMoisturePin; // siehe pins.h +int sensorValue; + +int dryAnalogValue = 4095; + +int wetAnalogValue = 1023; +int DryValuePercent = 0; +int WetValuepercent = 100; + +int moistureValuePercent; + +int sensor_moisture_value; +void setupHumidity() { + Serial.print("Setting up Humidity"); +} +void getHumidity() { + + if (sensorValue = analogRead(sensorPin)) { + Serial.print("Analog moisture Value : "); + Serial.println(sensorValue); + moistureValuePercent = map(sensorValue, dryAnalogValue, wetAnalogValue, DryValuePercent, WetValuepercent); + Serial.print("moisture percent: "); + Serial.print(moistureValuePercent); + Serial.println("%"); + if (moistureValuePercent < DryValuePercent) { + Serial.println("plant is dry !! "); + } + sensor_moisture_value = moistureValuePercent; + } +} \ No newline at end of file diff --git a/pins.h b/pins.h new file mode 100644 index 0000000..9e9e56c --- /dev/null +++ b/pins.h @@ -0,0 +1,23 @@ +// Buttons +int tasterWaterMore = 27; +int tasterWaterLess = 14; +int tasterWaterNow = 32; +int tasterIntMore = 33; +int tasterIntLess = 12; +int tasterReset = 26; + +// Humidity +int sensorMoisturePin = 36; + +// Temperature +#define ONE_WIRE_BUS 23 + +// Betriebsanzeige +int LED = 25; + +// Relais +// digitale Ausgaenge für Relaissteuerung +//int relais = 18; +int relais = 19; +// Noch nicht benutzt, aber schon verkabelt, 09.06.2023 kaputt!! +// 25.09.24 neues Relais eingebaut, zuerst Nr. 1 = Pin 18 benutzt