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+ |
Sie können sie auch separat über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
---|---|
- |
|
Verdrahtung
Schaltplan
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.
Besuchen Sie OpenWeather, um sich anzumelden/ein Konto zu erstellen.
Klicken Sie in der Navigationsleiste auf die API-Seite.
Finden Sie Current Weather Data und klicken Sie auf Abonnieren.
Unter Current weather and forecasts collection abonnieren Sie den entsprechenden Dienst. In unserem Projekt reicht die kostenlose Version aus.
Kopieren Sie den Schlüssel von der Seite API keys.
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>"
Stellen Sie die Zeitzone Ihres Standorts ein.
Nehmen Sie als Beispiel die Hauptstadt Schwedens, Stockholm. Suchen Sie auf Google nach „Stockholm Zeitzone“.
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 Pfadelite-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?
Bibliotheken und Definitionen:
WiFiS3.h
: Dies ist wahrscheinlich eine spezifische Bibliothek für ein bestimmtes WLAN-Modul oder Board zur Verwaltung von WLAN-Verbindungen.ArduinoJson.h
: Diese Bibliothek wird für das Dekodieren (und Kodieren) von JSON-Daten verwendet.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.NTPClient & WiFiUdp: Diese werden verwendet, um die aktuelle Zeit von einem NTP-Server (Network Time Protocol) zu holen.
Adafruit-Bibliotheken: Verwendet für die Verwaltung des OLED-Displays.
Verschiedene globale Variablen: Dazu gehören WLAN-Zugangsdaten, Serverdetails und mehr, die im gesamten Skript verwendet werden.
setup()
:Initialisiert die serielle Kommunikation.
Überprüft und druckt die Firmware-Version des WLAN-Moduls aus.
Versucht, eine Verbindung zum WLAN-Netzwerk mit der bereitgestellten SSID und dem Passwort herzustellen.
Gibt den Status des verbundenen WLANs aus (SSID, IP, Signalstärke).
Initialisiert das OLED-Display.
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).
read_response()
:Liest die Antwort vom Server, insbesondere auf der Suche nach JSON-Daten (gekennzeichnet durch
{
und}
).Wenn JSON-Daten gefunden werden, werden die Daten dekodiert, um Wetterdetails wie Temperatur, Feuchtigkeit, Druck, Windgeschwindigkeit und Windrichtung zu extrahieren.
Ruft die Funktion
displayWeatherData
auf, um die Wetterinformationen auf dem OLED-Bildschirm anzuzeigen.
httpRequest()
:Schließt alle bestehenden Verbindungen, um sicherzustellen, dass der Socket des WLAN-Moduls frei ist.
Versucht, eine Verbindung zum OpenWeatherMap-Server herzustellen.
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 inarduino_secrets.h
oder anderswo).Zeichnet die Zeit auf, zu der die Anfrage gestellt wurde.
loop()
:Ruft die Funktion
read_response
auf, um alle eingehenden Daten vom Server zu verarbeiten.Aktualisiert die Zeit vom NTP-Server.
Überprüft, ob es Zeit ist, eine weitere Anfrage an den Wetter-Server zu stellen (basierend auf dem
postingInterval
). Wenn ja, ruft es die FunktionhttpRequest
auf.
printWifiStatus()
:Die SSID des verbundenen Netzwerks.
Die lokale IP-Adresse des Boards.
Die Signalstärke (RSSI).
displayWeatherData()
:Löscht den OLED-Bildschirm.
Zeigt den aktuellen Wochentag an.
Zeigt die aktuelle Uhrzeit im HH:MM-Format an.
Zeigt die bereitgestellten Wetterdaten an (Temperatur, Feuchtigkeit, Druck und Windgeschwindigkeit).