Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.71 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #include <WiFiEspClient.h>
  5. #include <WiFiEsp.h>
  6. #include <WiFiEspUdp.h>
  7. #include <DHT.h>               // DHT Library
  8. #include "Adafruit_MQTT.h"
  9. #include "Adafruit_MQTT_Client.h"
  10.  
  11. // Emulate Serial1 on pins 6/7 if not present
  12. #ifndef HAVE_HWSERIAL1
  13. #include "SoftwareSerial.h"
  14. SoftwareSerial Serial1(6, 7); // RX, TX
  15. #endif
  16.  
  17. /************ WIFI ******************/
  18.  
  19. char ssid[] = "PinterDSL2";            // your network SSID (name)
  20. char pass[] = "petarjosip";        // your network password
  21. int status = WL_IDLE_STATUS;     // the Wifi radio's status
  22.  
  23. /************ MQTT ******************/
  24.  
  25. #define AIO_SERVER      "192.168.0.100"
  26. #define AIO_SERVERPORT  1883                   // use 8883 for SSL
  27.  
  28. /************ ESP  ******************/
  29.  
  30.  
  31. WiFiEspClient espClient;
  32. Adafruit_MQTT_Client mqtt(&espClient, AIO_SERVER, AIO_SERVERPORT);
  33.  
  34.  
  35. /************ DHT & pin settings ******************/
  36.  
  37. #define DHTPIN 2     // what digital pin we're connected to
  38.  
  39. #define DHTTYPE DHT22   // DHT 22  
  40.  
  41. #define LDR_PIN 1 // PIN LDR senzora
  42. #define soilm_pin 0 //PIN Senzora vla?nosti tla
  43. #define LAMP 3
  44. #define PUMP 4
  45. #define HEATER 9
  46. #define FAN 10
  47. DHT dht(DHTPIN, DHTTYPE);
  48.  
  49. /****************************** Feeds ***************************************/
  50.  
  51. Adafruit_MQTT_Subscribe humslider = Adafruit_MQTT_Subscribe(&mqtt,  "humslider", MQTT_QOS_1);
  52.  
  53. Adafruit_MQTT_Subscribe tempslider = Adafruit_MQTT_Subscribe(&mqtt,  "tempslider", MQTT_QOS_1  );
  54.  
  55.  
  56. Adafruit_MQTT_Subscribe soilslider = Adafruit_MQTT_Subscribe(&mqtt,  "soilslider",MQTT_QOS_1 );
  57.  
  58. Adafruit_MQTT_Subscribe svijetslider = Adafruit_MQTT_Subscribe(&mqtt,  "svijetslider" ,MQTT_QOS_1 );
  59.  
  60. Adafruit_MQTT_Subscribe gumb = Adafruit_MQTT_Subscribe(&mqtt,  "gumb" ,MQTT_QOS_1 );
  61.  
  62.  
  63. Adafruit_MQTT_Publish hum = Adafruit_MQTT_Publish(&mqtt,  "hum");
  64.  
  65. Adafruit_MQTT_Publish tem = Adafruit_MQTT_Publish(&mqtt, "temp");
  66.  
  67. Adafruit_MQTT_Publish ldr = Adafruit_MQTT_Publish(&mqtt,  "light");
  68.  
  69. Adafruit_MQTT_Publish soilm = Adafruit_MQTT_Publish(&mqtt,  "soilm");
  70.  
  71. Adafruit_MQTT_Publish prom = Adafruit_MQTT_Publish(&mqtt,  "promjena");
  72.  
  73. /****************************** Setup***************************************/
  74.  
  75. float zad_temp = 18;
  76. int mrak= 40;
  77. int suho_tlo = 30;
  78. int zad_vla = 60;
  79.  
  80. long sampleTimingSeconds = 60; // ==> ******** Define Sample time in seconds to read sensores *********
  81. long startTiming = 0;
  82. long elapsedTime = 0;
  83. //long const timePumpOn = 100;
  84. float l ;
  85. float soilMoist;
  86. float h;
  87. float t;
  88. int Auto = 1;
  89.  
  90.  
  91. void setup()
  92. {
  93.   pinMode(LAMP, OUTPUT);
  94.   pinMode(PUMP, OUTPUT);
  95.   pinMode(HEATER,OUTPUT);
  96.   pinMode(FAN,OUTPUT);
  97.   Serial.begin(115200);  //Serial monitor za debugiranje
  98.   Serial1.begin(9600);  //Inicjializacija serijske komunikacije ESP modula
  99.   WiFi.init(&Serial1); // Inicijalizacija ESP modula
  100.  
  101.   digitalWrite(LAMP,HIGH);
  102.  
  103.   dht.begin();
  104.   connectWiFi();
  105.   MQTTsubscribe();
  106.   mqtt.will("promjena","prekinuto");
  107.   MQTT_connect();
  108.  
  109.   readSensors();
  110.   startTiming = millis();
  111.  
  112.  
  113.  
  114. }
  115.  
  116. /****************************** WiFi&MQtt ***************************************/
  117.  
  118. void connectWiFi()
  119. {
  120.   // Provjera ako je prisutian WIFI modul
  121.   if (WiFi.status() == WL_NO_SHIELD) {
  122.     //Serial.println("WiFi modul nije prisutan");
  123.     while (true);
  124.   }
  125.  
  126.   // Pokušaj spajanja na WIFi
  127.   while ( status != WL_CONNECTED) {
  128.     //Serial.print("Attempting to connect to WPA SSID: ");
  129.    // Serial.println(ssid);
  130.     // Spajanje na WPA/WPA2 network
  131.     status = WiFi.begin(ssid, pass);
  132.   }
  133.  
  134.   //Serial.println("Spojeni se na mrežu:");
  135.  
  136.  // Serial.println(WiFi.localIP());
  137. }
  138.  
  139.  
  140.  
  141. void MQTTsubscribe()
  142. {
  143. // Setup MQTT subscription for time feed
  144.   mqtt.subscribe(&tempslider);
  145.   mqtt.subscribe(&humslider);
  146.   mqtt.subscribe(&soilslider);
  147.   mqtt.subscribe(&svijetslider);
  148.   mqtt.subscribe(&gumb);
  149. }
  150.  
  151.  
  152. /****************************** loop ***************************************/
  153.  
  154.  
  155. void loop()
  156. {
  157.  
  158.  elapsedTime = millis()-startTiming;  
  159.  
  160.  //long reverseElapsedTimeSeconds = round (sampleTimingSeconds - elapsedTime/1000);
  161.  
  162.  MQTT_connect();
  163.  sub();
  164.  
  165.  if (elapsedTime > (sampleTimingSeconds*1000))
  166.   {
  167.     readSensors();
  168.     autoControlPlantation();
  169.     startTiming = millis();
  170.     analogWrite(FAN,125);
  171.   }
  172.    //Serial.println(reverseElapsedTimeSeconds);
  173.    
  174.  if(! mqtt.ping()) {
  175.     mqtt.disconnect();
  176.   }
  177. if( status != WL_CONNECTED) {
  178.     Serial.print("Attempting to connect to WPA SSID: ");
  179.     Serial.println(ssid);
  180.     // Connect to WPA/WPA2 network
  181.     status = WiFi.begin(ssid, pass);
  182.   }
  183. }
  184.  
  185. /****************************** MQTT spajanje ***************************************/
  186. void MQTT_connect() {
  187.   int8_t ret;
  188.  
  189.   // Stop if already connected.
  190.   if (mqtt.connected()) {
  191.     return;
  192.   }
  193.  
  194.   //Serial.print("Connecting to MQTT... ");
  195.  
  196.   uint8_t retries = 3;
  197.   while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
  198.       // Serial.println(mqtt.connectErrorString(ret));
  199.      //  Serial.println("Retrying MQTT connection in 5 seconds...");
  200.        mqtt.disconnect();
  201.        delay(5000);  // wait 5 seconds
  202.        retries--;
  203.        if (retries == 0) {
  204.          // basically die and wait for WDT to reset me
  205.          while (1);
  206.        }
  207.   }
  208.   Serial.println("MQTT Connected!");
  209.   prom.publish("Spojeno");
  210.  
  211. }
  212. /****************************** Senzori ***************************************/
  213. int getLumen(int anaPin)
  214. {
  215.   int anaValue = 0;
  216.   for(int i = 0; i < 10; i++) // read sensor 10X ang get the average
  217.   {
  218.     anaValue += analogRead(anaPin);  
  219.     delay(50);
  220.   }
  221.  
  222.   anaValue = anaValue/10; //Light under 300; Dark over 800
  223.   anaValue = map(anaValue, 1023, 0, 0, 100); //LDRDark:0  ==> light 100%
  224.  
  225.   return anaValue;  
  226. }
  227.  
  228. int getSoilMoist(int anaPin)
  229. {
  230.  int anaValue2 = 0;
  231.  anaValue2 = analogRead(anaPin);  
  232.  
  233.  anaValue2 = map(anaValue2, 1000, 300, 0, 100); //LDRDark:0  ==> light 100%
  234.  
  235.   return anaValue2;
  236.   }
  237.  
  238.  
  239.  
  240. void readSensors(void)
  241. {
  242.   t = dht.readTemperature();   //Read temperature and humidity values from DHT sensor:
  243.   h = dht.readHumidity();
  244.   l = getLumen(LDR_PIN);
  245.   soilMoist = getSoilMoist(soilm_pin);
  246.  
  247.  
  248.   //if (isnan(h) || isnan(t)) {
  249.    // Serial.println("Failed to read from DHT sensor!");
  250.    
  251.  
  252.    tem.publish(t);
  253.    hum.publish(h);
  254.    ldr.publish(l);
  255.    soilm.publish(soilMoist);
  256.    /*}
  257.    Serial.println(l);
  258.    Serial.println(soilMoist);
  259. */
  260.    
  261.  
  262.  
  263. }
  264.  
  265.  
  266.  
  267. void sub(){
  268.    Adafruit_MQTT_Subscribe *subscription;
  269.   while ((subscription = mqtt.readSubscription(5000))) {
  270.    
  271.     // check if its the slider feed
  272.     if (subscription == &tempslider) {
  273.     //  Serial.print(F("ZadanaTemp: "));
  274.      // Serial.println((char *)tempslider.lastread);
  275.       prom.publish("Vrijednost promijenjena");
  276.       zad_temp= atoi((char *)tempslider.lastread);  // convert to a number
  277.      
  278.     }
  279.    
  280.     if (subscription == &humslider) {
  281.      // Serial.print(F("ZadanaVlažnost: "));
  282.       //Serial.println((char *)humslider.lastread);
  283.       prom.publish("Vrijednost promijenjena");
  284.        zad_vla = atoi((char *)humslider.lastread);  // convert to a number
  285.   }
  286.  if (subscription == &soilslider) {
  287.      // Serial.print(F("ZadanaVlažnostTla: "));
  288.      // Serial.println((char *)soilslider.lastread);
  289.       prom.publish("Vrijednost promijenjena");
  290.       suho_tlo = atoi((char *)soilslider.lastread);
  291.       // convert to a number
  292.      
  293.  }
  294.  
  295.   if (subscription == &svijetslider) {
  296.      // Serial.print(F("ZadanaSvijetlost: "));
  297.       //Serial.println((char *)svijetslider.lastread);
  298.       prom.publish("Vrijednost promijenjena");
  299.       mrak = atoi((char *)svijetslider.lastread);  // convert to a number
  300.      
  301.  }
  302.  
  303.  if (subscription == &gumb) {
  304.      
  305.                 if (strcmp((char *)gumb.lastread, "ONA") == 0) {
  306.                    Auto = 1;
  307.                    prom.publish("Auto ON");
  308.                    }
  309.  
  310.                   if (strcmp((char *)gumb.lastread, "OFFA") == 0) {
  311.                   Auto = 0;
  312.                 prom.publish("AUTO OFF");
  313.                   }
  314.                   if (strcmp((char *)gumb.lastread, "ONN") == 0) {
  315.                   digitalWrite(PUMP, LOW);
  316.                 prom.publish("PUMP ON");
  317.                   }
  318.                   if (strcmp((char *)gumb.lastread, "OFFN") == 0) {
  319.                     digitalWrite(PUMP, HIGH);
  320.                   prom.publish("PUMP OFF");
  321.                   }
  322.                   if (strcmp((char *)gumb.lastread, "ONS") == 0) {
  323.                     digitalWrite(LAMP, LOW);
  324.                   prom.publish("LAMP ON");
  325.                   }
  326.                   if (strcmp((char *)gumb.lastread, "OFFS") == 0) {
  327.                     digitalWrite(LAMP, HIGH);
  328.                   prom.publish("LED OFF");
  329.                   }
  330.  
  331.                   if (strcmp((char *)gumb.lastread, "ONG") == 0) {
  332.                     digitalWrite(HEATER, HIGH);
  333.                   analogWrite(FAN,64);
  334.                     prom.publish("HEAT ON");
  335.                   }
  336.                   if (strcmp((char *)gumb.lastread, "OFFG") == 0) {
  337.                     digitalWrite(HEATER, LOW);
  338.                   analogWrite(FAN,0);
  339.                     prom.publish("HEAT OFF");
  340.                   }
  341.             }
  342.  
  343.        }
  344.   }
  345.  
  346. void heaterfan()
  347. {
  348.  
  349.  
  350. if( t < zad_temp - 3 )
  351.   {digitalWrite(HEATER,HIGH);
  352.  
  353.             analogWrite(FAN,255);
  354.            
  355.            
  356.   }
  357.  
  358.  if( t < zad_temp - 2  )
  359.         {digitalWrite(HEATER,HIGH);
  360.          analogWrite(FAN,127);
  361.          delay(10);
  362.        }
  363.  
  364.  if( t < zad_temp - 0.6  )
  365.         {digitalWrite(HEATER,HIGH);
  366.          analogWrite(FAN,64);
  367.          delay(10);
  368.           }
  369.  
  370.          
  371.         if( t > zad_temp +0.6 )
  372.         {digitalWrite(HEATER,LOW);
  373.          analogWrite(FAN,64);
  374.          delay(10);
  375.        }
  376. if( t > zad_temp +2 )
  377.         {digitalWrite(HEATER,LOW);
  378.          analogWrite(FAN,125);
  379.          delay(10);
  380.        }
  381. if( t > zad_temp +3 )
  382.  
  383.         {
  384.          
  385.           digitalWrite(HEATER,LOW);
  386.           delay(10);
  387.           analogWrite(FAN,255);
  388.        }
  389.  
  390. }
  391. void autoControlPlantation()
  392. {
  393.  
  394. if(Auto == 1){
  395.  
  396.      if(l < mrak)
  397.            {digitalWrite(LAMP, LOW);
  398.              prom.publish("LED ON");
  399.                        }
  400.  
  401.      else {digitalWrite(LAMP, HIGH);
  402.             prom.publish("LED OFF");
  403.                     }
  404.  
  405.      
  406.        if (soilMoist < suho_tlo && l < mrak)
  407.             {digitalWrite(PUMP, LOW);
  408.                prom.publish("PUMP ON");
  409.  
  410.                   }
  411.       else{
  412.             digitalWrite(PUMP, HIGH);
  413.               prom.publish("PUMP OFF");   }
  414.          delay(10);
  415.  
  416.          
  417.   if (t < zad_temp-0.5  || t > zad_temp+0.5){void heaterfan();}
  418.  
  419.    
  420.  
  421.   else{digitalWrite(HEATER, LOW);
  422.   digitalWrite(FAN, LOW);}
  423.   delay(10);
  424.    
  425.     }
  426. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement