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: 518 megtekintés)

Egyes szám: Egy gondolat “NodeMcu Időjárás állomás

  1. Greta Jonsson

    Trying to find powerful online promotion that isn’t completely full of it? Sorry to bug you on your contact form but actually that was the whole point. We can send your ad copy to sites via their contact forms just like you’re getting this ad right now. You can specify targets by keyword or just do mass blasts to sites in the location of your choice. So let’s assume you’re looking to blast a message to all the real estate agents in the US, we’ll scrape websites for only those and post your ad text to them. Providing you’re promoting something that’s relevant to that niche then you’ll get an awesome result!

    Send an email to sarah1916eva@gmail.com for the details

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

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