#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ArduinoJson.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
HTTPClient http;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
Serial.begin(115200);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
}
void loop() {
if ((WiFi.status() == WL_CONNECTED)) {
HTTPClient http;
http.begin("https://api.openweathermap.org/data/2.5/weather?id=1562693&appid=83f609f43532fb74956aa06f8f10bac3");
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
// Parse JSON
DynamicJsonDocument doc(1024); // Adjust the size depending on your payload
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.f_str());
return;
}
// Extract temperature
JsonObject main = doc["main"];
float temp = main["temp"];
temp -= 273.15; // Convert from Kelvin to Celsius
// Display temperature on OLED screen
display.clearDisplay();
display.setCursor(0, 0);
display.println("Temperature: ");
display.print(temp);
display.println(" do C");
display.display();
}
else {
Serial.println("Error on HTTP request");
}
http.end();
}
delay(1000);
}Loading
ssd1306
ssd1306