Herramientas de usuario

Herramientas del sitio


personas:johnny:proyectos:indoor_diy_autosostenible

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
Próxima revisiónAmbos lados, revisión siguiente
personas:johnny:proyectos:indoor_diy_autosostenible [2019/06/19 07:36] – [primer prototipo de control automatico] kzpersonas:johnny:proyectos:indoor_diy_autosostenible [2019/11/13 03:15] kz
Línea 48: Línea 48:
   dht.begin();   dht.begin();
   // nombre del wifi y clave del wifi al cual se va a conectar el esp   // nombre del wifi y clave del wifi al cual se va a conectar el esp
-  WiFi.begin("RAMIREZ_BO", "10101973");+  WiFi.begin("name wifi", "wifi password");
  
   while (WiFi.status() != WL_CONNECTED) {   while (WiFi.status() != WL_CONNECTED) {
Línea 208: Línea 208:
 Se intenta manipular relays, mosttar datos en pantallay enviar datos a una base de datos influxdb Se intenta manipular relays, mosttar datos en pantallay enviar datos a una base de datos influxdb
  
-// A ESTE CÖDIGO FALTA IMPLEMENTAR ENVIO DE DATOS AL INFLUX CON WEBSOCKETS+A ESTE CÖDIGO FALTA IMPLEMENTAR ENVIO DE DATOS AL INFLUX CON WEBSOCKETS
 + 
 +[[https://gist.github.com/Kaziuz/d00f4e2e29e292fd1009cc028dc4aecd|Gist al código]] 
 + 
 + 
 +==== Construcción física del indoor ==== 
 + 
 +[[https://www.taringa.net/+hazlo_tu_mismo/como-hacer-armario-cultivo-indoor-sensillo-barato-y-discreto_twzl4|versión barata y sencilla]] 
 + 
 +[[https://www.how-to-marijuana.com/beginners-growing-marijuana-indoors.html|la opción cara y vacana]] 
 + 
 +[[https://www.taringa.net/+cannabis/aporte-todo-para-tu-indoor-desde-cero-thc-n-84_u5ecv|Un resumen de una revista especializada]] 
 + 
 +====== Código para la ventilación usando timeAlarms ======
  
 <code c++> <code c++>
  
-#include <ESP8266WiFi.h> +// https://github.com/PaulStoffregen/TimeAlarms 
-#include <ESP8266WiFiMulti.h> +// Librerias 
-#include <WebSocketsServer.h> +#include <Time.h> 
-#include <Hash.h> +#include <TimeAlarms.h>
-#include <ESP8266WebServer.h> +
-#include <ESP8266mDNS.h> +
-#include <SPI.h> +
-#include <Wire.h> +
-#include <Adafruit_GFX.h> +
-#include <Adafruit_SSD1306.h> +
-//#include <ESP8266HTTPClient.h> +
-#include "DHT.h"+
  
-#define DHTPIN D6 // Pin que va conectado al sensor +// pin que controla  
-#define DHTTYPE DHT11 // Tipo de sensor que estamos usando +int pin = 13;
-#define HTTP_TIMEOUT 1000 * 60 // cada minuto +
-DHT dht(DHTPIN, DHTTYPE);+
  
-// If using software SPI (the default case): +int alarma = 900; // cada 15 min
-#define OLED_MOSI  D7   //D1 +
-#define OLED_CLK   D5   //D0 +
-#define OLED_DC    D4 +
-#define OLED_CS    D8 +
-#define OLED_RESET D0+
  
-Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); +void setup() { 
-  +   
-static const char ssid[] = "d(O_O)b"+  Serial.begin(9600); 
-static const char password[] = "alex1988alex"; +  //fijamos el tiempo inicial del esp 
-MDNSResponder mdns; +  // (08:30:00 25/05/17
-  +  setTime(8,10,0,28,5,19)
-static void writeLED(bool); +   
-  +  //Creamos las alarmas 
-ESP8266WiFiMulti WiFiMulti; +  //Alarm.alarmRepeat(8,init15,0,EveningAlarm); Alarma que se inicia cada día 
-  +  //Alarm.alarmRepeat(8,end15,0,apagarVentilador);  Alarma que termina cada día 
-ESP8266WebServer server(80); +   
-WebSocketsServer webSocket = WebSocketsServer(81); +  Alarm.timerRepeat(alarma, Repeats); // Timer cada 15 segundos 
-  +   
-static const char PROGMEM INDEX_HTML[] = R"rawliteral( +  //Alarm.alarmRepeat(17,45,0,EveningAlarm); 5:45pm cada día 
-<!DOCTYPE html> +  //Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm); 8:30:30 cada sabado 
-<html> +  //Alarm.timerRepeat(alarma, Repeats); Timer cada 15 segundos 
-<head> +  //Alarm.timerOnce(10, OnceOnly);  Llamado una vez despues de 10 segundos 
-<meta name = "viewport" content = "width = device-widthinitial-scale = 1.0maximum-scale = 1.0, user-scalable=0"> +   
-<title>ESP8266 WebSocket Demo</title> +  pinMode(pin, OUTPUT);
-<style> +
-"body { background-color: #808080; font-family: ArialHelveticaSans-Serif; Color: #000000}" +
-</style> +
-<script> +
-var websock; +
-var webSockInflux; // se tiene que mandar los datos por un websocket +
-function start() { +
-  websock = new WebSocket('ws://' + window.location.hostname + ':81/'); +
-  websock.onopen = function(evt) { console.log('websock open'); }; +
-  websock.onclose = function(evt) { console.log('websock close'); }; +
-  websock.onerror = function(evt) { console.log(evt); }; +
-  websock.onmessage = function(evt) { +
-    console.log(evt); +
-     +
-    var e = document.getElementById('ledstatus'); +
-    var f = document.getElementById('ledstatus2'); +
-     +
-    if (evt.data === 'ledon') { +
-      e.style.color = 'red'; +
-    } +
-    else if (evt.data === 'ledoff'+
-      e.style.color = 'black'+
-    } +
-    else if (evt.data === 'ledon1'+
-      f.style.color = 'red'; +
-    } +
-    else if (evt.data === 'ledoff1') { +
-      f.style.color = 'black'; +
-    } +
-    else { +
-      console.log('unknown event'); +
-    } +
-  };+
 } }
  
-function buttonclick(e) { +void loop() { 
-  websock.send(e.id);+  digitalClockDisplay(); 
 +  Alarm.delay(1000);
 } }
  
-</script> +// encender ventilador 
-</head> +void prenderVentilador(){ 
-<body onload="javascript:start();"> +  Serial.println("Ventilando"); 
-<img src="data:image/jpeg;base64,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" width="140px"/> +  digitalWrite(pin, HIGH); 
-<h4>Automatic grow garden</h4> +}
-<div id="ledstatus"><b>RELAY 1</b></div> +
-<button id="ledon"  type="buttononclick="buttonclick(this);">On</button>  +
-<button id="ledoff" type="button" onclick="buttonclick(this);">Off</button> +
-<br /> +
-<br />+
  
-<div id="ledstatus2"><b>Relay 2</b></div> 
-<button id="ledon1"  type="button" onclick="buttonclick(this);">On</button>  
-<button id="ledoff1" type="button" onclick="buttonclick(this);">Off</button> 
  
-</body> +// encender ventilador 
-</html> +void apagarVentilador(){ 
-)rawliteral"; +  Serial.println("apagando ventilador")
-  +  digitalWrite(pin, LOW); 
-// GPIO#0 is for Adafruit ESP8266 HUZZAH boardYour board LED might be on 13. +}
-const int LEDPIN = D1; +
-const int LEDPIN1 = D3; +
-// Current LED status +
-bool LEDStatus; +
-bool LEDStatus1; +
-  +
-// Commands sent through Web Socket +
-const char LEDON[] = "ledon"; +
-const char LEDOFF[] = "ledoff";+
  
-// Commands sent through Web Socket +// función que enciende el riego 
-const char LEDON1[] = "ledon1"; +void prenderSensorRiegoManana(){ 
-const char LEDOFF1[] = "ledoff1"; +  Serial.println("Alarm- Sensor encendido y regando");   
-  +  digitalWrite(pinHIGH);  
-void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) +
-+
-  Serial.printf("webSocketEvent(%d, %d, ...)\r\n", num, type); +
-  switch(type) { +
-    case WStype_DISCONNECTED: +
-      Serial.printf("[%u] Disconnected!\r\n", num); +
-      break; +
-    case WStype_CONNECTED: +
-      { +
-        IPAddress ip = webSocket.remoteIP(num); +
-        Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\r\n", num, ip[0], ip[1], ip[2], ip[3], payload); +
-        // Send the current LED status +
-        if (LEDStatus) { +
-          webSocket.sendTXT(num, LEDON, strlen(LEDON)); +
-        } +
-        else { +
-          webSocket.sendTXT(num, LEDOFF, strlen(LEDOFF)); +
-        } +
-         +
-        // Send the current LED status +
-        if (LEDStatus1) { +
-          webSocket.sendTXT(num, LEDON1, strlen(LEDON1)); +
-        } +
-        else { +
-          webSocket.sendTXT(num, LEDOFF1, strlen(LEDOFF1)); +
-        } +
-      } +
-      break; +
-    case WStype_TEXT: +
-      Serial.printf("[%u] get Text: %s\r\n", num, payload); +
-  +
-      if (strcmp(LEDON, (const char *)payload) == 0) { +
-        writeLED(true); +
-      } +
-      else if (strcmp(LEDOFF, (const char *)payload) == 0) { +
-        writeLED(false); +
-      } +
-      else if (strcmp(LEDON1, (const char *)payload) == 0) { +
-        writeLED1(true); +
-      } +
-      else if (strcmp(LEDOFF1, (const char *)payload) == 0) { +
-        writeLED1(false); +
-      } +
-      else { +
-        Serial.println("Unknown command"); +
-      } +
-      // send data to all connected clients +
-      webSocket.broadcastTXT(payload, length); +
-      break; +
-    case WStype_BIN: +
-      Serial.printf("[%u] get binary length: %u\r\n", num, length); +
-      hexdump(payloadlength); +
-  +
-      // echo data back to browser +
-      webSocket.sendBIN(num, payload, length); +
-      break; +
-    default: +
-      Serial.printf("Invalid WStype [%d]\r\n", type); +
-      break; +
-  }+
 } }
-  + 
-void handleRoot()+// función que apaga el riego 
 +void apagarSensorRiegoManana(){ 
 +  Serial.println("Alarm: - Sensor apagado y riego apagado");  
 +  digitalWrite(pin, LOW);    
 +
 + 
 +void EveningAlarm(){ 
 +  Serial.println("Alarm: - turn lights on");            
 +
 + 
 +void WeeklyAlarm(){ 
 +  Serial.println("Alarm: - its Monday Morning");       
 +
 + 
 +void ExplicitAlarm(){ 
 +  Serial.println("Alarm: - this triggers only at the given date and time");        
 +
 + 
 +void Repeats(){ 
 +  digitalWrite(pin, HIGH); 
 +  Alarm.delay(60000); 
 +  Serial.println("ventilando x un minuto");  
 +  digitalWrite(pin, LOW); 
 +  Alarm.delay(1000); 
 +  Serial.println("apagando ventilador");  
 +
 + 
 +void OnceOnly(){ 
 +  Serial.println("This timer only triggers once");   
 +
 + 
 +void digitalClockDisplay()
 { {
-  server.send_P(200, "text/html", INDEX_HTML);+  // digital clock display of the time 
 +  Serial.print(hour()); 
 +  printDigits(minute()); 
 +  printDigits(second()); 
 +  Serial.println(); 
 } }
-  + 
-void handleNotFound()+void printDigits(int digits)
 { {
-  String message = "File Not Found\n\n"; +  Serial.print(":")
-  message += "URI: "+  if(digits < 10) 
-  message += server.uri(); +  Serial.print('0')
-  message += "\nMethod"; +  Serial.print(digits); 
-  message += (server.method() =HTTP_GET)?"GET":"POST"; +
-  message += "\nArguments: "; +</code> 
-  message += server.args(); + 
-  message +"\n"+ 
-  for (uint8_t i=0i<server.args(); i++){ +====== Código para el control automatizado de las luces ====== 
-    message += " " + server.argName(i+ ": " + server.arg(i) + "\n";+ 
 +Este código posee dos funciones que segun el estado se la planta se pueden cambiar para vegetativo o floración. Es un proyecto en platformio 
 + 
 +<code c++> 
 +/* 
 +  Este código toma la hora de internet usando un servidor NTP y  
 +  enciende algo. Tomadpo de aqui https://lastminuteengineers.com/esp8266-ntp-server-date-time-tutorial/ 
 + 
 +  !!! importante 
 +  You need to adjust the UTC offset for your timezone in milliseconds.  
 +  Refer the list of UTC time offsets.  Here are some examples for different timezones: 
 +  https://upload.wikimedia.org/wikipedia/commons/8/88/World_Time_Zones_Map.png 
 + 
 +  For UTC -5.00 : -5 * 60 * 60 : -18000 
 +  For UTC +1.00 1 * 60 * 60 : 3600 
 +  For UTC +0.00 : 0 * 60 * 60 : 0 
 + 
 +  here -> const long utcOffsetInSeconds 3600; 
 +*/ 
 +#include <Arduino.h> 
 +#include <NTPClient.h> 
 +#include <ESP8266WiFi.h> 
 +#include <WiFiUdp.h> 
 + 
 +const char *ssid = "el nombre de la red"
 +const char *password = "el password de la red"; 
 +const long utcOffsetInSeconds -18000; // colombia UTC -5 
 +char daysOfTheWeek[7][12] = { 
 +  "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" 
 +}
 +// Define NTP client to get time 
 +WiFiUDP ntpUDP; 
 +NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds); 
 +int ledTrigger D6; 
 + 
 +void setup() { 
 +  Serial.begin(115200); 
 +  WiFi.begin(ssid, password); 
 +  while(WiFi.status() != WL_CONNECTED) { 
 +    delay(500)
 +    Serial.print(".");
   }   }
-  server.send(404, "text/plain", message);+  Serial.print("Wifi connected!"); 
 +  Serial.println("IP address: "); 
 +  Serial.println(WiFi.localIP());   
 +  timeClient.begin(); 
 +  pinMode(LED_BUILTIN, OUTPUT); 
 +  pinMode(ledTriggerOUTPUT);
 } }
-  + 
-static void writeLED(bool LEDon+void statusWIFI() { 
-+  // cuando esta pegado a internet el status es 3 
-  LEDStatus LEDon+  // la idea de esto es que mande un color u otro si tiene internet o no 
-  // Note inverted logic for Adafruit HUZZAH board +  Serial.print("Estatus wifi is: "); 
-  if (LEDon) { +  Serial.println(WiFi.status()); 
-    digitalWrite(LEDPIN1);+
 + 
 +void lucesVegetativo() 
 +  // 18 horas luz, 6 horas oscuridad 
 +  int hours timeClient.getHours()
 +  //  se prenden a las 6 de la mañana y se apagan a las 12 de la noche 
 +  if ( hours < 6 ) { 
 +    digitalWrite(ledTriggerLOW); 
 +    Serial.println("Luces OFF!"); 
 +  } else { 
 +    digitalWrite(ledTrigger, HIGH); 
 +    Serial.println("Luces ONN!");
   }   }
-  else { +
-    digitalWrite(LEDPIN0);+ 
 +void lucesFloracion() { 
 +  // 12 horas luz, 12 horas oscuridad 
 +  int hours = timeClient.getHours(); 
 +  //  a las 6 de la mañana se prenden y a las 6 de la tarde se apagan 
 +  if ( (hours >= 6) && (hours < 18) ) { 
 +    digitalWrite(ledTrigger, HIGH); 
 +    Serial.println("Luces ONN!"); 
 +  } else { 
 +    digitalWrite(ledTriggerLOW); 
 +    Serial.println("Luces OFF");
   }   }
 } }
  
-static void writeLED1(bool LEDon) +// the loop function runs over and over again forever 
-+void loop() { 
-  LEDStatus1 = LEDon+  timeClient.update(); 
-  // Note inverted logic for Adafruit HUZZAH board +  Serial.print(daysOfTheWeek[timeClient.getDay()]); 
-  if (LEDon) { +  Serial.print(", "); 
-    digitalWrite(LEDPIN1, 1);+  Serial.print(timeClient.getHours()); 
 +  Serial.print(":"); 
 +  Serial.print(timeClient.getMinutes()); 
 +  Serial.print(":"); 
 +  Serial.print(timeClient.getSeconds()); 
 +  Serial.println(""); 
 +  statusWIFI()
 +  //lucesVegetativo(); 
 +  lucesFloracion(); 
 +  delay(1000); 
 + 
 +  /* 
 +  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)} 
 +  digitalWrite(ledTrigger, HIGH); 
 +  delay(1000);                       // wait for a second 
 +  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW 
 +  digitalWrite(ledTrigger, LOW); 
 +  delay(1000);                       // wait for a second 
 +  */ 
 +
 +</code> 
 + 
 +el platformio.ini 
 +<code json> 
 +;PlatformIO Project Configuration File 
 +
 +;   Build options: build flags, source filter 
 +;   Upload options: custom upload port, speed and extra flags 
 +;   Library options: dependencies, extra library storages 
 +;   Advanced options: extra scripting 
 +
 +; Please visit documentation for the other options and examples 
 +; https://docs.platformio.org/page/projectconf.html 
 + 
 +[env:d1_mini_lite] 
 +platform = espressif8266 
 +board = d1_mini_lite 
 +framework = arduino 
 +lib_deps = NTPClient 
 + 
 +</code> 
 + 
 +====== control de humedad y temperatura ====== 
 + 
 +Se inicia de aqui [[https://create.arduino.cc/projecthub/Pedro52/arduino-capacitive-soil-moisture-sensor-diy-with-esp32-d7ad72|conectar sensor de humedad capacitivo]] 
 + 
 +{{:personas:johnny:proyectos:capacitivo.jpg?400|}} 
 + 
 +{{:personas:johnny:proyectos:photo4938261042715273252.jpg?400|}} 
 + 
 +<code c++>  
 +#include <Arduino.h> 
 + 
 +int sensorPin = A0;    // select the input pin for the potentiometer 
 +int ledPin = D4;      // select the pin for the LED 
 +int sensorValue = 0;  // variable to store the value coming from the sensor 
 + 
 +void setup() { 
 +  // declare the ledPin as an OUTPUT: 
 +  pinMode(ledPin, OUTPUT); 
 +  Serial.begin(115200); 
 +
 + 
 +void loop() { 
 +  // read the value from the sensor: 
 +  sensorValue = analogRead(sensorPin); 
 +  Serial.println(sensorValue); 
 +  // turn the ledPin on 
 +  digitalWrite(ledPinHIGH); 
 +  // stop the program for <sensorValue> milliseconds: 
 +  delay(sensorValue); 
 +  // turn the ledPin off: 
 +  digitalWrite(ledPin, LOW); 
 +  // stop the program for for <sensorValue> milliseconds: 
 +  delay(sensorValue); 
 +
 + 
 +</code> 
 + 
 +<WRAP center round important 60%> 
 +Sensor totalmente seco: 833 
 +Sensor totalmente humedo: 482 
 +</WRAP> 
 + 
 +====== actualizacion nov 3 2019 ====== 
 + 
 +He creado una nueva versión del modulo que contiene un **capacitive moisture sensor** para medir la humedad en la tierra, un **module relay x 4** para controlar las luces y la ventilación. Para el ciclo solar de las luces estoy usando la libreria **time.h**, me di cuenta que es mejor usar sin el **timeAlarms.h** porque se pueden customizar mejor los ciclos de la luz y es mejor, o hasta ahora me funciona a mi asi. 
 + 
 + 
 +---- 
 +{{:personas:johnny:proyectos:version-indoor-1.jpg?400|}} 
 + 
 +{{:personas:johnny:proyectos:version-indoor-3.jpg?400|}} 
 + 
 +{{:personas:johnny:proyectos:version-indoor-4.jpg?400|}} 
 + 
 +Mi abuelo me ha ayudado en la creación del indoor, una estructura de 90cm x 90cm x 1.5m. En su interior he añadido el DHT11 para "medir" la temperatura y humedad interna del lugar. Y a la planta mas grande he anclado en la tierra el sensor capcitivo. 
 + 
 +{{:personas:johnny:proyectos:indoor-build-and-module1.jpg?400|}} 
 +{{:personas:johnny:proyectos:indoor-build-and-module2.jpg?400|}} 
 +{{:personas:johnny:proyectos:indoor-build-and-module3.jpg?400|}} 
 +{{:personas:johnny:proyectos:indoor-build-and-module4.jpg?400|}} 
 +{{:personas:johnny:proyectos:indoor-build-and-module5.jpg?400|}} 
 +{{:personas:johnny:proyectos:indoor-build-and-module6.jpg?400|}} 
 + 
 +<code c++> 
 + /* Librerias usadas 
 + * https://github.com/PaulStoffregen/Time 
 + * https://github.com/PaulStoffregen/TimeAlarms 
 + * https://learn.adafruit.com/dht/using-a-dhtxx-sensor 
 + *  
 + * Recursos 
 + * https://www.switchdoc.com/2018/11/tutorial-capacitive-moisture-sensor-grove/ 
 +*/ 
 + 
 +// import libraries 
 +#include <DHT.h> 
 +#include <DHT_U.h> 
 +#include <Time.h> 
 +#include <SPI.h> 
 +#include <Wire.h> 
 +#include <Adafruit_GFX.h> 
 +#include <Adafruit_SSD1306.h> 
 +#include <ESP8266HTTPClient.h> 
 +#include <ESP8266WiFi.h> 
 + 
 +// defines and variables globals sensors 
 +// dth11 
 +#define DHTPIN 4 // D2 
 +#define DHTTYPE DHT11 
 +#define HTTP_TIMEOUT 4000 
 + 
 +// screen oled 
 +#define OLED_MOSI 14  // D5 
 +#define OLED_CLK 16   // D0 
 +#define OLED_DC 13    // D7 
 +#define OLED_RESET 12 // D6 
 +#define OLED_CS 15    // D8 
 + 
 +// lights- relay IN4 
 +int lights = 2;  
 + 
 +// ventilador - relay IN3 
 +int air = 0; 
 + 
 +// capacitive sensor 
 +const int waterValue = 464; 
 +int soilMoistureValue = 0; 
 + 
 +Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); 
 +DHT dht(DHTPIN, DHTTYPE); 
 + 
 +void setup() { 
 +  Serial.begin(115200); 
 +  display.begin(SSD1306_SWITCHCAPVCC); 
 +  display.clearDisplay();  
 +  display.setTextSize(0.5);  
 +  display.setTextColor(WHITE); 
 +  display.setCursor(0,0); 
 +  Serial.println(); 
 +  Serial.println(); 
 +  // 
 +  for(uint8_t t = 4; t > 0; t--) { 
 +    Serial.printf("[SETUP] BOOT WAIT %d...\r\n", t); 
 +    Serial.flush(); 
 +    delay(1000);
   }   }
-  else +  // 
-    digitalWrite(LEDPIN1, 0);+  display.setTextColor(WHITE);  
 +  display.setCursor(0,10);  
 +   
 +  // casa del negro 
 +  // WiFi.begin("user", "pass"); 
 +   
 +  while (WiFi.status() != WL_CONNECTED) 
 +    delay(500); 
 +    display.println("UN/LOQUER - cultiva");  
 +    display.print(".");
   }   }
 +
 +  display.display();
 +  delay(3000);
 +  // H, M, S, D, M, A
 +  setTime(14,6,0,9,11,19);
 +  pinMode(lights, OUTPUT);
 +  pinMode(air, OUTPUT);
 +  dht.begin();
 } }
  
-// función que prepara la trama de datos para hacer un POST a endpoint del influx +void loop() { 
-String influxFrame( String dht11_humidity, String dht11_temperature ) { +  display.clearDisplay(); 
-  // este es el nombre del sensor +  display.setTextSize(0.5); 
-  // Siempre que se quema la primera vez, se debe de cambiar el nombre del sensor +  display.setTextColor(WHITE); 
-  const String SENSOR_ID = "DHT11_llanadas"; // Nombre del sensor en la plataforma +  display.setCursor(0,0); 
- +  display.print("time: "); 
 +  display.print(hour()); 
 +  display.print(":"); 
 +  display.print(minute()); 
 +  display.print(":"); 
 +  display.print(second()); 
 +  display.print(" "); 
 +  display.setCursor(0,8);  
 +  // display alarms lights state 
 +  lucesFloracion(); 
 +  // display capacitive himudity   
 +  display.setCursor(0,16); 
 +  soilMoistureValue = analogRead(A0); 
 +  display.print("Soil moisture: "); 
 +  display.println(soilMoistureValue);  
 +  delay(500); 
 +  // display dht sensor 
 +  display.setCursor(0,24); 
 +  int h = dht.readHumidity(); 
 +  int t = dht.readTemperature(); 
 +  if (isnan(h) || isnan(t)) { 
 +    display.println(F("Failed read dht!")); 
 +    return; 
 +  } 
 +  display.print(F("Hum: ")); 
 +  display.print(h); 
 +  display.print(F(" %  Tem: ")); 
 +  display.print(t); 
 +  display.print(F(" C ")); 
 +  display.println(""); 
 +  // run air at inddor 
 +  ventilacion(); 
 +  display.display(); 
 +  sendDataInflux(String(h), String(t), String(soilMoistureValue)); 
 +
 + 
 +void lucesVegetativo() { 
 +  // 18 horas luz, 6 horas oscuridad 
 +  // se prenden a las 6 de la mañana y se apagan a las 12 de la noche 
 +  if ( hour() < 6 ) { 
 +    digitalWrite(lightsLOW); 
 +    display.println("Veget Light OFF!"); 
 +  } else { 
 +    digitalWrite(lights, HIGH); 
 +    display.println("Veget Light ONN!"); 
 +  } 
 +
 + 
 +void lucesFloracion() { 
 +  // 12 horas luz, 12 horas oscuridad 
 +  //  a las 6 de la mañana se prenden y a las 6 de la tarde se apagan 
 +  if ( (hour() >= 6) && (hour() < 18) ) { 
 +    digitalWrite(lights, HIGH); 
 +    display.println("Flor Light ONN!"); 
 +  } else { 
 +    digitalWrite(lights, LOW); 
 +    display.println("Flor Light OFF"); 
 +  } 
 +
 + 
 +void ventilacion() { 
 +  // se prende cada 15 min 1 min 
 +  if ( (minute() == 1) || (minute() == 16) || (minute() == 46) || (minute() == 31) ) { 
 +    digitalWrite(air, HIGH); 
 +  } else { 
 +    digitalWrite(air, LOW); 
 +  } 
 +
 + 
 +String influxFrame( String dht11_humidity, String dht11_temperature, String soilCapacitiveSensor) { 
 +  const String SENSOR_ID = "DHT11_llanadas"; // Nombre del sensor en la plataforma, la 1 VEZ CAMBIAR !!!!
   const String STR_COMMA = ",";   const String STR_COMMA = ",";
   const String STR_SLASH = "/";   const String STR_SLASH = "/";
Línea 474: Línea 716:
   //   frame += "humidity=" + STR_NULL + STR_COMMA + "temperature=" + STR_NULL + STR_COMMA;   //   frame += "humidity=" + STR_NULL + STR_COMMA + "temperature=" + STR_NULL + STR_COMMA;
   // }   // }
- + 
 +  // ADD capacitive sensor data 
 +  frame += "soil_capacitive="; 
 +  frame += soilCapacitiveSensor + STR_COMMA; 
 +    
   // Add Plantower data   // Add Plantower data
     // if     // if
Línea 491: Línea 737:
    
 // función que envía la trama de datos // función que envía la trama de datos
-void sendDataInflux ( String humidity, String temperature ) { +void sendDataInflux ( String humidity, String temperature, String _soilCapacitiveSensor ) { 
-  /+  /El post a la base de datos tiene una trama siguiente:
-  El post a la base de datos tiene una trama siguiente:+
   // volker0001,id=volker0001 lat=6.268115,lng=-75.543407,altitude=1801.1,course=105.55,speed=0.00,humidity=37.00,temperature=25.00,pm1=22,pm25=31,pm10=32   // volker0001,id=volker0001 lat=6.268115,lng=-75.543407,altitude=1801.1,course=105.55,speed=0.00,humidity=37.00,temperature=25.00,pm1=22,pm25=31,pm10=32
-  Para nuestro caso que SOLO es el envío de datos del dht_11 que es humedad y temperatura la trama es la siguiente +  // Para nuestro caso que SOLO es el envío de datos del dht_11 que es humedad y temperatura la trama es la siguiente 
-  // DHT11_llanadas, id=DHT11_llanadas, lat=6.2563143, lng=-75.5386472, altitude=0, course=0, speed=0, humidity=37.00, temperature=25.00, pm1=0, pm25=0, pm10=0 1434055562000000000 +  // DHT11_llanadas, id=DHT11_llanadas, lat=6.2563143, lng=-75.5386472, altitude=0, course=0, speed=0, humidity=37.00, temperature=25.00, pm1=0, pm25=0, pm10=0 1434055562000000000  
-  */   + if(WiFi.status() == 3) { 
-  HTTPClient http;  +    HTTPClient http;  
-  // _testsensorhumedad es el nombre de la DB donde se almacenan estos datos +    // _testsensorhumedad es el nombre de la DB donde se almacenan estos datos 
-  http.begin("http://aqa.unloquer.org:8086/write?db=_testsensorhumedad"); // endPoint final, '_testsensorhumedad' es el nombre de la base de datos +    http.begin("http://aqa.unloquer.org:8086/write?db=_testsensorhumedad"); // endPoint final, '_testsensorhumedad' es el nombre de la base de datos 
-  http.setTimeout(HTTP_TIMEOUT); +    http.setTimeout(HTTP_TIMEOUT); 
-  http.addHeader("Content-Type", "--data-binary");   +    http.addHeader("Content-Type", "--data-binary");   
-  + 
-  String frame = influxFrame(humidity, temperature); // Construimos el request POST +    // esto se debe de integrar con el soil capacitive sensor 
-  +    // String frame = influxFrame(humidity, temperature, _soilCapacitiveSensor); // Construimos el request POST 
-  int httpCode = http.POST(frame); // Envíamos los datos haciendo un POST +    String frame = influxFrame(humidity, temperature, _soilCapacitiveSensor); 
-  +    
-  if(httpCode > 0) { +    int httpCode = http.POST(frame); // Envíamos los datos haciendo un POST 
-    String payload = http.getString(); +    
-    Serial.println(payload); +    if(httpCode > 0) { 
-    Serial.println("Envío de datos con exito!"); +      String payload = http.getString(); 
-  } else { +      Serial.println(payload); 
-    Serial.print("[HTTP] failed, error;"); +      Serial.println("Envío de datos con exito!"); 
-    Serial.println(http.errorToString(httpCode).c_str());+    } else { 
 +      Serial.print("[HTTP] failed, error;"); 
 +      Serial.println(http.errorToString(httpCode).c_str()); 
 +    } 
 +     http.end();
   }   }
-  +    delay(60000);
-  http.end(); +
-  delay(60000); // cada minuto se envía un POST al influx+
 } }
-  +</code>
-void setup() +
-+
-  pinMode(LEDPIN, OUTPUT); +
-  pinMode(LEDPIN1, OUTPUT); +
-  writeLED(false); +
-  writeLED1(false); +
-  +
-  Serial.begin(115200);+
  
-  // init pantalla 
-  display.begin(SSD1306_SWITCHCAPVCC); 
-  display.display(); 
-  delay(1000); 
-  display.clearDisplay(); 
-  display.setTextSize(1); 
-  display.setTextColor(WHITE); 
  
-  Serial.println(F("DHTxx test!")); +====== Actualización nov 9 2019 ======
-  dht.begin(); +
-  +
-  //Serial.setDebugOutput(true); +
-  +
-  Serial.println(); +
-  Serial.println(); +
-  Serial.println(); +
-  +
-  for(uint8_t t 4; t > 0; t--) { +
-    Serial.printf("[SETUP] BOOT WAIT %d...\r\n", t); +
-    Serial.flush(); +
-    delay(1000); +
-  }+
  
-   +Hasta ahora la libreria time.h a funcionado muy bienreemplazandome por completo un rtc.
-  +
-  WiFiMulti.addAP(ssidpassword); +
-  +
-  while(WiFiMulti.run() != WL_CONNECTED) { +
-    Serial.print("."); +
-    delay(100); +
-  } +
-  +
-  Serial.println(""); +
-  Serial.print("Connected to "); +
-  Serial.println(ssid); +
-  Serial.print("IP address: "); +
-  Serial.println(WiFi.localIP()); +
-  +
-  if (mdns.begin("espWebSock", WiFi.localIP())) { +
-    Serial.println("MDNS responder started"); +
-    mdns.addService("http", "tcp", 80); +
-    mdns.addService("ws", "tcp", 81); +
-  } +
-  else { +
-    Serial.println("MDNS.begin failed"); +
-  } +
-  Serial.print("Connect to http://espWebSock.local or http://"); +
-  Serial.println(WiFi.localIP()); +
-  +
-  server.on("/", handleRoot); +
-  server.onNotFound(handleNotFound); +
-  +
-  server.begin(); +
-  +
-  webSocket.begin(); +
-  webSocket.onEvent(webSocketEvent); +
-+
-  +
-void loop() +
-+
-  webSocket.loop(); +
-  server.handleClient();+
  
-  // dht11 y pantall +=== Los datos se puede ver en:===
-  static unsigned int h 0; +
-  static unsigned int t 0;+
  
-  h = dht.readHumidity();  +[[http://aqa.unloquer.org:8888/sources/1/dashboards/2?lower=now%28%29%20-%2015m|Enlace al influx]]
-  t = dht.readTemperature(); +
-  /+
-  // Si las lecturas fallan, salimos, no mandamos nada y volvemos a intentarlo +
-  if (isnan(h) || isnan(t)) { +
-    Serial.println(F("Failed to read from DHT sensor!")); +
-    return; +
-  } +
-  */+
  
-  display.clearDisplay(); +====== Actualización nov 12 2019 ======
-  display.setCursor(0,0); +
-  display.print("UN/LOQUER \n"); +
-  display.print("HUM:   "); +
-  display.print(h); +
-  display.print(" % \n"); +
-  display.print("TEM:  "); +
-  display.print(t); +
-  display.print(" C \n"); +
-  display.print("IP: "); +
-  display.print(WiFi.localIP()); +
-  display.display();+
  
-  // sendDataInflux(String(h), String(t)); // se tiene que mandar los datos por websokect + no por protocolo http +Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo.
-}+
  
  
-</code>+Tareas que faltan por hacer!!!
  
 +<WRAP center round alert 60%>
 +En esta imlementación de POST hacia una base de datos, se cae el esp y hace que reinice
 +</WRAP>
  
 +  - integrar una web en la flash para programar la fecha del rtc digital time.h,  (integrar esa parte que necesito de upayakuwasi y las alarmas)
 +  - pensar en una interfaz para pedir al usuario la programacion de la luz sea floración o vegetación o esquejes.
 +  - sacar una tarjetica en fritzing y pasarsela al brol o a uber, con el convertidor de la luz
 +  - actualizar el firmware por medio de ota
  
 +
 +
 + 
  
  
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz