Hi dave-in-nj, first, thanks for the reply.
Sorry, now I have the full code available. I just didn't provide 'Orbitron_Medium_20.h' and 'ani.h' because they are simply fonts.
#include "ani.h"
#include <SPI.h>
#include <TFT_eSPI.h>
#include <ArduinoJson.h>
#include <NTPClient.h>
TFT_eSPI tft = TFT_eSPI();#define TFT_GREY 0x5AEB
#define lightblue 0x01E9
#define darkred 0xA041
#define blue 0x5D9B
#include "Orbitron_Medium_20.h"
#include <WiFi.h>
#include <WiFiUdp.h>
#include <HTTPClient.h>
const int pwmFreq = 5000;
const int pwmResolution = 8;
const int pwmLedChannelTFT = 0;
const char* ssid = "xxxxxxx";
const char* password = "xxxxxxxxxxx";
String town = "xxxxxxx";
String Country = "xx";
const String endpoint = "http://api.openweathermap.org/data/2.5/weather?q=" + town + "," + Country + "&units=metric&APPID=";
const String key = "xxxxx.....";
String payload = "";
String tmp = "" ;
String hum = "" ;
StaticJsonDocument<1000> doc;
// Define o NTP Client para obter o tempo
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
// Variáveis para salvar data e hora
String formattedDate;
String dayStamp;
String timeStamp;
int backlight[5] = {10, 30, 60, 120, 220};
byte b = 1;
void setup(void) {
pinMode(0, INPUT_PULLUP);
pinMode(35, INPUT);
tft.init();
tft.setRotation(0); // rotação da tela
tft.fillScreen(TFT_BLACK); // Preenche a tela na cor preta
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextSize(1);
ledcSetup(pwmLedChannelTFT, pwmFreq, pwmResolution);
//ledcAttachPin(TFT_BL, pwmLedChannelTFT); // TFT_BL é definido na biblioteca TFT_eSPI no arquivo de configuração do usuário TTGO_T_Display.h
ledcWrite(pwmLedChannelTFT, backlight[b]);
Serial.begin(115200);
tft.print("Conectando ");
tft.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
tft.print(".");
}
tft.println("");
tft.println("WiFi conectado.");
tft.println("IP address: ");
tft.println(WiFi.localIP());
delay(3000);
tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextSize(1);
tft.fillScreen(TFT_BLACK);
tft.setSwapBytes(true);
tft.setCursor(2, 232, 1);
tft.println(WiFi.localIP());
tft.setCursor(80, 204, 1);
tft.println("BRILHO:");
tft.setCursor(80, 152, 2);
tft.println("SEG:");
tft.setTextColor(TFT_WHITE, lightblue);
tft.setCursor(4, 152, 2);
tft.println("TEMP:");
tft.setCursor(4, 192, 2);2
tft.println("UMID: ");
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setFreeFont(&Orbitron_Medium_20);
tft.setCursor(6, 82);
tft.println(town);
tft.fillRect(68, 152, 1, 74, TFT_GREY);
for (int i = 0; i < b + 1; i++)
tft.fillRect(78 + (i * 7), 216, 3, 10, blue);
// Inicializa um NTPClient para obter o tempo
timeClient.begin();
// Define o tempo de deslocamento em segundos para ajustar o seu fuso horário, por exemplo:
// GMT +1 = 3600
// GMT +8 = 28800
// GMT -1 = -3600
// GMT 0 = 0
timeClient.setTimeOffset(-10800);
getData();
delay(500);
}
int i = 0;
String tt = "";
int count = 0;
bool inv = 1;
int press1 = 0;
int press2 = 0;
int frame = 0;
String curSeconds = "";
void loop() {
tft.pushImage(0, 88, 135, 65, ani[frame]);
frame++;
if (frame >= 10)
frame = 0;
if (digitalRead(35) == 0) {
if (press2 == 0)
{ press2 = 1;
tft.fillRect(78, 216, 44, 12, TFT_BLACK);
b++;
if (b >= 5)
b = 0;
for (int i = 0; i < b + 1; i++)
tft.fillRect(78 + (i * 7), 216, 3, 10, blue);
ledcWrite(pwmLedChannelTFT, backlight[b]);
}
} else press2 = 0;
if (digitalRead(0) == 0) {
if (press1 == 0)
{ press1 = 1;
inv = !inv;
tft.invertDisplay(inv);
}
} else press1 = 0;
if (count == 0)
getData();
count++;
if (count > 2000)
count = 0;
tft.setFreeFont(&Orbitron_Medium_20);
tft.setCursor(2, 187);
tft.println(tmp.substring(0, 3));
tft.setCursor(2, 227);
tft.println(hum + "%");
tft.setTextColor(TFT_ORANGE, TFT_BLACK);
tft.setTextFont(2);
tft.setCursor(6, 44);
tft.println(dayStamp);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
while (!timeClient.update()) {
timeClient.forceUpdate();
}
// A Data vem com o seguinte formato:
// 2018-05-28T16:00:13Z
// Nós necessitamos extrair data e hora
formattedDate = timeClient.getFormattedDate();
Serial.println(formattedDate);
int splitT = formattedDate.indexOf("T");
dayStamp = formattedDate.substring(0, splitT);
timeStamp = formattedDate.substring(splitT + 1, formattedDate.length() - 1);
if (curSeconds != timeStamp.substring(6, 8)) {
tft.fillRect(78, 170, 48, 28, darkred);
tft.setFreeFont(&Orbitron_Light_24);
tft.setCursor(81, 192);
tft.println(timeStamp.substring(6, 8));
curSeconds = timeStamp.substring(6, 8);
}
tft.setFreeFont(&Orbitron_Light_32);
String current = timeStamp.substring(0, 5);
if (current != tt)
{
tft.fillRect(3, 8, 120, 30, TFT_BLACK);
tft.setCursor(5, 34);
tft.println(timeStamp.substring(0, 5));
tt = timeStamp.substring(0, 5);
}
delay(80);
}
void getData()
{
tft.fillRect(1, 170, 64, 20, TFT_BLACK);
tft.fillRect(1, 210, 64, 20, TFT_BLACK);
if ((WiFi.status() == WL_CONNECTED)) {
HTTPClient http;
http.begin(endpoint + key);
int httpCode = http.GET();
if (httpCode > 0) {
payload = http.getString();
// Serial.println(httpCode);
Serial.println(payload);
}
else {
Serial.println("Error on HTTP request");
}
http.end();
}
char inp[1000];
payload.toCharArray(inp, 1000);
deserializeJson(doc, inp);
String tmp2 = doc["main"]["temp"];
String hum2 = doc["main"]["humidity"];
String town2 = doc["name"];
tmp = tmp2;
hum = hum2;
Serial.println("Temperature" + String(tmp));
Serial.println("Humidity" + hum);
Serial.println(town);
}