#include <WiFi.h>
#include<HTTPClient.h>
#include<LiquidCrystal.h>
#define bot 2
LiquidCrystal lcd(23, 22, 12, 14, 27, 26);
const char *ssid = "Wokwi-GUEST";
const char *password = "";
const String API_key = "c8d65027780ad5ea4bc10e8d452f2c95";
const String city = "Sorocaba";
String url =
"http://api.openweathermap.org/data/2.5/weather?q="+city+"&appid="+API_key+"&units=metric";
void setup() {
pinMode (bot, INPUT);
Serial.begin(9600);
lcd.begin(16,2);
WiFi.begin(ssid, password);
pinMode(15, OUTPUT);
Serial.println("Estabelecendo conexão");
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
}
Serial.println("Rede Conectada!");
}
void loop() {
if (WiFi.status() == WL_CONNECTED){
digitalWrite(15, HIGH);
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
int estado = digitalRead(bot);
if(estado == HIGH){
if(httpCode == HTTP_CODE_OK){
String resposta = http.getString();
Serial.println(resposta);
char *ptr = strstr((const char *)resposta.c_str(), "name"); //procura "name" no código json e retorna o restante do código
String cidade = &ptr[7]; // 7 é a quantidade de caracter que necessita para chegar ao nome da cidade [name":“cidade","cod":200}]
Serial.print(cidade); //cidade","cod":200}
cidade.replace('"', '\0'); //Substitui as aspas duplas por '\0'
ptr = strstr((const char *)resposta.c_str(), "temp"); // procura "temp“ e retorna o restante do código
Serial.print(ptr); //temp":28.79,"feels_like":28.48,"temp_min":28
String temperatura = &ptr[6]; //conta-se até chegar ao caracter que necessita
temperatura.replace(',', '\0'); //Substitui as aspas duplas por '\0'
lcd.clear(); //Limpa o lcd
lcd.setCursor(0,0); //posiciona o cursor para o primeiro caracter na primeira linha
lcd.print(cidade.c_str()); //Escreve o nome da cidade
lcd.setCursor(0,1);//posiciona o cursor para o primeiro caracter na segunda linha
lcd.print(temperatura.c_str()); //Escreve o valor da temperatura
lcd.print("\xDF""C");
}
else{
digitalWrite(15, LOW);
WiFi.begin(ssid, password);
Serial.println("Reestabelecendo a conexão...");
while(WiFi.status() != WL_CONNECTED){
delay(500);
}
}
}
if(estado == LOW) {
if(httpCode == HTTP_CODE_OK){
String resposta = http.getString();
Serial.println(resposta);
char *ptr = strstr((const char *)resposta.c_str(), "name"); //procura "name" no código json e retorna o restante do código
String cidade = &ptr[7]; // 7 é a quantidade de caracter que necessita para chegar ao nome da cidade [name":“cidade","cod":200}]
Serial.print(cidade); //cidade","cod":200}
cidade.replace('"', '\0'); //Substitui as aspas duplas por '\0'
ptr = strstr((const char *)resposta.c_str(), "humidity"); // procura "humidity“ e retorna o restante do código
Serial.print(ptr); //temp":28.79,"feels_like":28.48,"temp_min":28
String humidade = &ptr[10]; //conta-se até chegar ao caracter que necessita
humidade.replace(',', '\0'); //Substitui as aspas duplas por '\0'
lcd.clear(); //Limpa o lcd
lcd.setCursor(0,0); //posiciona o cursor para o primeiro caracter na primeira linha
lcd.print(cidade.c_str()); //Escreve o nome da cidade
lcd.setCursor(0,1);//posiciona o cursor para o primeiro caracter na segunda linha
lcd.print(humidade.c_str()); //Escreve o valor da temperatura
lcd.print("%");
}
else{
digitalWrite(15, LOW);
WiFi.begin(ssid, password);
Serial.println("Reestabelecendo a conexão...");
while(WiFi.status() != WL_CONNECTED){
delay(500);
}
}
}
}
delay(10000); //Atualiza os códigos a cada 10 segundo
}