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:40] – kz | ||
---|---|---|---|
Línea 524: | Línea 524: | ||
{{: | {{: | ||
- | Tareas que faltan por hacer!!! | + | [[https:// |
- | | + | |
- | - integrar una web en la flash para programar la fecha del rtc digital | + | ====== Actualización nov 9 2019 ====== |
+ | |||
+ | Hasta ahora la libreria time.h a funcionado muy bien, reemplazandome por completo un rtc. | ||
+ | |||
+ | === 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 | ||
+ | |||
+ | *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 | ||
<code c++> | <code c++> | ||
- | /* Librerias usadas | + | /* 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