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/13 03:15] – kz | personas:johnny:proyectos:indoor_diy_autosostenible [2020/03/15 18:05] – kz | ||
---|---|---|---|
Línea 524: | Línea 524: | ||
{{: | {{: | ||
- | <code c++> | + | [[https://gist.github.com/ |
- | /* Librerias usadas | + | |
- | | + | |
- | * https://github.com/PaulStoffregen/TimeAlarms | + | |
- | * https:// | + | |
- | * | + | |
- | * Recursos | + | |
- | * https:// | + | |
- | */ | + | |
- | + | ||
- | // import libraries | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | #include < | + | |
- | + | ||
- | // 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, | + | |
- | 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, | + | |
- | Serial.println(); | + | |
- | Serial.println(); | + | |
- | // | + | |
- | for(uint8_t t = 4; t > 0; t--) { | + | |
- | Serial.printf(" | + | |
- | Serial.flush(); | + | |
- | delay(1000); | + | |
- | } | + | |
- | // | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | + | ||
- | // casa del negro | + | |
- | // WiFi.begin(" | + | |
- | + | ||
- | while (WiFi.status() != WL_CONNECTED) { | + | |
- | delay(500); | + | |
- | display.println(" | + | |
- | display.print(" | + | |
- | } | + | |
- | + | ||
- | display.display(); | + | |
- | delay(3000); | + | |
- | // H, M, S, D, M, A | + | |
- | setTime(14, | + | |
- | pinMode(lights, | + | |
- | pinMode(air, | + | |
- | dht.begin(); | + | |
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | display.clearDisplay(); | + | |
- | display.setTextSize(0.5); | + | |
- | display.setTextColor(WHITE); | + | |
- | display.setCursor(0, | + | |
- | display.print(" | + | |
- | display.print(hour()); | + | |
- | display.print(":" | + | |
- | display.print(minute()); | + | |
- | display.print(":" | + | |
- | display.print(second()); | + | |
- | display.print(" | + | |
- | display.setCursor(0, | + | |
- | // display alarms lights state | + | |
- | lucesFloracion(); | + | |
- | // display capacitive himudity | + | |
- | display.setCursor(0, | + | |
- | soilMoistureValue = analogRead(A0); | + | |
- | display.print(" | + | |
- | display.println(soilMoistureValue); | + | |
- | delay(500); | + | |
- | // display dht sensor | + | |
- | display.setCursor(0, | + | |
- | int h = dht.readHumidity(); | + | |
- | int t = dht.readTemperature(); | + | |
- | if (isnan(h) | + | |
- | display.println(F(" | + | |
- | return; | + | |
- | } | + | |
- | display.print(F(" | + | |
- | display.print(h); | + | |
- | display.print(F(" | + | |
- | display.print(t); | + | |
- | display.print(F(" | + | |
- | display.println("" | + | |
- | // run air at inddor | + | |
- | ventilacion(); | + | |
- | display.display(); | + | |
- | sendDataInflux(String(h), | + | |
- | } | + | |
- | + | ||
- | 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(lights, | + | |
- | display.println(" | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | display.println(" | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | 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, | + | |
- | display.println(" | + | |
- | } else { | + | |
- | digitalWrite(lights, | + | |
- | display.println(" | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | void ventilacion() { | + | |
- | // se prende cada 15 min 1 min | + | |
- | if ( (minute() == 1) || (minute() == 16) || (minute() == 46) || (minute() == 31) ) { | + | |
- | digitalWrite(air, | + | |
- | } else { | + | |
- | digitalWrite(air, | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | String influxFrame( String dht11_humidity, | + | |
- | const String SENSOR_ID = " | + | |
- | const String STR_COMMA = ","; | + | |
- | const String STR_SLASH = "/"; | + | |
- | const String STR_DOT = " | + | |
- | const String STR_COLON = ":"; | + | |
- | const String STR_NULL = " | + | |
- | const String STR_ZERO = " | + | |
- | const String STR_SPACE = " "; | + | |
- | + | ||
- | // El primer dato en el squema de la DB es el id del sensor | + | |
- | String frame = SENSOR_ID + STR_COMMA + " | + | |
- | + | ||
- | // Add GPS data | + | |
- | frame += " | + | |
- | frame += " | + | |
- | frame += " | + | |
- | frame += " | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | + | ||
- | //Add DHT11 data | + | |
- | //if | + | |
- | frame += " | + | |
- | frame += dht11_humidity + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += dht11_temperature + STR_COMMA; | + | |
- | // } else { | + | |
- | // frame += " | + | |
- | // } | + | |
- | + | ||
- | // ADD capacitive sensor data | + | |
- | frame += " | + | |
- | frame += soilCapacitiveSensor + STR_COMMA; | + | |
- | + | ||
- | // Add Plantower data | + | |
- | // if | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO + STR_COMMA; | + | |
- | frame += " | + | |
- | frame += STR_ZERO; | + | |
- | // } else { | + | |
- | // frame += " | + | |
- | // } | + | |
- | + | ||
- | return frame; | + | |
- | } | + | |
- | + | ||
- | // función que envía la trama de datos | + | |
- | void sendDataInflux ( String humidity, String temperature, | + | |
- | // El post a la base de datos tiene una trama siguiente: | + | |
- | // volker0001, | + | |
- | // 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, | + | |
- | | + | |
- | HTTPClient http; | + | |
- | // _testsensorhumedad es el nombre de la DB donde se almacenan estos datos | + | |
- | http.begin(" | + | |
- | http.setTimeout(HTTP_TIMEOUT); | + | |
- | http.addHeader(" | + | |
- | + | ||
- | // esto se debe de integrar con el soil capacitive sensor | + | |
- | // String frame = influxFrame(humidity, | + | |
- | String frame = influxFrame(humidity, | + | |
- | + | ||
- | int httpCode = http.POST(frame); | + | |
- | + | ||
- | if(httpCode > 0) { | + | |
- | String payload = http.getString(); | + | |
- | Serial.println(payload); | + | |
- | Serial.println(" | + | |
- | } else { | + | |
- | Serial.print(" | + | |
- | Serial.println(http.errorToString(httpCode).c_str()); | + | |
- | } | + | |
- | | + | |
- | } | + | |
- | delay(60000); | + | |
- | } | + | |
- | </ | + | |
Línea 782: | Línea 539: | ||
Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo. | Logro adjuntar a la trama de datos la humedad en la tierra de un sensor de humedad capacitivo. | ||
+ | ====== Actualización 1 diciembre 2019 ====== | ||
- | Tareas | + | Por alguna razón con el código |
+ | 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. | ||
- | <WRAP center round alert 60%> | + | *Solución: *Se usan las librerias NTP y Time simultaneamente... en resumen |
- | En esta imlementación de POST hacia una base de datos, | + | |
- | </ | + | |
+ | *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 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. | - 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 | - 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 | - actualizar el firmware por medio de ota | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz