WeatherTime Bildschirm

Dieser Sketch verbindet sich mit einem WLAN-Netzwerk, holt jede Minute Wetterdaten von OpenWeatherMap ab, holt die aktuelle Zeit von einem NTP-Server und zeigt den Tag, die Zeit und die Wetterinformationen auf einem OLED-Bildschirm an.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Sie können sie auch separat über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 WiFi

-

Jumperkabel

BUY

OLED-Display-Modul

BUY

Verdrahtung

../_images/06_weather_oled_bb.png

Schaltplan

../_images/06_weather_oled_schematic.png

OpenWeather

OpenWeather API-Schlüssel erhalten

OpenWeather ist ein Online-Dienst von OpenWeather Ltd, der weltweite Wetterdaten über eine API bereitstellt, einschließlich aktueller Wetterdaten, Prognosen, Nowcasts und historischer Wetterdaten für jeden geografischen Standort.

  1. Besuchen Sie OpenWeather, um sich anzumelden/ein Konto zu erstellen.

    ../_images/06_owm_1.png
  2. Klicken Sie in der Navigationsleiste auf die API-Seite.

    ../_images/06_owm_2.png
  3. Finden Sie Current Weather Data und klicken Sie auf Abonnieren.

    ../_images/06_owm_3.png
  4. Unter Current weather and forecasts collection abonnieren Sie den entsprechenden Dienst. In unserem Projekt reicht die kostenlose Version aus.

    ../_images/06_owm_4.png
  5. Kopieren Sie den Schlüssel von der Seite API keys.

    ../_images/06_owm_5.png
  6. Kopieren Sie ihn in die arduino_secrets.h.

    #define SECRET_SSID "<SSID>"        // your network SSID (name)
    #define SECRET_PASS "<PASSWORD>"        // your network password
    #define API_KEY "<OpenWeather_API_KEY>"
    #define LOCATION "<YOUR CITY>"
    
  7. Stellen Sie die Zeitzone Ihres Standorts ein.

    Nehmen Sie als Beispiel die Hauptstadt Schwedens, Stockholm. Suchen Sie auf Google nach „Stockholm Zeitzone“.

    ../_images/06_weather_oled_01.png

    In den Suchergebnissen sehen Sie „GMT+1“, also setzen Sie den Parameter der untenstehenden Funktion auf 3600 * 1 Sekunden.

    timeClient.setTimeOffset(3600 * 1);  // Adjust for your time zone (this is +1 hour)
    

Bibliothek installieren

Um die Bibliothek zu installieren, verwenden Sie den Arduino-Bibliotheksmanager und suchen Sie nach „ArduinoMqttClient“, „FastLED“, „Adafruit GFX“ und „Adafruit SSD1306“ und installieren Sie diese.

ArduinoJson.h: Wird verwendet, um JSON-Daten zu verarbeiten (Daten, die von openweathermap erhalten werden).

NTPClient.h: Wird verwendet, um die Echtzeit zu erhalten.

Adafruit_GFX.h, Adafruit_SSD1306.h: Wird für das OLED-Modul verwendet.

Code ausführen

Bemerkung

  • Sie können die Datei 06_weather_oled.ino direkt unter dem Pfad elite-explorer-kit-main\iot_project\06_weather_oled öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

Bemerkung

Im Code werden SSID und Passwort in arduino_secrets.h gespeichert. Bevor Sie dieses Beispiel hochladen, müssen Sie sie mit Ihren eigenen WLAN-Anmeldeinformationen ändern. Außerdem sollten Sie aus Sicherheitsgründen diese Informationen vertraulich halten, wenn Sie den Code teilen oder speichern.

Wie funktioniert des?

  1. Bibliotheken und Definitionen:

    1. WiFiS3.h: Dies ist wahrscheinlich eine spezifische Bibliothek für ein bestimmtes WLAN-Modul oder Board zur Verwaltung von WLAN-Verbindungen.

    2. ArduinoJson.h: Diese Bibliothek wird für das Dekodieren (und Kodieren) von JSON-Daten verwendet.

    3. arduino_secrets.h: Eine separate Datei, in der sensible Daten (wie WLAN-Zugangsdaten) gespeichert sind. Dies ist eine gute Praxis, um Zugangsdaten aus dem Hauptcode herauszuhalten.

    4. NTPClient & WiFiUdp: Diese werden verwendet, um die aktuelle Zeit von einem NTP-Server (Network Time Protocol) zu holen.

    5. Adafruit-Bibliotheken: Verwendet für die Verwaltung des OLED-Displays.

    6. Verschiedene globale Variablen: Dazu gehören WLAN-Zugangsdaten, Serverdetails und mehr, die im gesamten Skript verwendet werden.

  2. setup():

    1. Initialisiert die serielle Kommunikation.

    2. Überprüft und druckt die Firmware-Version des WLAN-Moduls aus.

    3. Versucht, eine Verbindung zum WLAN-Netzwerk mit der bereitgestellten SSID und dem Passwort herzustellen.

    4. Gibt den Status des verbundenen WLANs aus (SSID, IP, Signalstärke).

    5. Initialisiert das OLED-Display.

    6. Startet den NTP-Client, um die aktuelle Zeit zu holen und legt einen Zeitversatz fest (in diesem Fall 8 Stunden, was einer bestimmten Zeitzone entsprechen könnte).

  3. read_response():

    1. Liest die Antwort vom Server, insbesondere auf der Suche nach JSON-Daten (gekennzeichnet durch { und }).

    2. Wenn JSON-Daten gefunden werden, werden die Daten dekodiert, um Wetterdetails wie Temperatur, Feuchtigkeit, Druck, Windgeschwindigkeit und Windrichtung zu extrahieren.

    3. Ruft die Funktion displayWeatherData auf, um die Wetterinformationen auf dem OLED-Bildschirm anzuzeigen.

  4. httpRequest():

    1. Schließt alle bestehenden Verbindungen, um sicherzustellen, dass der Socket des WLAN-Moduls frei ist.

    2. Versucht, eine Verbindung zum OpenWeatherMap-Server herzustellen.

    3. Wenn verbunden, sendet es eine HTTP-GET-Anfrage, um die Wetterdaten für einen spezifischen Ort zu holen, der durch LOCATION definiert wird (wahrscheinlich definiert in arduino_secrets.h oder anderswo).

    4. Zeichnet die Zeit auf, zu der die Anfrage gestellt wurde.

  5. loop():

    1. Ruft die Funktion read_response auf, um alle eingehenden Daten vom Server zu verarbeiten.

    2. Aktualisiert die Zeit vom NTP-Server.

    3. Überprüft, ob es Zeit ist, eine weitere Anfrage an den Wetter-Server zu stellen (basierend auf dem postingInterval). Wenn ja, ruft es die Funktion httpRequest auf.

  6. printWifiStatus():

    1. Die SSID des verbundenen Netzwerks.

    2. Die lokale IP-Adresse des Boards.

    3. Die Signalstärke (RSSI).

  7. displayWeatherData():

    1. Löscht den OLED-Bildschirm.

    2. Zeigt den aktuellen Wochentag an.

    3. Zeigt die aktuelle Uhrzeit im HH:MM-Format an.

    4. Zeigt die bereitgestellten Wetterdaten an (Temperatur, Feuchtigkeit, Druck und Windgeschwindigkeit).