// Подключаем библиотеку TFT_eSPI
#include <TFT_eSPI.h>
// Создаем объект TFT_eSPI
TFT_eSPI tft = TFT_eSPI();
// Подключаем библиотеку HTTPClient
#include <HTTPClient.h>
// Создаем объект HTTPClient
HTTPClient http;
// Указываем параметры подключения к WiFi
const char* ssid = "Wokwi-GUEST"; // Имя WiFi-сети
const char* password = ""; // Пароль WiFi-сети
// Указываем API-ключ для OpenWeatherMap.org
const char* api_key = "your_api_key";
// Указываем ID города Ярославль
const char* city_id = "468902";
// Создаем переменные для хранения данных о погоде
float temperature; // Температура в градусах Цельсия
String description; // Описание погоды
String icon; // Код иконки погоды
// Создаем функцию для получения данных о погоде с OpenWeatherMap.org
void getWeatherData() {
// Формируем URL-адрес для запроса
String url = "http://api.openweathermap.org/data/2.5/weather?id=" + String(city_id) + "&appid=" + String(api_key) + "&units=metric&lang=ru";
// Начинаем запрос
http.begin(url);
// Получаем код ответа
int httpCode = http.GET();
// Проверяем, что код ответа равен 200 (успешно)
if (httpCode == 200) {
// Получаем тело ответа в виде строки
String payload = http.getString();
// Разбираем JSON-объект из строки
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
// Извлекаем данные о погоде из JSON-объекта
temperature = doc["main"]["temp"]; // Температура
description = doc["weather"][0]["description"]; // Описание
icon = doc["weather"][0]["icon"]; // Иконка
}
// Завершаем запрос
http.end();
}
// Создаем функцию для отображения данных о погоде на дисплее
void displayWeatherData() {
// Очищаем дисплей
tft.fillScreen(TFT_BLACK);
// Устанавливаем цвет и размер шрифта
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
// Выводим название города
tft.setCursor(10, 10);
tft.print("Ярославль");
// Выводим температуру
tft.setCursor(10, 40);
tft.print(temperature);
tft.print(" C");
// Выводим описание погоды
tft.setCursor(10, 70);
tft.print(description);
// Выводим иконку погоды
// TODO: добавить функцию для отображения иконки по коду
}
// Создаем функцию для инициализации дисплея
void initDisplay() {
// Инициализируем дисплей
tft.init();
// Поворачиваем дисплей на 90 градусов
tft.setRotation(1);
}
// Создаем функцию для подключения к WiFi
void connectWiFi() {
// Выводим сообщение о подключении
Serial.print("Подключение к WiFi-сети ");
Serial.println(ssid);
// Подключаемся к WiFi-сети
WiFi.begin(ssid, password);
// Ждем, пока не подключимся
while (WiFi.status() != WL_CONNECTED) {
// Выводим точку на монитор порта
Serial.print(".");
// Ждем полсекунды
delay(500);
}
// Выводим сообщение об успешном подключении
Serial.println();
Serial.println("Подключено к WiFi-сети");
Serial.println("IP-адрес: ");
Serial.println(WiFi.localIP());
}
// Функция setup, выполняется один раз при запуске
void setup() {
// Настраиваем скорость обмена данными с монитором порта
Serial.begin(115200);
// Инициализируем дисплей
initDisplay();
// Подключаемся к WiFi-сети
connectWiFi();
}
// Функция loop, выполняется бесконечно
void loop() {
// Получаем данные о погоде с OpenWeatherMap.org
getWeatherData();
// Отображаем данные о погоде на дисплее
displayWeatherData();
// Ждем 10 секунд
delay(10000);
}