SYSTEM

🌦️ TTN Wetterstation – ESP32 & 7,5″ E-Paper

Eine zentrale Wetter- und Statusanzeige auf Basis eines ESP32, die Messwerte mehrerer LoRaWAN-Sensoren ΓΌber The Things Network (TTN) empfΓ€ngt und auf einem 7,5″-E-Paper-Display darstellt.

ZusΓ€tzlich wird ΓΌber die OpenWeatherMap API eine 3-Tage-Wettervorhersage abgerufen und auf dem Display angezeigt.


πŸ“· Projekt

TTN Wetterstation

Die Wetterstation verbindet LoRaWAN, The Things Network, MQTT, WLAN und ein großes E-Paper-Display zu einer zentralen Informationsanzeige.


πŸ—οΈ Systemarchitektur

                    LoRaWAN 868 MHz
                         β”‚
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β”‚                       β”‚
      β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
      β”‚ Sensor      β”‚         β”‚ Sensor      β”‚
      β”‚ 15-01       β”‚         β”‚ 15-02       β”‚
      β”‚             β”‚         β”‚             β”‚
      β”‚ Temperatur  β”‚         β”‚ Temperatur  β”‚
      β”‚ Feuchte     β”‚         β”‚ Distanz     β”‚
      β”‚ Außen       β”‚         β”‚             β”‚
      β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
             β”‚                       β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
                         β–Ό
                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                β”‚ LoRaWAN Gateway β”‚
                β”‚                 β”‚
                β”‚ 868 MHz         β”‚
                β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
                      Internet
                         β”‚
                         β–Ό
                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                β”‚      TTN        β”‚
                β”‚                 β”‚
                β”‚ The Things      β”‚
                β”‚ Network         β”‚
                β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
                    MQTT / TLS
                    Port 8883
                         β”‚
                         β–Ό
                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                β”‚      ESP32      β”‚
                β”‚                 β”‚
                β”‚ MQTT Client     β”‚
                β”‚ JSON Verarbeitungβ”‚
                β”‚ Datenaufbereitungβ”‚
                β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
                         β–Ό
                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                β”‚ 7,5" E-Paper    β”‚
                β”‚                 β”‚
                β”‚ Wetterdaten     β”‚
                β”‚ Status          β”‚
                β”‚ Forecast        β”‚
                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

☁️ Wettervorhersage

Die Wettervorhersage verwendet einen separaten Datenweg:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    ESP32     β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β”‚ HTTP
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  OpenWeatherMap  β”‚
β”‚                  β”‚
β”‚  Halle / Wetter  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β”‚ JSON
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       ESP32      β”‚
β”‚                  β”‚
β”‚ Auswertung       β”‚
β”‚ + Wettersymbole  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β–Ό
   E-Paper Display

Die Wettervorhersage wird alle 30 Minuten aktualisiert.


πŸ“‘ LoRaWAN-Sensoren

Sensor 15-01

Der Sensor 15-01 ΓΌbertrΓ€gt:

DatenBedeutung
TempC_SHTTemperatur
Hum_SHTLuftfeuchtigkeit
TempC_DSAußentemperatur

Die Werte werden im ESP32 folgenden Variablen zugeordnet:

TempC_SHT β†’ temp_raum1
Hum_SHT   β†’ hum_raum1
TempC_DS  β†’ temp_aussen

Sensor 15-02

Der Sensor 15-02 ΓΌbertrΓ€gt:

DatenBedeutung
temperatureTemperatur
distance_mDistanz

Die Temperatur wird im ESP32 um 4 Β°C korrigiert.

temperature
     β”‚
     β–Ό
 - 4 Β°C
     β”‚
     β–Ό
temp_raum2

Die Distanz wird zusΓ€tzlich zur Ermittlung des Status verwendet.


πŸ“‘ DatenΓΌbertragung

Die Sensoren ΓΌbertragen ihre Daten per LoRaWAN an das Gateway.

Sensor
  β”‚
  β”‚ LoRaWAN
  β–Ό
Gateway
  β”‚
  β”‚ Internet
  β–Ό
TTN
  β”‚
  β”‚ MQTT
  β–Ό
ESP32

Der ESP32 verwendet die TTN-MQTT-Schnittstelle:

MQTT Server:
eu1.cloud.thethings.network

Port:
8883

Die Kommunikation erfolgt ΓΌber MQTT/TLS.


πŸ“¬ MQTT

Der ESP32 abonniert das Topic:

v3/015@ttn/devices/+/up

Das + ist ein MQTT-Wildcard.

Dadurch kΓΆnnen Uplink-Nachrichten mehrerer GerΓ€te empfangen werden.


πŸ“¦ TTN JSON-Daten

Die eingehenden MQTT-Nachrichten werden mit ArduinoJson verarbeitet.

Der relevante Bereich der TTN-Nachricht ist:

uplink_message
└── decoded_payload

Die Device-ID wird aus

end_device_ids
└── device_id

ausgelesen.

Damit entscheidet der ESP32, welchem Sensor die empfangenen Daten zugeordnet werden.


πŸ”„ Datenverarbeitung im ESP32

Der Ablauf einer eingehenden Nachricht:

MQTT Nachricht
      β”‚
      β–Ό
   callback()
      β”‚
      β–Ό
 JSON dekodieren
      β”‚
      β–Ό
 Device-ID ermitteln
      β”‚
      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚               β”‚
   15-01           15-02
      β”‚               β”‚
      β–Ό               β–Ό
 Temperatur       Temperatur
 Feuchte          Distanz
 Außen            -4 °C
      β”‚               β”‚
      β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
              β”‚
              β–Ό
       updateNeeded = true
              β”‚
              β–Ό
       Display aktualisieren

πŸ–₯️ Display

Das Projekt verwendet ein 7,5″-E-Paper-Display.

Die Anzeige ist in zwei Bereiche aufgeteilt.

Linker Bereich – Sensordaten

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ TTN WETTERSTATION               β”‚
│─────────────────────────────────│
β”‚                                 β”‚
β”‚ Aussen       :  xx.x C          β”‚
β”‚                                 β”‚
β”‚ Schlafzimmer :  xx.x C          β”‚
β”‚                                 β”‚
β”‚ Innen        :  xx.x C          β”‚
β”‚                                 β”‚
β”‚ Feuchte      :  xx %            β”‚
β”‚                                 β”‚
β”‚ Distanz      :  x.xx m           β”‚
β”‚                                 β”‚
β”‚ Letzter Upload 15-01 : xx:xx:xx β”‚
β”‚ Letzter Upload 15-02 : xx:xx:xx β”‚
β”‚                                 β”‚
β”‚ STATUS : FREI                   β”‚
β”‚                                 β”‚
β”‚ WLAN OK             MQTT OK     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🚦 Statusanzeige

Der Distanzwert des Sensors 15-02 wird fΓΌr eine Belegt-/Frei-Anzeige verwendet.

Die Schaltschwelle betrΓ€gt:

1,3 m

Logik:

distance < 1,3 m
       β”‚
       β”œβ”€β”€ JA  β†’ BESETZT
       β”‚
       └── NEIN β†’ FREI

Damit kann beispielsweise ein Stellplatz, Bereich oder Abstand ΓΌberwacht werden.


🌀️ 3-Tage-Wettervorhersage

Auf der rechten Seite des Displays werden drei Tage dargestellt.

FΓΌr jeden Tag werden angezeigt:

  • Datum
  • minimale Temperatur
  • maximale Temperatur
  • Wetterbeschreibung
  • Wettersymbol

Die Wettercodes werden in eigene Symbole umgesetzt:

OpenWeatherMap CodeAnzeige
01β˜€ Sonne
02β›… teilweise bewΓΆlkt
03, 04☁ Wolken
09, 10🌧 Regen
11β›ˆ Gewitter
13❄ Schnee

πŸ” Programmablauf

Nach dem Einschalten:

START
  β”‚
  β–Ό
Serial 115200
  β”‚
  β–Ό
E-Paper initialisieren
  β”‚
  β–Ό
Display lΓΆschen
  β”‚
  β–Ό
Display-Speicher reservieren
  β”‚
  β–Ό
WLAN verbinden
  β”‚
  β–Ό
MQTT konfigurieren
  β”‚
  β–Ό
Forecast abrufen
  β”‚
  β–Ό
Display anzeigen
  β”‚
  β–Ό
Hauptschleife

πŸ”„ Hauptschleife

Der ESP32 prΓΌft kontinuierlich:

  1. Ist MQTT verbunden?
  2. Sind neue Sensordaten eingetroffen?
  3. Muss das Display aktualisiert werden?
  4. Sind 30 Minuten seit dem letzten Forecast vergangen?
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β”‚     LOOP     β”‚
             β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
                    β–Ό
             MQTT verbunden?
                /       \
              NEIN       JA
               β”‚          β”‚
               β–Ό          β–Ό
           reconnect   client.loop()
                          β”‚
                          β–Ό
                  updateNeeded?
                    /       \
                  NEIN       JA
                   β”‚          β”‚
                   β”‚          β–Ό
                   β”‚      Display
                   β”‚      Update
                   β”‚
                   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜
                          β”‚
                          β–Ό
                 30 Minuten vorbei?
                    /       \
                  NEIN       JA
                   β”‚          β”‚
                   β”‚          β–Ό
                   β”‚      Forecast
                   β”‚      abrufen
                   β”‚
                   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜
                          β”‚
                          β–Ό
                         LOOP

🧰 Verwendete Software

Arduino Libraries

WiFi.h
WiFiClientSecure.h
PubSubClient.h
ArduinoJson.h
HTTPClient.h
time.h

ZusΓ€tzlich werden die Bibliotheken fΓΌr das verwendete E-Paper-Display verwendet:

DEV_Config
EPD
GUI_Paint
fonts

πŸ”§ Hardware

Die genaue Hardwarekonfiguration kann projektspezifisch ergΓ€nzt werden.

Grundkomponenten:

  • ESP32
  • 7,5″-E-Paper-Display
  • LoRaWAN-Sensor 15-01
  • LoRaWAN-Sensor 15-02
  • LoRaWAN-Gateway
  • WLAN
  • Netzwerk-/Internetverbindung


πŸ“ Installation

1. Repository herunterladen

Projekt in die Arduino-IDE bzw. Entwicklungsumgebung ΓΌbernehmen.

2. Bibliotheken installieren

BenΓΆtigte Arduino-Bibliotheken installieren:

  • PubSubClient
  • ArduinoJson
  • WiFi
  • HTTPClient

sowie die zum E-Paper-Display gehΓΆrenden Bibliotheken.

3. ESP32 flashen

Das Programm auf den ESP32 ΓΌbertragen.

4. Betrieb

Nach dem Start:

ESP32
 β”‚
 β”œβ”€β”€ WLAN verbinden
 β”‚
 β”œβ”€β”€ TTN MQTT verbinden
 β”‚
 β”œβ”€β”€ Forecast abrufen
 β”‚
 └── Display initialisieren

Danach lΓ€uft die Station autonom.


πŸ“Š Technische Eckdaten

ParameterWert
ControllerESP32
Funknetz SensorenLoRaWAN
Frequenz868 MHz
NetzwerkThe Things Network
MQTTMQTT/TLS
MQTT-Port8883
Sensoren15-01 / 15-02
Display7,5″ E-Paper
WetterdienstOpenWeatherMap
Forecast3 Tage
Forecast-Update30 Minuten
Belegt-Schwelle1,3 m
Serial Monitor115200 Baud

🎯 Projektziel

Das Projekt zeigt, wie sich ein LoRaWAN-Sensornetz mit TTN und einer lokalen ESP32-Anzeige kombinieren lΓ€sst.

Die Architektur trennt dabei klar die einzelnen Ebenen:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ SENSOR-EBENE                 β”‚
β”‚ LoRaWAN-Sensoren             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚
                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ NETZWERK-EBENE               β”‚
β”‚ Gateway + LoRaWAN + TTN      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚
                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ DATEN-EBENE                  β”‚
β”‚ MQTT + JSON                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚
                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ANWENDUNG                    β”‚
β”‚ ESP32                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚
                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ VISUALISIERUNG               β”‚
β”‚ 7,5" E-Paper                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

github

QuellcodeWetterstation.ino
Dateienreadme.md
Repositoryhttps://github.com/joachim-reuter/TTN-Wetterstationrrrr