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/11/03 13:42] – [actualizacion nov 3 2019] kzpersonas:johnny:proyectos:indoor_diy_autosostenible [2019/12/01 07:40] kz
Línea 524: Línea 524:
 {{:personas:johnny:proyectos:indoor-build-and-module6.jpg?400|}} {{:personas:johnny:proyectos:indoor-build-and-module6.jpg?400|}}
  
-Tareas que faltan por hacer!!!+[[https://gist.github.com/Kaziuz/ad3751c3b075d593cda2c111af3b242b|Link hacia el codigo del indoor]]
  
-  - Íntegrar el envío de datos al influx deñ dth11 + el capasitive sensor PRIORIDAD!!! 
-  - integrar una web en la flash para programar la fecha del rtc digital 8-) <script>time.h</script> (integrar esa parte que necesito de upayakuwasi y las alarmas) 
  
 +====== Actualización nov 9 2019 ======
  
-<script c++>+Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc.
  
-/********************************************************************* +=== Los datos se puede ver en:===
-Este ejemplo es para los oled de 128x64 usando SPI y Drivers +
-SSD1306 o SH1106 ambos con 7 pines de conexión.- +
-Se utilizan las librerias de Adafruit. +
-*********************************************************************/+
  
 +[[http://aqa.unloquer.org:8888/sources/1/dashboards/2?lower=now%28%29%20-%2015m|Enlace al influx]]
 +
 +====== Actualización nov 12 2019 ======
 +
 +Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo.
 +
 +====== Actualización 1 diciembre 2019 ======
 +
 +Por alguna razón con el código que tengo aqui ... se presenta el problema de que el modulo funciona bien 5 o 6 dias y despues deja de funcionar bien... no apagando la luz cuando debe de estar apagada o viceversa, dejando la luz prendida cuando debe de estar apagada. El problema es que solo se fija una vez el tiempo
 +en el esp... si estre se reinicia o se va la energia... esto causa que el tiempo se reinicie... ocacionando que el tiempo de las alarmas de las luces no este sincronizado con el tiempo real.
 +
 +*Solución: *Se usan las librerias NTP y Time simultaneamente... en resumen se fija al inicio el tiempo local (libreria time) con request al servidor NTP... luego de eso el tiempo local se va actualizando cada 10 miniutos con un request al servidor NTP.
 +
 +*TODO*
 +
 +  - *RAPIDO*: integrar al código actual al actualizacion con el servidor NTP
 +  - 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
 +
 +
 +<code c++>
 +/* Library used
 + * https://github.com/PaulStoffregen/Time
 + * https://github.com/PaulStoffregen/TimeAlarms
 + * https://learn.adafruit.com/dht/using-a-dhtxx-sensor
 + 
 + * resources from sensor
 + * https://www.switchdoc.com/2018/11/tutorial-capacitive-moisture-sensor-grove/
 + 
 +  config NTP
 +  this code take the time from server using NTP 
 +  https://lastminuteengineers.com/esp8266-ntp-server-date-time-tutorial/
 +
 +  !!! IMPORTANT
 +  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
 +  used -> const long utcOffsetInSeconds = 3600;
 +*/
 +
 +#include <Arduino.h>
 +#include <NTPClient.h>
 +#include <DHT.h>
 +#include <Time.h>
 #include <SPI.h> #include <SPI.h>
 #include <Wire.h> #include <Wire.h>
 #include <Adafruit_GFX.h> #include <Adafruit_GFX.h>
- 
-// #include <Adafruit_SH1106.h> 
 #include <Adafruit_SSD1306.h> #include <Adafruit_SSD1306.h>
 +#include <ESP8266HTTPClient.h>
 +#include <ESP8266WiFi.h>
 +#include <WiFiUdp.h>
 +#include <string.h>
  
-// Definir pines SPI en Arduino+// pin out oled ssd1306 
 +#define OLED_MOSI 14   //D5 
 +#define OLED_CLK 16    //D0 
 +#define OLED_DC 13     //D7 
 +#define OLED_CS 15     //D6 
 +#define OLED_RESET 12  //D8
  
-#define OLED_MOSI 14  // D5 +#define lights D1 
-#define OLED_CLK 16   // D0 +char stateLights = 'F';
-#define OLED_DC 13    // D7 +
-#define OLED_RESET 12 // D6 +
-#define OLED_CS 15    // D8+
  
 +// config NTP variables
 +int time_hours = 0;
 +int time_minutes = 0;
 +int time_seconds = 0;
 +const int *ntp_hours, *ntp_minutes, *ntp_seconds;
 +const long utcOffsetInSeconds = -18000; // colombia UTC -5
 +char daysOfTheWeek[7][12] = {
 +  "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
 +};
  
-// A continuación informamos al soft del driver,cuales pines del arduino usamos +const char *ssid = "TP-LINK_Extender_C464C2"; 
-// Para SH1106 descomentar siguiente comando +const char *pass = "alex1988alex"; 
-//Adafruit_SH1106 display(OLED_MOSIOLED_CLKOLED_DC, OLED_RESET, OLED_CS); + 
-// Para SSD1306 descomentar siguiente comando+// Define NTP client to get time 
 +WiFiUDP ntpUDP; 
 +NTPClient timeClient(ntpUDP"pool.ntp.org"utcOffsetInSeconds); 
 + 
 +// config display
 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
-// Para SH1106 descomentar siguiente comando 
-//#if (SH1106_LCDHEIGHT != 64) 
-// Para SSD1306 descomentar siguiente comando 
 #if (SSD1306_LCDHEIGHT != 64) #if (SSD1306_LCDHEIGHT != 64)
 //#error("Height incorrect, please fix Adafruit_SH1106.h!"); //#error("Height incorrect, please fix Adafruit_SH1106.h!");
 #endif #endif
  
-void setup() +// define template function 
-+void firstSync(); 
- Serial.begin(115200); // Si se va husar comunicación serialDescomentar +void syncNtptoTime(); 
- // Para SH1106 descomentar siguiente comando +void stateVegetative(); 
- //display.begin(SH1106_SWITCHCAPVCC); // Inicia el display OLED (Carga Buffer+void stateFlowering(); 
- // Para SSD1306 descomentar siguiente comando + 
- display.begin(SSD1306_SWITCHCAPVCC); // Inicia el display OLED (Carga Buffer+void setup() 
- display.clearDisplay(); // Borrar imagen en el OLED +  // display 
- display.setTextSize(1); // Definir Tamaño del Texto +  Serial.begin(115200); 
- display.setTextColor(WHITE); // Definir color del texto. (mono=>Blanco+  setTime(time_hours,time_minutes,time_seconds,30,11,19); 
- display.setCursor(0,10 ); // Definir posición inicio texto Columna (0Fila (10) +  WiFi.begin(ssid, pass); 
- display.println("Hola este es un mensaje de pruebas #1"); // Carga la información al buffer +  display.begin(SSD1306_SWITCHCAPVCC); 
- display.display(); // Actualiza display con datos en Buffer +  display.clearDisplay(); 
- delay(2000); // Demora de 2 segundos.+  Serial.println(); 
 +  Serial.println(); 
 +  delay(1000); 
 +  display.setTextSize(1); 
 +  display.setTextColor(WHITE); 
 +  display.setCursor(0,10); 
 +  display.println("Init ... "); 
 +  display.display(); 
 +  delay(1000); 
 +  while (WiFi.status() != WL_CONNECTED) { 
 +    delay(500); 
 +    display.clearDisplay(); 
 +    display.setTextSize(1); 
 +    display.setCursor(0,10); 
 +    display.setTextColor(BLACK, WHITE); 
 +    display.println("connecting wifi "); 
 +    display.print("."); 
 +    display.display(); 
 +  } 
 +  display.clearDisplay(); 
 +  display.setTextSize(1); 
 +  display.setCursor(0,10); 
 +  display.setTextColor(WHITE)
 +  display.println("Wifi connected"); 
 +  display.println(WiFi.localIP()); 
 +  display.display(); 
 +  timeClient.begin(); 
 +  delay(5000); 
 +  display.clearDisplay(); 
 +  display.setTextSize(1); 
 +  display.setTextColor(WHITE); 
 +  display.setCursor(0,10); 
 +  display.println("first sync NTP to Time hardware..."); 
 +  display.display(); 
 +  firstSync(); 
 +  delay(5000); 
 +  //Serial.print(WiFi.localIP());   
 +  //pinMode(ledTrigger, OUTPUT); 
 +  pinMode(lights, OUTPUT);
 } }
  
 void loop() { void loop() {
- // Aquí irá el programa+  display.clearDisplay(); 
 +  display.setTextSize(0.5); 
 +  display.setTextColor(WHITE); 
 +  display.setCursor(0,0); 
 +  display.print(daysOfTheWeek[timeClient.getDay()]); 
 +  if (stateLights == 'V') { 
 +    display.print(" | lights Onn"); 
 +  } else { 
 +    display.print(" | lights Off"); 
 +  } 
 +  display.println(); 
 +  display.setCursor(0,8); 
 +  // time library 
 +  display.print("rtc d: "); 
 +  display.print(hour()); 
 +  display.print(":"); 
 +  display.print(minute()); 
 +  display.print(":"); 
 +  display.print(second());
  
- // Cuando se quiera mostrar nueva información +  // time ntp 
-  display.clearDisplay(); // Borrar imagen en el OLED +  display.setCursor(0,16); 
-  display.setTextSize(0.5); // Definir Tamaño del Texto +  display.print("last sync: "); 
-  display.setTextColor(WHITE); // Definir color del texto. (mono=>Blanco) +  display.print(*ntp_hours); 
-   +  display.print(":"); 
-  display.setCursor(0,0); // Definir posición inicio texto Columna (0) Fila (0) +  display.print(*ntp_minutes); 
-  display.println("El gordo es un hp!"); // Carga la información al buffer +  display.print(":"); 
-  display.setCursor(0,8); // Definir posición inicio texto Columna (0) Fila (0) +  display.print(*ntp_seconds); 
-  display.println("golondras!"); // Carga la información al buffer + 
-  display.setCursor(0,16); // Definir posición inicio texto Columna (0) Fila (0) +  // state lights 
-  display.println("12 parea apagarse!"); // Carga la información al buffer +  display.setCursor(0,24); 
-  display.setCursor(0,24); // Definir posición inicio texto Columna (0) Fila (0+ 
-  display.println("dispositivo"); // Carga la información al buffer +  syncNtptoTime(); 
-  display.display(); // Actualiza display con datos en Buffer +  // stateFlowering(); 
-  delay(2000); // Demora de 2 segundos.+  stateVegetative(); 
 + 
 +  // update display 
 +  display.display(); 
 +  delay(1000);
  
  
-</script>+void firstSync() { 
 +  // pointer update with what is in ntp 
 +  timeClient.update(); 
 +  ntp_hours = &time_hours; 
 +  ntp_minutes = &time_minutes; 
 +  ntp_seconds = &time_seconds;  
 +  // first update ntp to time variables 
 +  time_hours = timeClient.getHours(); 
 +  time_minutes = timeClient.getMinutes(); 
 +  time_seconds = timeClient.getSeconds(); 
 +  // frist sync Ntp time to local time, get values from value pointers 
 +  setTime(*ntp_hours,*ntp_minutes,*ntp_seconds,30,11,19); 
 +  timeClient.end(); 
 +}
  
- +void syncNtptoTime() { 
 +  // update local time from NTP server over get minutes and seconds 
 +  // from local time hardware 
 +  if ( (minute() == 10 && second() == 58) ||  
 +       (minute() == 20 && second() == 58) || 
 +       (minute() == 30 && second() == 58) || 
 +       (minute() == 40 && second() == 58) || 
 +       (minute() == 50 && second() == 58) 
 +     ) { 
 +    timeClient.update(); 
 +    time_hours = timeClient.getHours(); 
 +    time_minutes = timeClient.getMinutes(); 
 +    time_seconds = timeClient.getSeconds(); 
 +    timeClient.end(); 
 +    // TODO: how to update days, month and year ? 
 +    setTime(*ntp_hours,*ntp_minutes,*ntp_seconds,30,11,19); 
 +    delay(500); 
 +  } 
 +
 + 
 +void stateVegetative() { 
 +  // 18 hours lights, 6 hours night 
 +  // they turn on 6 in the morning and turn off at the 12 last night 
 +  if ( hour() < 6 ) { 
 +    digitalWrite(lights, LOW); 
 +    stateLights = 'F'; 
 +  } else { 
 +    digitalWrite(lights, HIGH); 
 +    stateLights = 'V'; 
 +  } 
 +
 + 
 +void stateFlowering() { 
 +  // 12 hours lights, 12 hours night 
 +  //  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); 
 +    stateLights = 'V'; 
 +  } else { 
 +    digitalWrite(lights, LOW); 
 +    stateLights = 'F'; 
 +  } 
 +}
  
 +</code>
  
  
  
  
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz