//Configuração dos pinos
#include <WiFi.h>
#include<HTTPClient.h>
#include<LiquidCrystal.h>
#define bot 2
//Configuração do LCD
LiquidCrystal lcd(23, 22, 12, 14, 27, 26);
//Configuração de conexão a internet
const char *ssid = "Wokwi-GUEST";
const char *password = "";
//Configuração das duas chaves de API
const String API_key1 = "c8d65027780ad5ea4bc10e8d452f2c95";
const String API_key2 = "b9ac124778e4f468b8a76b5449a08f6a";
//Configuração das duas cidades
const String city1 = "Sorocaba";
const String city2 = "Piedade";
//Configuração dos dois URLs
String url1 =
"http://api.openweathermap.org/data/2.5/weather?q="+city1+"&appid="+API_key1+"&units=metric";
String url2 =
"http://api.openweathermap.org/data/2.5/weather?q="+city2+"&appid="+API_key2+"&units=metric";
void setup() {
//Configuração dos pinos, monitor serial e print de mensagem quando há conexão
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() {
//Se o wifi estiver conectado, liga o LED e inicia as duas variáeis de url
if (WiFi.status() == WL_CONNECTED){
digitalWrite(15, HIGH);
HTTPClient http1;
http1.begin(url1);
int httpCode1 = http1.GET();
HTTPClient http2;
http2.begin(url2);
int httpCode2 = http2.GET();
int estado = digitalRead(bot);
//Estado "1" da chave
if(estado == HIGH){
if(httpCode1 == HTTP_CODE_OK){
//Imprime a resposta e capta a temperatura
String resposta1 = http1.getString();
Serial.println(resposta1);
char *ptr1 = strstr((const char *)resposta1.c_str(), "name"); //procura "name" no código json e retorna o restante do código
String cidade1 = &ptr1[7]; // 7 é a quantidade de caracter que necessita para chegar ao nome da cidade [name":“cidade","cod":200}]
Serial.print(cidade1); //cidade","cod":200}
cidade1.replace('"', '\0'); //Substitui as aspas duplas por '\0'
ptr1 = strstr((const char *)resposta1.c_str(), "temp"); // procura "temp“ e retorna o restante do código
Serial.print(ptr1); //temp":28.79,"feels_like":28.48,"temp_min":28
String temperatura1 = &ptr1[6]; //conta-se até chegar ao caracter que necessita
temperatura1.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(cidade1.c_str()); //Escreve o nome da cidade
lcd.setCursor(0,1);//posiciona o cursor para o primeiro caracter na segunda linha
lcd.print(temperatura1.c_str()); //Escreve o valor da temperatura
lcd.print("\xDF""C"); //escreve °C no final da mensagem
delay(10000);//delay para mostrar a outra informação
//Imprime a resposta e capta a umidade
ptr1 = strstr((const char *)resposta1.c_str(), "humidity"); // procura "humidity“ e retorna o restante do código
Serial.print(ptr1); //temp":28.79,"feels_like":28.48,"temp_min":28
String humidade1 = &ptr1[10]; //conta-se até chegar ao caracter que necessita
humidade1.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(cidade1.c_str()); //Escreve o nome da cidade
lcd.setCursor(0,1);//posiciona o cursor para o primeiro caracter na segunda linha
lcd.print(humidade1.c_str()); //Escreve o valor da temperatura
lcd.print("%"); //Escreve % no final da mensagem
}
//Se a conexão cair
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(httpCode2 == HTTP_CODE_OK){
//Imprime a resposta e capta a temperatura
String resposta2 = http2.getString();
Serial.println(resposta2);
char *ptr2 = strstr((const char *)resposta2.c_str(), "name"); //procura "name" no código json e retorna o restante do código
String cidade2 = &ptr2[7]; // 7 é a quantidade de caracter que necessita para chegar ao nome da cidade [name":“cidade","cod":200}]
Serial.print(cidade2); //cidade","cod":200}
cidade2.replace('"', '\0'); //Substitui as aspas duplas por '\0'
ptr2 = strstr((const char *)resposta2.c_str(), "temp"); // procura "temp“ e retorna o restante do código
Serial.print(ptr2); //temp":28.79,"feels_like":28.48,"temp_min":28
String temperatura2 = &ptr2[6]; //conta-se até chegar ao caracter que necessita
temperatura2.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(cidade2.c_str()); //Escreve o nome da cidade
lcd.setCursor(0,1);//posiciona o cursor para o primeiro caracter na segunda linha
lcd.print(temperatura2.c_str()); //Escreve o valor da temperatura
lcd.print("\xDF""C"); //Escreve °C no final da mensagem
delay (10000);//delay para mostrar a outra informação
//Imprime novamente a resposta e capta a umidade
ptr2 = strstr((const char *)resposta2.c_str(), "humidity"); // procura "humidity“ e retorna o restante do código
Serial.print(ptr2); //temp":28.79,"feels_like":28.48,"temp_min":28
String humidade2 = &ptr2[10]; //conta-se até chegar ao caracter que necessita
humidade2.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(cidade2.c_str()); //Escreve o nome da cidade
lcd.setCursor(0,1);//posiciona o cursor para o primeiro caracter na segunda linha
lcd.print(humidade2.c_str()); //Escreve o valor da temperatura
lcd.print("%"); //Escreve % no final da mensagem
}
//Se a conexão cair
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 segundos
}