personas:johnny:proyectos:indoor_diy_autosostenible
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previaPróxima revisiónAmbos lados, revisión siguiente | ||
personas:johnny:proyectos:indoor_diy_autosostenible [2019/11/03 13:46] – kz | personas:johnny:proyectos:indoor_diy_autosostenible [2019/12/01 07:39] – kz | ||
---|---|---|---|
Línea 524: | Línea 524: | ||
{{: | {{: | ||
- | Tareas que faltan por hacer!!! | + | [[https:// |
- | - Í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-) **time.h** (integrar esa parte que necesito de upayakuwasi y las alarmas) | ||
+ | ====== Actualización nov 9 2019 ====== | ||
- | < | + | Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc. |
- | /* Librerias usadas | + | |
+ | === Los datos se puede ver en:=== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ====== 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, | ||
+ | - 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 | ||
+ | |||
+ | |||
+ | < | ||
+ | /* Library used | ||
* https:// | * https:// | ||
* https:// | * https:// | ||
* https:// | * https:// | ||
| | ||
- | | + | |
* https:// | * https:// | ||
+ | | ||
+ | config NTP | ||
+ | this code take the time from server using NTP | ||
+ | https:// | ||
+ | |||
+ | !!! IMPORTANT | ||
+ | You need to adjust the UTC offset for your timezone in milliseconds. | ||
+ | Refer the list of UTC time offsets. | ||
+ | https:// | ||
+ | |||
+ | 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; | ||
*/ | */ | ||
- | // import libraries | + | #include < |
+ | #include < | ||
#include < | #include < | ||
- | #include < | ||
#include < | #include < | ||
#include < | #include < | ||
Línea 548: | Línea 587: | ||
#include < | #include < | ||
#include < | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | // 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 | ||
- | // defines and variables globals sensors | + | # |
- | // dth11 | + | char stateLights = ' |
- | # | + | |
- | #define DHTTYPE DHT11 | + | |
- | // screen oled | + | // config NTP variables |
- | #define OLED_MOSI 14 // D5 | + | int time_hours = 0; |
- | #define OLED_CLK 16 // D0 | + | int time_minutes = 0; |
- | #define OLED_DC 13 | + | int time_seconds = 0; |
- | #define OLED_RESET | + | const int *ntp_hours, *ntp_minutes, |
- | #define OLED_CS 15 // D8 | + | const long utcOffsetInSeconds = -18000; |
+ | char daysOfTheWeek[7][12] = { | ||
+ | " | ||
+ | }; | ||
- | #define HTTP_TIMEOUT 1000 * 60 // cada minuto | + | const char *ssid = " |
+ | const char *pass = " | ||
- | // lights- relay IN4 | + | // Define NTP client to get time |
- | int lights = D4; | + | WiFiUDP ntpUDP; |
- | + | NTPClient timeClient(ntpUDP, | |
- | // ventilador - relay IN3 | + | |
- | int air = D3; | + | |
- | + | ||
- | // capacitive sensor | + | |
- | const int airValue = 823; | + | |
- | const int waterValue = 464; | + | |
- | const float intervals = 68.33; // (airvalur - watervalue)/3 | + | |
- | int soilMoistureValue = 0; | + | |
+ | // config display | ||
Adafruit_SSD1306 display(OLED_MOSI, | Adafruit_SSD1306 display(OLED_MOSI, | ||
- | |||
#if (SSD1306_LCDHEIGHT != 64) | #if (SSD1306_LCDHEIGHT != 64) | ||
//# | //# | ||
#endif | #endif | ||
- | DHT dht(DHTPIN, DHTTYPE); | + | // define template function |
+ | void firstSync(); | ||
+ | void syncNtptoTime(); | ||
+ | void stateVegetative(); | ||
+ | void stateFlowering(); | ||
void setup() { | void setup() { | ||
+ | // display | ||
Serial.begin(115200); | Serial.begin(115200); | ||
- | | + | setTime(time_hours, |
- | display.clearDisplay(); | + | WiFi.begin(ssid, pass); |
- | | + | display.begin(SSD1306_SWITCHCAPVCC); |
- | + | display.clearDisplay(); | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0,0); | + | |
Serial.println(); | Serial.println(); | ||
Serial.println(); | Serial.println(); | ||
- | + | delay(1000); | |
- | | + | |
- | | + | display.setTextColor(WHITE); |
- | | + | display.setCursor(0,10); |
- | | + | display.println(" |
+ | display.display(); | ||
+ | delay(1000); | ||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | | ||
+ | display.clearDisplay(); | ||
+ | display.setTextSize(1); | ||
+ | display.setCursor(0, | ||
+ | display.setTextColor(BLACK, WHITE); | ||
+ | | ||
+ | | ||
+ | display.display(); | ||
} | } | ||
- | + | display.clearDisplay(); | |
- | display.setTextColor(WHITE); | + | display.setTextSize(1); |
- | display.setCursor(0, | + | display.setCursor(0, |
- | display.println(" | + | display.setTextColor(WHITE); |
- | display.display(); // Actualiza | + | display.println(" |
- | delay(3000); | + | display.println(WiFi.localIP()); |
- | + | | |
- | | + | timeClient.begin(); |
+ | delay(5000); | ||
+ | | ||
+ | | ||
+ | display.setTextColor(WHITE); | ||
+ | display.setCursor(0,10); | ||
+ | display.println(" | ||
+ | display.display(); | ||
+ | firstSync(); | ||
+ | delay(5000); | ||
+ | // | ||
+ | // | ||
pinMode(lights, | pinMode(lights, | ||
- | pinMode(air, | ||
- | dht.begin(); | ||
} | } | ||
void loop() { | void loop() { | ||
- | display.clearDisplay(); | + | display.clearDisplay(); |
- | display.setTextSize(0.5); | + | display.setTextSize(0.5); |
- | display.setTextColor(WHITE); | + | display.setTextColor(WHITE); |
- | display.setCursor(0, | + | display.setCursor(0, |
- | display.print(" | + | display.print(daysOfTheWeek[timeClient.getDay()]); |
+ | if (stateLights == ' | ||
+ | display.print(" | ||
+ | | ||
+ | | ||
+ | } | ||
+ | display.println(); | ||
+ | display.setCursor(0, | ||
+ | // time library | ||
+ | display.print(" | ||
display.print(hour()); | display.print(hour()); | ||
display.print(":" | display.print(":" | ||
Línea 625: | Línea 699: | ||
display.print(":" | display.print(":" | ||
display.print(second()); | display.print(second()); | ||
- | display.print(" | + | |
- | display.setCursor(0, | + | // time ntp |
- | | + | |
- | // display alarms lights state | + | |
- | lucesFloracion(); | + | |
- | + | ||
- | // display capacitive himudity | + | |
display.setCursor(0, | display.setCursor(0, | ||
- | | + | |
- | | + | |
- | display.print(" | + | display.print(":" |
- | display.println(soilMoistureValue); | + | display.print(*ntp_minutes); |
- | delay(500); | + | display.print(":" |
- | | + | display.print(*ntp_seconds); |
- | | + | |
- | display.println(soilMoistureValue); | + | |
- | delay(500); | + | |
- | } | + | |
- | // display dht sensor | + | // state lights |
- | display.setCursor(0, | + | display.setCursor(0, |
- | int h = dht.readHumidity(); | + | |
- | int t = dht.readTemperature(); | + | |
- | // Check if any reads failed and exit early (to try again). | + | |
- | if (isnan(h) || isnan(t)) { | + | |
- | display.println(F(" | + | |
- | return; | + | |
- | } | + | |
- | | + | |
- | | + | |
- | display.print(F(" | + | |
- | display.print(t); | + | |
- | display.print(F(" | + | |
- | | + | |
- | | + | |
+ | display.display(); | ||
+ | delay(1000); | ||
+ | } | ||
- | | + | void firstSync() { |
+ | | ||
+ | timeClient.update(); | ||
+ | ntp_hours = & | ||
+ | ntp_minutes = & | ||
+ | ntp_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, | ||
+ | timeClient.end(); | ||
+ | } | ||
- | display.display(); // Actualiza display con datos en Buffer | + | void syncNtptoTime() { |
- | delay(1000); | + | // update local time from NTP server over get minutes and seconds |
+ | // from local time hardware | ||
+ | if ( (minute() == 10 && second() == 58) || | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ) { | ||
+ | timeClient.update(); | ||
+ | time_hours = timeClient.getHours(); | ||
+ | time_minutes = timeClient.getMinutes(); | ||
+ | time_seconds = timeClient.getSeconds(); | ||
+ | timeClient.end(); | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
} | } | ||
- | void lucesVegetativo() { | + | void stateVegetative() { |
- | // 18 horas luz, 6 horas oscuridad | + | // 18 hours lights, 6 hours night |
- | // se prenden a las 6 de la mañana y se apagan a las 12 de la noche | + | // they turn on 6 in the morning and turn off at the 12 last night |
if ( hour() < 6 ) { | if ( hour() < 6 ) { | ||
digitalWrite(lights, | digitalWrite(lights, | ||
- | | + | |
} else { | } else { | ||
digitalWrite(lights, | digitalWrite(lights, | ||
- | | + | |
} | } | ||
} | } | ||
- | void lucesFloracion() { | + | void stateFlowering() { |
- | // 12 horas luz, 12 horas oscuridad | + | // 12 hours lights, 12 hours night |
// a las 6 de la mañana se prenden y a las 6 de la tarde se apagan | // a las 6 de la mañana se prenden y a las 6 de la tarde se apagan | ||
if ( (hour() >= 6) && (hour() < 18) ) { | if ( (hour() >= 6) && (hour() < 18) ) { | ||
digitalWrite(lights, | digitalWrite(lights, | ||
- | | + | |
} else { | } else { | ||
digitalWrite(lights, | digitalWrite(lights, | ||
- | | + | |
} | } | ||
} | } | ||
- | void ventilacion() { | ||
- | if ( (minute() == 0) || (minute() == 15) || (minute() == 45) || (minute() == 30) ) { | ||
- | digitalWrite(air, | ||
- | } else { | ||
- | digitalWrite(air, | ||
- | } | ||
- | } | ||
</ | </ | ||
- | |||
- | |||
- | |||
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz