#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
void setup() {
lcd.init();
lcd.clear();
lcd.backlight(); // Make sure backlight is on
// Print a message on both lines of the LCD.
//Set cursor to character 2 on line 0
// put your setup code here, to run once:
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nConnected to the Wifi network");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// put your main code here, to run repeatedly:
if ((WiFi.status() == WL_CONNECTED)) {
long rnd = random(1, 10);
HTTPClient client;
// client.begin("https://api.thingspeak.com/apps/thinghttp/send_request?api_key=J2FE0FOZ2WM7UR9T");
client.begin("https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/Rajshahi%2CBangladesh/today?unitGroup=metric&elements=datetime%2Caddress%2Ctemp&include=current&key=XWALKZUN7TENQEHHNV33EPXDP&contentType=json");
int httpCode = client.GET();
if (httpCode > 0) {
String payload = client.getString();
Serial.println("\nStatuscode: " + String(httpCode));
//Serial.println(payload);
//decoding nested jason
//full day value
int start = payload.indexOf("{\"datetime\":");
int end = payload.indexOf("],");
String dayvalues = payload.substring(start, end);
// Serial.println(dayvalues);
// Serial.println(start);
// Serial.println(end);
// taking jason variables
StaticJsonDocument<1024> doc;
StaticJsonDocument<1024> doc2;
StaticJsonDocument<1024> doc3;
//current condition
int start1 = payload.indexOf("\"currentConditions\":");
int end1 = payload.indexOf("}}");
String currentconditions = payload.substring(start1 + 20);
int lenght = currentconditions.length();
currentconditions.remove(lenght - 1, 1);
// Serial.println(currentconditions);
// Serial.println(start1 + 20);
// Serial.println(end1);
// Serial.println(lenght);
//deserializinf json
DeserializationError error = deserializeJson(doc, payload);
DeserializationError error2 = deserializeJson(doc2, dayvalues);
DeserializationError error3 = deserializeJson(doc3, currentconditions);
// listing data
double latitude = doc["latitude"];
double longitude = doc["longitude"];
String address = doc["address"];
String datetime = doc2["datetime"];
float temp = doc2["temp"];
String currentDatetime = doc3["datetime"];
float currentTemp = doc3["temp"];
Serial.print("Address: ");
Serial.println(address);
Serial.print("Date: ");
Serial.println(datetime);
Serial.print("Time: ");
Serial.println(currentDatetime);
Serial.print("Average Temperature: ");
Serial.println(temp);
Serial.print("Current Temperature: ");
Serial.println(currentTemp);
//lcd print
lcd.setCursor(0, 0);
lcd.print(address);
lcd.setCursor(0, 1);
for(;;)
{
lcd.scrollDisplayLeft();
delay(400);
}
lcd.print("Temperature:");
lcd.setCursor(13,1);
lcd.print(currentTemp);
// Test if parsing succeeds.
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
//start listing the data
} else {
Serial.println("Connection lost");
}
} else {
Serial.println("Conection lost");
}
delay(10000);
}