#include <WiFi.h>
#include <HTTPClient.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ArduinoJson.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
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);
// Display static text
display.println("Xin chao");
display.display();
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("https://api.openweathermap.org/data/2.5/weather?q=Vinh Long&appid=3b1673e537b457895cc3fa1401869fef");
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
// Serial.println(httpCode);
// Serial.println(payload);
// Phân tích dữ liệu JSON
const size_t capacity = JSON_OBJECT_SIZE(10) + JSON_ARRAY_SIZE(2) + 300; // Chọn kích thước tùy thuộc vào cấu trúc dữ liệu
DynamicJsonDocument doc(capacity);
deserializeJson(doc, payload);
float temperature = doc["main"]["temp"].as<float>() - 273.15; // chuyển từ Kelvin sang Celsius
float humidity = doc["main"]["humidity"].as<float>();
display.clearDisplay();
display.setCursor(0, 1);
display.print("Temperature: ");
display.print(temperature);
display.println(" °C");
display.setCursor(0, 10);
display.print("Humidity: ");
display.print(humidity);
display.println(" %");
display.display();
http.end();
} else {
Serial.println("Error on HTTP request");
http.end();
}
}
delay(10000);
}Loading
ssd1306
ssd1306