#include "WiFi.h"
#include <HTTPClient.h>
#include <ArduinoJson.h>#
#include <LiquidCrystal.h>
#include <Bounce2.h>
// Создаем объект
Bounce debouncer = Bounce();
int lastButton = LOW;
int curButton = LOW;
const int button = 3;
LiquidCrystal lcd(12, 14, 27, 26, 25, 33);
// Вводим имя и пароль точки доступа
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//бесплатный сервис получения данных о погоде
const String endpoint = "http://api.openweathermap.org/data/2.5/weather?q=Moscow,ru,pt&APPID=";
//индивидуальный пароль
const String key = "cdecb72a7903eb3bb1964c39615f1764";
void setup() {
Serial.begin(115200);
// lcd.begin(16, 2);
// lcd.clear();
delay(1000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Соединяемся с Wi-Fi..");
}
Serial.println("Соединение с Wi-Fi установлено");
// pinMode(button, INPUT_PULLUP);
// // Даем бибилотеке знать, к какому пину мы подключили кнопку
// debouncer.attach(button);
// debouncer.interval(5); // Интервал, в течение которого мы не буем получать значения с пина
}
bool isTemperature = true;
void loop()
{
// выполняем проверку подключения к беспроводной сети
if ((WiFi.status() == WL_CONNECTED))
{
// создаем объект для работы с HTTP
HTTPClient http;
// подключаемся к веб-странице OpenWeatherMap с указанными параметрами
http.begin(endpoint + key);
int httpCode = http.GET(); // Делаем запрос
// проверяем успешность запроса
if (httpCode > 0)
{
// выводим ответ сервера
String payload = http.getString();
Serial.println(httpCode);
handleReceivedMessage(payload);
}
else {
Serial.println("Ошибка HTTP-запроса");
}
http.end(); // освобождаем ресурсы микроконтроллера
}
delay(30000);
// if (isTemperature)
// {
// lcd.setCursor(0, 0);
// lcd.print("Temperature:");
// lcd.setCursor(0, 1);
// }
// debouncer.update();
// // Получаем значение кнопки
// int curButton = debouncer.read();
// if (curButton == LOW && lastButton == HIGH)
// {
// isTemperature = !isTemperature;
// }
// lastButton = curButton;
// lcd.clear();
}
void handleReceivedMessage(String message)
{
StaticJsonDocument<1500> doc; //Memory pool. Размер с запасом
//разбор полученного сообщения как форматированного текста JSON
DeserializationError error = deserializeJson(doc, message);
// Если разбор прошел успешно
if (error)
{
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
Serial.println();
Serial.println("----- DATA FROM OPENWEATHER ----");
const char* name = doc["name"];
Serial.print("City: ");
Serial.println(name);
int timezone = doc["timezone"];
Serial.print("Timezone: ");
Serial.println(timezone);
int humidity = doc["main"]["humidity"];
Serial.print("Humidity: ");
Serial.println(humidity);
Serial.println("------------------------------");
}