Ciao a tutti. Ho bisogno del vostro aiuto. Stampando la temperatura sul display, ho necessità di azzerare il dato della massima e della minima alle 23.59. Tempo fa mi aiutaste a farlo con l'orario dato da un orologio RTC, questa volta ho bisogno di resettarlo con NTP. Lo sketch, come al mio solito, è un insieme di sketch.
Ho provato inserendo questo al termine dello sketch...:
void Data() {
tm* p_tm = localtime;
if ( tm_hour == 23 && tm_min == 58 && tm_sec <= 10 ) {
massima = -9;
minima = 99;
}
...ma non ha funzionato.
Riporto il codice qui di seguito e spero in un vostro aiuto. Grazie a tutti.
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>
#include <time.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHTesp.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
char auth[] = "TOKEN BLYNK";
const char* ssid = "Mio WIFI";
const char* password = "PASSWORD WIFI";
int timezone = 1 * 60 * 60;
int dst = 0;
BlynkTimer timer;
struct dataStruct2 {
float t5;
float h5;
} terrazzo_data;
DHTesp dht;
int massima = -9;
int minima = 99;
void readSensorsendSensor()
{
Blynk.virtualWrite(V13, terrazzo_data.t5);
Blynk.virtualWrite(V14, terrazzo_data.h5);
}
void setup() {
Serial.begin(115200);
dht.setup(D3, DHTesp::DHT22);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Wifi connecting to ");
display.println( ssid );
WiFi.begin(ssid, password);
display.println("\nConnecting");
display.display();
while ( WiFi.status() != WL_CONNECTED ) {
delay(500);
display.print(".");
display.display();}
// Clear the buffer.
display.clearDisplay();
display.display();
display.setCursor(0, 0);
display.println("Wifi Connected!");
display.print("IP:");
display.println(WiFi.localIP() );
display.display();
configTime(timezone, dst, "pool.ntp.org", "time.nist.gov");
display.println("\nWaiting for NTP...");
while (!time(nullptr)) {
Serial.print("*");
delay(1000);}
display.println("\nTime response....OK");
display.display();
delay(1000);
display.clearDisplay();
display.display();
Blynk.begin(auth, ssid, password);
timer.setInterval(6000L, readSensorsendSensor);
}
void loop() {
time_t now = time(nullptr);
struct tm* p_tm = localtime(&now);
Serial.print(p_tm->tm_mday);
Serial.print("/");
Serial.print(p_tm->tm_mon + 1);
Serial.print("/");
Serial.print(p_tm->tm_year + 1900);
Serial.print(" ");
Serial.print(p_tm->tm_hour);
Serial.print(":");
Serial.print(p_tm->tm_min);
Serial.print(":");
Serial.println(p_tm->tm_sec);
Serial.print(terrazzo_data.t5, 1);
Serial.print(" ");
Serial.print("°C");
Serial.print(" ");
Serial.println(terrazzo_data.h5, 1);
Serial.print(" ");
Serial.print("%");
delay(2000);
// Clear the buffer.
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(30, 0);
display.print(p_tm->tm_hour);
display.print(":");
if ( p_tm->tm_min < 10)
display.print("0");
display.print(p_tm->tm_min);
// display temperature
display.setTextSize(3);
display.setCursor(6,20);
display.print(terrazzo_data.t5, 0);
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
// display humidity
display.setTextSize(3);
display.setCursor(70, 20);
display.print(terrazzo_data.h5, 0);
display.setTextSize(2);
display.print("%");
//minima e massima
display.setTextSize(1);
display.setCursor(20, 50);
display.print("min ");
display.setTextSize(1);
display.print(minima);
display.setTextSize(1);
display.setCursor(70, 50);
display.print("max ");
display.setTextSize(1);
display.print(massima);
display.display();
terrazzo_data.h5 = dht.getHumidity();
terrazzo_data.t5 = dht.getTemperature();
if (massima < terrazzo_data.t5)
{massima = terrazzo_data.t5;}
if (minima > terrazzo_data.t5)
{minima = terrazzo_data.t5;}
timer.run();
Blynk.run();
delay(5000);
}