#include "WiFi.h"
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <LiquidCrystal.h>
int lastButton = LOW;
int curButton = LOW;
const int button = 0;
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";
bool isTemperature = true;
bool isDataReady = false;
StaticJsonDocument<1500> doc; //Memory pool. Размер с запасом
void startStopButtonISR() {
isTemperature = !isTemperature;
Serial.println(isTemperature);
if (isDataReady)
{
if (isTemperature)
{
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(0, 1);
lcd.print(static_cast<int>(doc["main"]["temp"]));
}
else
{
lcd.setCursor(0, 0);
lcd.print("Humidity:");
lcd.setCursor(0, 1);
lcd.print(static_cast<int>(doc["main"]["humidity"]));
}
}
}
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);
attachInterrupt(digitalPinToInterrupt(2), startStopButtonISR, FALLING); //разрешение внешнего прерывания (вывод 2 Arduino UNO)
}
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);
}
void handleReceivedMessage(String message)
{
//разбор полученного сообщения как форматированного текста JSON
DeserializationError error = deserializeJson(doc, message);
// Если разбор прошел успешно
if (error)
{
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
int timezone = doc["timezone"];
return;
}
isDataReady = true;
}