Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <WiFiEspClient.h>
- #include <WiFiEsp.h>
- #include <WiFiEspUdp.h>
- #include <DHT.h> // DHT Library
- #include "Adafruit_MQTT.h"
- #include "Adafruit_MQTT_Client.h"
- // Emulate Serial1 on pins 6/7 if not present
- #ifndef HAVE_HWSERIAL1
- #include "SoftwareSerial.h"
- SoftwareSerial Serial1(6, 7); // RX, TX
- #endif
- /************ WIFI ******************/
- char ssid[] = "PinterDSL2"; // your network SSID (name)
- char pass[] = "petarjosip"; // your network password
- int status = WL_IDLE_STATUS; // the Wifi radio's status
- /************ MQTT ******************/
- #define AIO_SERVER "192.168.0.100"
- #define AIO_SERVERPORT 1883 // use 8883 for SSL
- /************ ESP ******************/
- WiFiEspClient espClient;
- Adafruit_MQTT_Client mqtt(&espClient, AIO_SERVER, AIO_SERVERPORT);
- /************ DHT & pin settings ******************/
- #define DHTPIN 2 // what digital pin we're connected to
- #define DHTTYPE DHT22 // DHT 22
- #define LDR_PIN 1 // PIN LDR senzora
- #define soilm_pin 0 //PIN Senzora vla?nosti tla
- #define LAMP 3
- #define PUMP 4
- #define HEATER 9
- #define FAN 10
- DHT dht(DHTPIN, DHTTYPE);
- /****************************** Feeds ***************************************/
- Adafruit_MQTT_Subscribe humslider = Adafruit_MQTT_Subscribe(&mqtt, "humslider", MQTT_QOS_1);
- Adafruit_MQTT_Subscribe tempslider = Adafruit_MQTT_Subscribe(&mqtt, "tempslider", MQTT_QOS_1 );
- Adafruit_MQTT_Subscribe soilslider = Adafruit_MQTT_Subscribe(&mqtt, "soilslider",MQTT_QOS_1 );
- Adafruit_MQTT_Subscribe svijetslider = Adafruit_MQTT_Subscribe(&mqtt, "svijetslider" ,MQTT_QOS_1 );
- Adafruit_MQTT_Subscribe gumb = Adafruit_MQTT_Subscribe(&mqtt, "gumb" ,MQTT_QOS_1 );
- Adafruit_MQTT_Publish hum = Adafruit_MQTT_Publish(&mqtt, "hum");
- Adafruit_MQTT_Publish tem = Adafruit_MQTT_Publish(&mqtt, "temp");
- Adafruit_MQTT_Publish ldr = Adafruit_MQTT_Publish(&mqtt, "light");
- Adafruit_MQTT_Publish soilm = Adafruit_MQTT_Publish(&mqtt, "soilm");
- Adafruit_MQTT_Publish prom = Adafruit_MQTT_Publish(&mqtt, "promjena");
- /****************************** Setup***************************************/
- float zad_temp = 18;
- int mrak= 40;
- int suho_tlo = 30;
- int zad_vla = 60;
- long sampleTimingSeconds = 60; // ==> ******** Define Sample time in seconds to read sensores *********
- long startTiming = 0;
- long elapsedTime = 0;
- //long const timePumpOn = 100;
- float l ;
- float soilMoist;
- float h;
- float t;
- int Auto = 1;
- void setup()
- {
- pinMode(LAMP, OUTPUT);
- pinMode(PUMP, OUTPUT);
- pinMode(HEATER,OUTPUT);
- pinMode(FAN,OUTPUT);
- Serial.begin(115200); //Serial monitor za debugiranje
- Serial1.begin(9600); //Inicjializacija serijske komunikacije ESP modula
- WiFi.init(&Serial1); // Inicijalizacija ESP modula
- digitalWrite(LAMP,HIGH);
- dht.begin();
- connectWiFi();
- MQTTsubscribe();
- mqtt.will("promjena","prekinuto");
- MQTT_connect();
- readSensors();
- startTiming = millis();
- }
- /****************************** WiFi&MQtt ***************************************/
- void connectWiFi()
- {
- // Provjera ako je prisutian WIFI modul
- if (WiFi.status() == WL_NO_SHIELD) {
- //Serial.println("WiFi modul nije prisutan");
- while (true);
- }
- // Pokušaj spajanja na WIFi
- while ( status != WL_CONNECTED) {
- //Serial.print("Attempting to connect to WPA SSID: ");
- // Serial.println(ssid);
- // Spajanje na WPA/WPA2 network
- status = WiFi.begin(ssid, pass);
- }
- //Serial.println("Spojeni se na mrežu:");
- // Serial.println(WiFi.localIP());
- }
- void MQTTsubscribe()
- {
- // Setup MQTT subscription for time feed
- mqtt.subscribe(&tempslider);
- mqtt.subscribe(&humslider);
- mqtt.subscribe(&soilslider);
- mqtt.subscribe(&svijetslider);
- mqtt.subscribe(&gumb);
- }
- /****************************** loop ***************************************/
- void loop()
- {
- elapsedTime = millis()-startTiming;
- //long reverseElapsedTimeSeconds = round (sampleTimingSeconds - elapsedTime/1000);
- MQTT_connect();
- sub();
- if (elapsedTime > (sampleTimingSeconds*1000))
- {
- readSensors();
- autoControlPlantation();
- startTiming = millis();
- analogWrite(FAN,125);
- }
- //Serial.println(reverseElapsedTimeSeconds);
- if(! mqtt.ping()) {
- mqtt.disconnect();
- }
- if( status != WL_CONNECTED) {
- Serial.print("Attempting to connect to WPA SSID: ");
- Serial.println(ssid);
- // Connect to WPA/WPA2 network
- status = WiFi.begin(ssid, pass);
- }
- }
- /****************************** MQTT spajanje ***************************************/
- void MQTT_connect() {
- int8_t ret;
- // Stop if already connected.
- if (mqtt.connected()) {
- return;
- }
- //Serial.print("Connecting to MQTT... ");
- uint8_t retries = 3;
- while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
- // Serial.println(mqtt.connectErrorString(ret));
- // Serial.println("Retrying MQTT connection in 5 seconds...");
- mqtt.disconnect();
- delay(5000); // wait 5 seconds
- retries--;
- if (retries == 0) {
- // basically die and wait for WDT to reset me
- while (1);
- }
- }
- Serial.println("MQTT Connected!");
- prom.publish("Spojeno");
- }
- /****************************** Senzori ***************************************/
- int getLumen(int anaPin)
- {
- int anaValue = 0;
- for(int i = 0; i < 10; i++) // read sensor 10X ang get the average
- {
- anaValue += analogRead(anaPin);
- delay(50);
- }
- anaValue = anaValue/10; //Light under 300; Dark over 800
- anaValue = map(anaValue, 1023, 0, 0, 100); //LDRDark:0 ==> light 100%
- return anaValue;
- }
- int getSoilMoist(int anaPin)
- {
- int anaValue2 = 0;
- anaValue2 = analogRead(anaPin);
- anaValue2 = map(anaValue2, 1000, 300, 0, 100); //LDRDark:0 ==> light 100%
- return anaValue2;
- }
- void readSensors(void)
- {
- t = dht.readTemperature(); //Read temperature and humidity values from DHT sensor:
- h = dht.readHumidity();
- l = getLumen(LDR_PIN);
- soilMoist = getSoilMoist(soilm_pin);
- //if (isnan(h) || isnan(t)) {
- // Serial.println("Failed to read from DHT sensor!");
- tem.publish(t);
- hum.publish(h);
- ldr.publish(l);
- soilm.publish(soilMoist);
- /*}
- Serial.println(l);
- Serial.println(soilMoist);
- */
- }
- void sub(){
- Adafruit_MQTT_Subscribe *subscription;
- while ((subscription = mqtt.readSubscription(5000))) {
- // check if its the slider feed
- if (subscription == &tempslider) {
- // Serial.print(F("ZadanaTemp: "));
- // Serial.println((char *)tempslider.lastread);
- prom.publish("Vrijednost promijenjena");
- zad_temp= atoi((char *)tempslider.lastread); // convert to a number
- }
- if (subscription == &humslider) {
- // Serial.print(F("ZadanaVlažnost: "));
- //Serial.println((char *)humslider.lastread);
- prom.publish("Vrijednost promijenjena");
- zad_vla = atoi((char *)humslider.lastread); // convert to a number
- }
- if (subscription == &soilslider) {
- // Serial.print(F("ZadanaVlažnostTla: "));
- // Serial.println((char *)soilslider.lastread);
- prom.publish("Vrijednost promijenjena");
- suho_tlo = atoi((char *)soilslider.lastread);
- // convert to a number
- }
- if (subscription == &svijetslider) {
- // Serial.print(F("ZadanaSvijetlost: "));
- //Serial.println((char *)svijetslider.lastread);
- prom.publish("Vrijednost promijenjena");
- mrak = atoi((char *)svijetslider.lastread); // convert to a number
- }
- if (subscription == &gumb) {
- if (strcmp((char *)gumb.lastread, "ONA") == 0) {
- Auto = 1;
- prom.publish("Auto ON");
- }
- if (strcmp((char *)gumb.lastread, "OFFA") == 0) {
- Auto = 0;
- prom.publish("AUTO OFF");
- }
- if (strcmp((char *)gumb.lastread, "ONN") == 0) {
- digitalWrite(PUMP, LOW);
- prom.publish("PUMP ON");
- }
- if (strcmp((char *)gumb.lastread, "OFFN") == 0) {
- digitalWrite(PUMP, HIGH);
- prom.publish("PUMP OFF");
- }
- if (strcmp((char *)gumb.lastread, "ONS") == 0) {
- digitalWrite(LAMP, LOW);
- prom.publish("LAMP ON");
- }
- if (strcmp((char *)gumb.lastread, "OFFS") == 0) {
- digitalWrite(LAMP, HIGH);
- prom.publish("LED OFF");
- }
- if (strcmp((char *)gumb.lastread, "ONG") == 0) {
- digitalWrite(HEATER, HIGH);
- analogWrite(FAN,64);
- prom.publish("HEAT ON");
- }
- if (strcmp((char *)gumb.lastread, "OFFG") == 0) {
- digitalWrite(HEATER, LOW);
- analogWrite(FAN,0);
- prom.publish("HEAT OFF");
- }
- }
- }
- }
- void heaterfan()
- {
- if( t < zad_temp - 3 )
- {digitalWrite(HEATER,HIGH);
- analogWrite(FAN,255);
- }
- if( t < zad_temp - 2 )
- {digitalWrite(HEATER,HIGH);
- analogWrite(FAN,127);
- delay(10);
- }
- if( t < zad_temp - 0.6 )
- {digitalWrite(HEATER,HIGH);
- analogWrite(FAN,64);
- delay(10);
- }
- if( t > zad_temp +0.6 )
- {digitalWrite(HEATER,LOW);
- analogWrite(FAN,64);
- delay(10);
- }
- if( t > zad_temp +2 )
- {digitalWrite(HEATER,LOW);
- analogWrite(FAN,125);
- delay(10);
- }
- if( t > zad_temp +3 )
- {
- digitalWrite(HEATER,LOW);
- delay(10);
- analogWrite(FAN,255);
- }
- }
- void autoControlPlantation()
- {
- if(Auto == 1){
- if(l < mrak)
- {digitalWrite(LAMP, LOW);
- prom.publish("LED ON");
- }
- else {digitalWrite(LAMP, HIGH);
- prom.publish("LED OFF");
- }
- if (soilMoist < suho_tlo && l < mrak)
- {digitalWrite(PUMP, LOW);
- prom.publish("PUMP ON");
- }
- else{
- digitalWrite(PUMP, HIGH);
- prom.publish("PUMP OFF"); }
- delay(10);
- if (t < zad_temp-0.5 || t > zad_temp+0.5){void heaterfan();}
- else{digitalWrite(HEATER, LOW);
- digitalWrite(FAN, LOW);}
- delay(10);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement