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/12/01 07:39] – kz | personas:johnny:proyectos:indoor_diy_autosostenible [2020/03/15 18:05] – kz | ||
---|---|---|---|
Línea 553: | Línea 553: | ||
- 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 | ||
- | |||
- | |||
- | < | ||
- | /* Library used | ||
- | * https:// | ||
- | * https:// | ||
- | * https:// | ||
- | | ||
- | * resources from sensor | ||
- | * 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; | ||
- | */ | ||
- | |||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #include < | ||
- | #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 | ||
- | |||
- | #define lights D1 | ||
- | char stateLights = ' | ||
- | |||
- | // config NTP variables | ||
- | int time_hours = 0; | ||
- | int time_minutes = 0; | ||
- | int time_seconds = 0; | ||
- | const int *ntp_hours, *ntp_minutes, | ||
- | const long utcOffsetInSeconds = -18000; // colombia UTC -5 | ||
- | char daysOfTheWeek[7][12] = { | ||
- | " | ||
- | }; | ||
- | |||
- | const char *ssid = " | ||
- | const char *pass = " | ||
- | |||
- | // Define NTP client to get time | ||
- | WiFiUDP ntpUDP; | ||
- | NTPClient timeClient(ntpUDP, | ||
- | |||
- | // config display | ||
- | Adafruit_SSD1306 display(OLED_MOSI, | ||
- | #if (SSD1306_LCDHEIGHT != 64) | ||
- | //# | ||
- | #endif | ||
- | |||
- | // define template function | ||
- | void firstSync(); | ||
- | void syncNtptoTime(); | ||
- | void stateVegetative(); | ||
- | void stateFlowering(); | ||
- | |||
- | void setup() { | ||
- | // display | ||
- | Serial.begin(115200); | ||
- | setTime(time_hours, | ||
- | WiFi.begin(ssid, | ||
- | display.begin(SSD1306_SWITCHCAPVCC); | ||
- | display.clearDisplay(); | ||
- | Serial.println(); | ||
- | Serial.println(); | ||
- | delay(1000); | ||
- | display.setTextSize(1); | ||
- | display.setTextColor(WHITE); | ||
- | display.setCursor(0, | ||
- | display.println(" | ||
- | display.display(); | ||
- | delay(1000); | ||
- | while (WiFi.status() != WL_CONNECTED) { | ||
- | delay(500); | ||
- | display.clearDisplay(); | ||
- | display.setTextSize(1); | ||
- | display.setCursor(0, | ||
- | display.setTextColor(BLACK, | ||
- | display.println(" | ||
- | display.print(" | ||
- | display.display(); | ||
- | } | ||
- | display.clearDisplay(); | ||
- | display.setTextSize(1); | ||
- | display.setCursor(0, | ||
- | display.setTextColor(WHITE); | ||
- | display.println(" | ||
- | display.println(WiFi.localIP()); | ||
- | display.display(); | ||
- | timeClient.begin(); | ||
- | delay(5000); | ||
- | display.clearDisplay(); | ||
- | display.setTextSize(1); | ||
- | display.setTextColor(WHITE); | ||
- | display.setCursor(0, | ||
- | display.println(" | ||
- | display.display(); | ||
- | firstSync(); | ||
- | delay(5000); | ||
- | // | ||
- | // | ||
- | pinMode(lights, | ||
- | } | ||
- | |||
- | void loop() { | ||
- | display.clearDisplay(); | ||
- | display.setTextSize(0.5); | ||
- | display.setTextColor(WHITE); | ||
- | display.setCursor(0, | ||
- | display.print(daysOfTheWeek[timeClient.getDay()]); | ||
- | if (stateLights == ' | ||
- | display.print(" | ||
- | } else { | ||
- | display.print(" | ||
- | } | ||
- | display.println(); | ||
- | display.setCursor(0, | ||
- | // time library | ||
- | display.print(" | ||
- | display.print(hour()); | ||
- | display.print(":" | ||
- | display.print(minute()); | ||
- | display.print(":" | ||
- | display.print(second()); | ||
- | |||
- | // time ntp | ||
- | display.setCursor(0, | ||
- | display.print(" | ||
- | display.print(*ntp_hours); | ||
- | display.print(":" | ||
- | display.print(*ntp_minutes); | ||
- | display.print(":" | ||
- | display.print(*ntp_seconds); | ||
- | |||
- | // state lights | ||
- | display.setCursor(0, | ||
- | |||
- | syncNtptoTime(); | ||
- | // stateFlowering(); | ||
- | stateVegetative(); | ||
- | |||
- | // update display | ||
- | display.display(); | ||
- | delay(1000); | ||
- | } | ||
- | |||
- | void firstSync() { | ||
- | // pointer update with what is in ntp | ||
- | 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(); | ||
- | } | ||
- | |||
- | void syncNtptoTime() { | ||
- | // 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(); | ||
- | // TODO: how to update days, month and year ? | ||
- | setTime(*ntp_hours, | ||
- | 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, | ||
- | stateLights = ' | ||
- | } else { | ||
- | digitalWrite(lights, | ||
- | stateLights = ' | ||
- | } | ||
- | } | ||
- | |||
- | 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, | ||
- | stateLights = ' | ||
- | } else { | ||
- | digitalWrite(lights, | ||
- | stateLights = ' | ||
- | } | ||
- | } | ||
- | |||
- | </ | ||
- | |||
- | |||
- | |||
personas/johnny/proyectos/indoor_diy_autosostenible.txt · Última modificación: 2020/08/13 06:00 por kz