#include <JsonListener.h>
#include "AccuWeatherLibrary.h"
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Elérési út az ikonokat tartalmazó "C" fájlhoz \akármi.c>
#define OLED_RESET D5
AccuweatherDailyData dataD[2];
AccuweatherHourlyData dataH;
AccuweatherCurrentData dataC;
Accuweather aw(" AccuWeather API kulcs ", 187423, "hu-hu", true);
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64)
#error("Kijelző szélesség hibás, javítsd: Adafruit_SSD1306.h!");
#endif
int stepper = 0;
int aktualis;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "hu.pool.ntp.org", 0, 60000);
long unixido;
long unixidopuffer;
void setup()
{
Serial.begin(115200);
WiFi.begin("SSID", "PWD");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(200);
}
timeClient.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
}
void loop()
{
timeClient.update();
unixido = timeClient.getEpochTime();
if (stepper == 0)
{
refresh_weatherdata();
stepper ++;
unixidopuffer = timeClient.getEpochTime();
}
printscreen();
Serial.println(" ---------------- Aktuális időjárás ---------------- ");
Serial.println("Unix Idő: "+String (dataC.EpochTime));
Serial.println("Szöveges időjárás: "+String (dataC.WeatherText));
Serial.println("Hőmérséklet: "+String (dataC.Temperature)+" °C");
Serial.println("Relatív hőérzet: "+String (dataC.RealFeelTemperature)+" °C");
Serial.println("Relatív hőérzet: "+String (dataC.RealFeelTemperatureShade)+" °C");
Serial.println("Relatív páratartalom: "+String (dataC.RelativeHumidity)+" %");
Serial.println("Szélirány: "+String (dataC.WindDirection)+" °");
Serial.println("Szélsebesség: "+String (dataC.WindSpeed)+" km/h");
Serial.println("Széllökések sebessége: "+String (dataC.WindGustSpeed)+" km/h");
Serial.println("UV index: "+String (dataC.UVIndex));
Serial.println("UV index szövegesen: "+String (dataC.UVIndexText));
Serial.println("Láthatótávolság: "+String (dataC.Visibility)+" km");
Serial.println("Felhő réteg: "+String (dataC.CloudCover)+" %");
Serial.println("Légnyomás: "+String (dataC.Pressure));
Serial.println("\n\nUnix idő puffer: "+String (unixidopuffer));
Serial.println("UTC Unix idő: "+String (unixido));
if ((unixidopuffer + 1800) <= unixido)
{
stepper == 0;
}
}
void refresh_weatherdata()
{
//-----------Aktuális időjárás-----------//
aktualis = aw.getCurrent(&dataC);
if (aktualis != 0)
{
Serial.println("ERROR");
Serial.println(aktualis);
return;
}
while (aw.continueDownload() > 0){}
}
void printscreen()
{
delay(1000);
display.clearDisplay();
display.drawBitmap(44, 0, max_temp, 40, 40, 1);
display.setCursor(30, 38);
display.println("Temperature");
display.setCursor(45, 50);
display.println(String (dataC.Temperature,1)+" C");
display.display();
delay(2000);
display.clearDisplay();
display.drawBitmap(44, 0, max_temp, 40, 40, 1);
display.setCursor(16, 38);
display.println("Feel Temperature");
display.setCursor(45, 50);
display.println(String (dataC.RealFeelTemperature,1)+" C");
display.display();
delay(2000);
display.clearDisplay();
display.drawBitmap(48, 0, humidity, 40, 40, 1);
display.setCursor(40, 38);
display.println("Humidity");
display.setCursor(44, 50);
display.println(String (dataC.RelativeHumidity,1)+" %");
display.display();
delay(2000);
display.clearDisplay();
display.drawBitmap(46, 0, wind_speed, 40, 40, 1);
display.setCursor(34, 38);
display.println("Wind Speed");
display.setCursor(36, 50);
display.println(String (dataC.WindSpeed,1)+" km/h");
display.display();
delay(2000);
display.clearDisplay();
display.drawBitmap(48, 0, uv_index, 40, 40, 1);
display.setCursor(40, 38);
display.println("UV Index");
display.setCursor(60, 50);
display.println(String (dataC.UVIndex));
display.display();
delay(2000);
display.clearDisplay();
display.drawBitmap(46, 0, cloudcover, 40, 40, 1);
display.setCursor(32, 38);
display.println("Cloud Cover");
display.setCursor(48, 50);
display.println(String (dataC.CloudCover,0)+" %");
display.display();
delay(2000);
display.clearDisplay();
display.drawBitmap(46, 0, eyeshot, 40, 40, 1);
display.setCursor(42, 38);
display.println("Eyeshot");
display.setCursor(40, 50);
display.println(String (dataC.Visibility,1)+" km");
display.display();
delay(1000);
}Amire figyelnünk kell, az az, hogy meg kell nyitni az ikonokat tartalamzó „.c” fájlt és az includolásnál az elérési útját is meg kell adni, továbbá még az Adafruit_SSD1306 könyvtárban a megfelelő képernyő méretet be kell állítani, mert az alapértelmezett a 128×32-es. Ha ezeket átírtuk, akkor elviekben működni fog a dolog. Nálam gyakorlatban is működik. A reprodukció érdekében az általam használt ikonok és „.c” fájl tömörítve leszedhető —innen—.
A „.c” fájl simán a Fájl menüpont megnyitás után hozzáadható a projekthez. Mivel magát a fájlt includeoljuk ezért minden egyes megnyitás után nyílik az .ino file mellé.
Az Adafruit_SSD1306.h-ban pedig ez szerepeljen:
// ONE of the following three lines must be #defined: #define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen //#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen //#define SSD1306_96_16 ///< DEPRECATED: old way to specify 96x16 screen // This establishes the screen dimensions in old Adafruit_SSD1306 sketches // (NEW CODE SHOULD IGNORE THIS, USE THE CONSTRUCTORS THAT ACCEPT WIDTH // AND HEIGHT ARGUMENTS).
Ezen felül persze a szokásos dolgokat meg kell csinálni, amiket minden Wifis projektnél. Tehát az SSID jelszó párost be kell állítani. Viszont ezeket leszámítva végeztünk.
Lássuk az eredményt:
A bejegyzés írása közben, gondolkoztam, és szerintem a TFT kijelzőt, ami ha valaha megérkezik kínából, azt nem erre fogom használni, hanem inkább valami másra. Erre a célra inkább építek egy magic mirror-t, mert ott más egyéb hasznos információt is meg lehet jeleníttetni. Pl.: Naptár, üzenetek, etc. Értelemszerűen drágább is lesz.
Ellenben ha valaki esetleg, valami ilyesmivel foglalkozna, mert valami okból kifolyólag szüksége lenne előrejelzésre, annak remélem tudtam segíteni. Ha észrevételed van akkor írj e-mailt nekem, vagy írj a komment szekcióba.
A termékek megvásárolhatóak az építéshez:

