NodeMcu Időjárás állomás

#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.

(Statisztika: 442 megtekintés)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.