Ein einfacher LoRa-Tracker für APRS-Wetterdaten
In Bearbeitung

Status 22. Januar 2024  ( mit aktualisierten Downloadfiles ) 
    Automatic translation by GOOGLE:   https://translate.google.com/translate?sl=auto&tl=en&u=http://www.kh-gps.de/LoRa_WX.htm

NEU:  Jetzt auch mit neuen Funktionen
Vereinzelt wurde der Wunsch laut, ausgewertete Daten auch auf einem größeren, als dem auf dem Prozessorboard integrierten 0.96"-OLED-Board darstellen zu können. Dazu ist weiter unten etwas zu lesen. Ansonsten gibt es aber auch noch eine andere Lösung. So erlauben die verwendeten ESP32-Prozessoren schon von Haus aus auch eine Bluetooth-Funktionalität. Ermittelte Wetterdaten lassen sich dadurch drahtlos ( bei einer Reichweite von bis zu etwa 20m ) auch an Smartphones/Tablets übertragen. Abb.5 am Ende dieser Seite gibt es ein Beispiel für auf diese Weise übertragene und mit einem herkömmlichen Terminalprogramm ausgewertete Daten. Dabei erlaubt die von mir benutzte ( Android- ) APP von Kai Morich [6] vielfältige Darstellungvariationen, wie z.B auch nahezu bildfüllende Zeichen. Die erwähnte Bluetooth-Funktionalität wurde bereits in die unter Link [2] herunterladbaren Firmwarefunktionen intergriert.  

YouTube  Zu diesem Projekt auch ein Video von Manuel Lausmann :  https://www.youtube.com/watch?v=akgEdKHjBhw

Angeregt durch einen Forumsbeitrag begann ich, neben einem Projekt zur LoRa-Aussendung von APRS-Positionsdaten, auch noch eine Version für APRS-Wetterdaten zu erstellen. Für den Anfang sollten dabei erst einmal nur die Daten der BOSCH-Sensoren des Typs BME280 zur Aussendung kommen. Über ihre I2C-Schnittstelle stellen diese Bausteine auf einfache Weise sowohl Werte von Temperatur, Luftfeuchte, Höhe und Luftdruck zur Verfügung: Die Genauigkeit der Werte entspricht dabei mittleren Anforderungen ( was immer das auch bedeutet ! ).

 
Abb.1  Komplette LoRa-APRS-Sendeeinheit für Wetterdaten
hier mit ESP32, OLED, LoRa-Board von TTGO und ( nicht sichtbar ) BME280-Sensor

Zur weiteren Datenaufbereitung und LoRa-Verabeitung galt es nun noch geeignete Prozessorboards zu finden. Bei der Suche nach hierfür geeigneten Lösungen stiess ich auf kleine Boards der Firmen HELTEC bzw. baugleich von ICQUANZX u.a., die bereits sowohl einen ESP32-Prozessor, ein OLED-SW-Display ( 128x64 Pixel  ), als auch einen LoRa-Transceiverbaustein beinhalten. Ähnliche, durch ihre Ausstattung mit einer SMA-Antennenbuchse erkennbare Boards gibt es auch mit der Bezeichnung: TTGO LoRa32 (Abb.1) .

Bei allen Versionen ist zu beachten, dass sie Üblicherweise sowohl für einen Frequenzbereich um 433 MHz, als auch für einen solchen um 868 MHz angeboten werden. Nachdem es sich bei letztgenanntem Bereich um kein Amateurfunkband handelt, kommen für LoRa-APRS-Anwendungen in der Regel nur die 433 MHz-Versionen infage. 

Der USB-Anschluss der Bausteine dient u.a. ihrer Spannungsversorgung mit 5V. Alternativ können aber auch 3.7V-LiPo-Akkus benutzt werden, wofür eine integrierte Ladeelektronik vorhanden ist. Zum Lieferumfang gehören zudem kleine Wendelantennen für den 433MHz-Bereich.

Anschaltung der BME280-Boards

Der Nachbau gestaltet sich sehr einfach. Hardwaremäßig müssen  lediglich das Prozessorboard und der BME280-Baustein miteinander verbunden werden. Dabei sind neben der Masse- und der Versorgungsspannung lediglich noch die beiden Verbindungen zur I2C-Steuerung herzustellen ( benötigte Pull-Ups befinden sich bereits auf dem BME280-Board und werden somit nicht noch extern benötigt ). Die beiden oben genannten Familien von Prozessorbausteinen erfordern die Nutzung unterschiedlicher Portanschlüsse:

ESP32-BORD mit LoRa und OLED
SDA
SCL
HELTEC LoRa32 / ICQUANZX LoRa 32
GPIO 4
GPIO 15
TTGO LoRa 32
GPIO 21
GPIO 22
Die I2C-Anschaltung der BME280-Bausteine entspricht einer Parallelschaltung zu den auf den Prozessorboards befindlichen OLED's.

Ein geeigneter Windsensor und seine Anschaltung
Mehrfach wurde ich gefragt, ob den via LoRa-APRS übertragenen Wetterdaten nicht auch solche eines Windsensors hinzugefügt werden könnten. Nach einiger Internetrecherche erwies sich das als unschwer machbar. Dabei half mir besonders ein YouTube-Video von Alex aus Graz [3]. Von ihm habe ich mir den Hinweis auf einen möglichen Windsensor [4] und auch einige passende ESP32-Subroutinen "ausgeborgt".
Der verwendete Windsensor ( Abb.1a ) ist relativ preiswert erhältlich und wird als Ersatzteil für eine industriell gefertigte Wetterstation geliefert. Einer Verwendung in rauher Umgebung dürfte er auf die Dauer allerdings kaum gewachsen sein. Für erste Versuche sollte er sich aber verwenden lassen.


Abb.1a  Beispiel für Windsensor gem. [4]

In elektrischer Hinsicht ist seine Funktion äusserst einfach und beschränkt sich auf eine rotationsabhängige Unterbrechung der Verbindung zwischen seinen beiden Anschlussdrähten. Die Anschaltung erfolgt, indem an eine der beiden Adern die vom Prozessorboard bereitgestellte 3,3V-Spannung gelegt wird, während die zweite Ader mit dem als Schalteingang konfigurierten Port GPIO12 verbunden werden muss. Zusätzlich ist vom gleichen Punkt auch noch ein Widerstand von ca. 10 KOhm gegen Masse vorzusehen ( siehe dazu auch Abb.1b ).  


Abb. 1b   Zusammenschaltung der einzelnen Baugruppen des Wettertrackers

WICHTIG:  Wer keinen Windsensor einsetzen möchte, der lässt die entsprechenden Anschlusspins einfach unbeschaltet.

Personalisierung des Quellcodes

Der Quellcode ( INO-File ) ist an einigen Stellen noch an die persönlichen Daten anzupassen. Beginnen wir mit dem auszusendenden Datenstring. Einschliesslich der APRS-Wetterdaten kann er etwa folgendermassen aussehen: "DJ7OO-12>APRS:!4957.60N/00812.00E_.../...s023t079h42b09970a00245_".
Die hierbei vom Anwender noch zu ändernden Daten finden sich in der ersten Hälfte:

DJ7OO-12>APRS:!4957.60N/00812.00E_

Das Absender-Call ( ggf. incl SSID ) und die fixen Positionsdaten sind durch Werte eigener Wahl zu ersetzen. Im Beispiel steht "4957.60N" für einen nördlichen Breitengrad im Format "GGMM.mm" zuzügl. N/S ( Hemispherenangabe ). "00812.00E" weist dagegen auf einen östlichen Längengrad im Format "GGGMM.mm" zuzügl. E/W hin.
Unverändert zu übenehmen ist der abschliessende Tiefstrich. Er ist für die Kennzeichung der Aussendungen als APRS-Wetterdatenmessages und Darstellung des WX-Icons zuständig. 

WICHTIG:
Falls die Positionsdaten nur als Gradangabe mit mehreren Nachkommastellen vorliegen, so ist zuerst noch eine Umrechnung in das Format: [G]GG.MM.mm erforderlich. Hilfreich kann es dabei ggf. sein, die für den eigenen Einsatzstandort benötigten Werte mithilfe von z.B. Google-Earth zu ermitteln. Hier kann auch eine Auswahl zwischen unterschiedlichen Formatdarstellungen getroffen werden. Dazu ist unter: Tools/ Optionen und 3D-Ansicht bei "Breite/Länge anzeigen/ die Einstellung "Grad, Dezimalminuten" zu wählen.

Bestimmung der Sendefrequenz

Die Festlegung der Sendefrequenz erfolgt im Quellcode mithilfe des Befehls: "lora_SetFreq" gefolgt von drei durch Kommata getrennten Dezimalwerten. Defaultmäßig wird damit die standardmäßig benutzte LoRa-APRS-Frequenz 433.775 MHz angewählt. Wer eine andere Frequenz nutzen möchte, der kann sich an dem folgenden Berechnungsbeispiel orientieren:

LoRa frequency calculation (sample for 434.4 MHz):
 ------------------------------------------------------------------------------
 434400000/61.03515625 = 71172096
 71172096 (DEC) = 6C 99 99 (HEX) 
 6C 99 99 (HEX) = 108 153 153 (DEC) 

Die sich daraus zur Anwahl der Frequenz 434.400 MHz ergebende Befehlszeile lautet damit:    "lora_SetFreq(108, 153, 153);"
während sie für 433.775 Mhz folgendermassen aussieht:                                                                "lora_SetFreq(108, 113, 153); 

Bestimmung der Sendefolgen

Vorab noch einige Bemerkungen zu den Sendefolgen:  
Unter LoRa führt die Aussendung von Wetterdaten mit ihren insgesamt ca. 60 Zeichen zu einer Kanalbelegung in der Größenordnung von etwa 4 Sekunden. Nachdem kurze Sendefolgen aber auch kaum zur besseren Erfassung von Wetterdatenänderungen beitragen, sollte man die zeitlichen Abstände zwischen den Aussendungen sinnvoll wählen und den verwendeten Kanal nur massvoll belegen. So hat sich an dieser Stelle z.B. eine Sendefolge von 30 Minuten als gängiger Wert erwiesen.
Um für Testzwecke aber ggf. zeitweise auch kürzere Zeitfolgen zu ermöglichen, enthält der Quellcode hierfür auch entsprechende Wertangaben. Nicht benutzte Codezeilen sind dabei jeweils auszuklammern.

   calc = 1800;  // 1800sec. = 30 Min.
//  calc = 900;  // 900sec.  = 15 Min.
//  calc = 600;  // 600sec.  = 10 Min.
//  calc = 300;  // 300sec.  = 5 Min.
//  calc = 60;  // 60sec.  = 1 Min.
 

Abb.2

Für den Zeitpunkt der Aussendungen geht das Display für einige Sekunden auf eine Anzeige gem. Abb.2. Zudem wird der Stand eines nach jeder Datenausgabe incrementierenden Zählers angezeigt.

Firmware-Download und seine Weiterverarbeitung

Die unter [2] bereitgestellten Firmwareversionen lassen sich zur Übertragbarkeit auch von Winddaten erweitern. Dabei werden sie sowohl in einer Version für die Boards "HELTEC LoRa32" und Baugleiche ( wie z.B. ICQUANZX ), als auch für solche mit TTGO-Bausteinen wie "TTGO LoRa32" bereitgestellt.
Zur Steuerung der LoRa-Bausteine ( Serie: RFM9x ) werden die altbewährten Libraries von Stuart Robinson, GW7HPW benutzt. Die dazu jeweils noch beigefügten Files: "LoRaTX.h" sind dabei in den gleichen Ordner zu kopieren, in dem auch die INO-Files abgelegt werden.

Hinweise zu ggf. erforderlich werdenden Frequenzumstellungen ( derzeit: 433.775 MHz ) sind im Quellcode zu finden. 

Wer mit Arduino-Programmierung und der Weiterverarbeitung von Daten vertraut ist, der sollte mit dem Hochladen der Programmcodes keine Probleme haben. Ggf. sind allerdings vorher auch noch  die benutzten ADAFRUIT-Includes im Library-Ordner der Arduino-IDE abzulegen.

Zum Kompilieren und Hochladen benutzte ich ansonsten eine neuere, auf ESP32-Nutzung erweiterte Version der ARDUINO-IDE. Während für HELTEC- und baugleiche Boards dabei unter "Werkzeuge" das Board "HELTEC WiFi LoRa 32 OLED" zu wählen ist, lautet der Name zur Anwahl der TTGO-Boards: "TTGO LoRa32-OLED V1".

Erste Betrieberfahrungen

Schon nach der ersten Inbetriebnahme erschienen die ausgesandten Wetterdaten auf der Seite von APRS-Fi. Dabei noch festgestellte kleinere Formatfehler wurden inzwischen beseitigt. Unter Verwendung der mit den Bausteinen gelieferten kurzen Antenne konnten die mit etwa 50mW-Sendeleistung ( +17dBm ) erfolgten Aussendungen bereits von einem Gateway in etwa 5 Km Distanz ( siehe Bild ) und auch von unserem Lora-Repeater "DL0OJ-14" in etwa 15 Km Entfernung empfangen und verarbeitet werden.


Abb.3  Beispiel für Wetterdatenempfang auf der Seite: APRS.fi    
( hier noch Version ohne Winddaten )

Werden Winddaten in "m/s" dargestellt, so können sie durch Multiplikation mit dem Faktor 3.6 in "Km/h" umgerechnet werden.  

Was noch aussteht, ist eine Kontrolle der Verarbeitung negativer Temperaturwerte. Danach könnten ggf. noch kleinere Änderungen im Quellcode erforderlich werden. Um diesen Test durchführen zu können, muss ich mir allerdings erst noch eine Dose Kältespray besorgen !

Mögliche Erweiterungen

Inzwischen gibt es zum Projekt auch noch einige weitere Ideen. So fragte ein OM an, ob neben den Daten des BME280 nicht auch noch weitere, über die Analogeingänge des Prozessors zugeführte Daten in die Ausgangssignale eingefügt werden könnten. Das ist natürlich denkbar, aber eine andere Sache reizt mich dezeit noch mehr: Nachdem das derzeitige Konzept nur für den Einsatz an Feststandorten vorgesehen ist, würde mich ansonsten noch interessieren, die fixen Positionsdaten durch solche eines GPS-Bausteins zu ersetzen, wodurch auch einen Einsatz bei z.B. Ballonmissionen infrage kommen würde. Hierbei denke ich auch an eine Nutzung separater Frequenzen z.B. im Rahmen von SRD-Allgemeingenehmigungen.


Abb.4  Verwendung einer BME280-Sendeeinheit ( TTGO-Version ) zur APRS-Aussendung von Wetterdaten
Eine hierfür eingerichtete M5Stack-Deodereinheit dient zur Signalkontrolle auf der LoRa-APRS-Frequenz

Abb.4 zeigt u.a. die speziell für den Empfang von Wetterdaten eingerichtete Version meines mit einem M5Stack realisierten und in [1] beschriebenen LoRa-APRS-Decoders. Eine wesentlich einfachere ( und deutlich preiswertere ) Version verwendet dagegen für den gleichen Zweck nur eines der schon oben erwähnten Boards.

Hier noch ein paar grundsätzliche Bemerkungen zur Erweiterbarkeit des Lora-Wetterdatentrackers: Grundsätzlich lassen sich alle in irgendeinem elektrischen Format verfügbaren Messwerte auch verarbeiten. Entscheidend ist dabei das Format der Schnittstelle. Im einfachsten Fall kann es sich dabei nur um die in einem festgelegten Zeitraum ankommenden Zählimpulse handeln, möglich sind aber auch Analogsignale ( die dafür ggf. an die am Porteingang maximal zulässige Spannung anzupassen sind ), sowie serielle Datensignale oder auch z.B. via I2C-Bus bereitgestellte Daten.
Ausgegeben werden können sie entweder im APRS-Textanhang, wobei kein bestimmtes Format einzuhalten ist, oder entsprechend der für APRS-Wetterdaten getroffenen Festlegung, so wie sie unter  "APRS101" [5] beschrieben ist. Die Verwendung des APRS-Wetterdatenformates hat den Vorteil, dass es verschiedene Programme gibt, die eine erweiterte Auswertbarkeit der einzelnen Daten auf der Empfangsseite erlauben.
NEU:  Bereitstellung von Wetterdaten auch via Bluetooth
Die verwendeten ESP32-Prozessoren erlauben schon von Haus aus auch eine Bluetooth-Funktionalität. Ermittelte Wetterdaten lassen sich dadurch drahtlos ( bei einer Reichweite von bis zu etwa 20m ) auch an Smartphones/Tablets übertragen. Abb.5 zeigt ein Beispiel für auf diese Weise übertragene und mit einem herkömmlichen Terminalprogramm ausgewertete Daten. Dabei erlaubt die von mir benutzte ( Android- ) APP von Kai Morich [6] vielfältige Darstellungvariationen, wie z.B auch nahezu bildfüllende Zeichen. Die erwähnte Bluetooth-Funktionalität wurde in die unter Link [2] herunterladbaren aktuellen Firmwareversionen bereits integriert. Bei der Erstinbetriebnahme ist einmalig vom Smartphone/Tablet ein Pairing mit dem ESP32-Prozessorbaustein herzustellen. Je nach verwendeter Version werden sich diese hier mit den Namen "HELTEC_WX_TX_1" oder  "TTGO_WX_TX_1" anmelden. 


Abb.5  Beispiel für Darstellung von Wetterdaten mithilfe eines Terminalprogramms
( Anm: Darstellungen von u.a. Zeichengrößen und Timestamps sind über EINSTELLUNGEN wählbar )

Korrektur der BME280-Luftdruck-Messwerte
 Zu diesem Thema schrieb mir Peter, OE7SPI :  
..... habe mich die letzten tage damit beschäftigt warum der Luftdruck immer zu nieder angezeigt wird.     In der LoRa APRS gruppe hatte ich auch nichts gefunden ausser das andere schon das gleiche beobachtet habe.    Durch Zufall habe ich heute ein längeres Gespräch mitn OE7AJT der auch mit dem gleichen Phänomen kämpfte im laufe unsres Gespräch fanden wir zufällig die Antwort das der Wert 100.0F für die Messung auf Meereshöhe gilt und wie der Wert ist für die jeweilige Station aussieht.  Im Datenblatt vom BME 280 haben wir auch nicht mehr als den 100.0 Wert gefunden.     Da aber der OE7AJT in der nähe vom Flughafen Erding wohnt und damit sehr genaue Werte zum vergleichen hat ist er durch probieren auf den Wert 95 gekommen.    Durch herumgoogeln fanden wir noch die Infos die ich dir auch geschickt habe.   Also ohne Anpassung des Wertes wird der aktuelle Wert ohne Berücksichtigung der Meereshöhe angezeigt und mit  Anpassung den reduzierten Luftdruck wie er im allgemeinen bei den Wetterberichten gemeldet wird. Hoffe das du unsere Recherchen bestätigen kannst.    Diese Info sollte auch in geeigneter form verteilt werden denke ich aber ich bin kein guter Erklärer wen ich dir den Weg zu dir nachhause erkläre findest du nieee mehr Heim. 73 de Peter

Peter hat zum Thema auch eine Korrekturtabelle zusammengestellt. Wer möchte, der kann im Quellcode ( sinnvollerweise direkt in Anschluss an die Zeile: pres = bme.readPressure()/100.0F; ) eine zusätzliche Zeile zur Addition des jeweiligen Korrekturwertes entsprechend der eigenen Betriebshöhe einfügen: pres = pres + <korrekturwert> ; . 
Beispiel:  Betriebshöhe sei 225m; Inhalt der Korrekturzeile: pres = pres +  27;

 
Tabelle 1   Korrekturwerte

Basierend auf der folgenden Formel wurden die Korrekturwerte ermittelt. Mit ihr kann berechnet werden, um wieviel der Druck in einer bestimmten Höhe geringer ist als auf 0m Seehöhe, so dort der "Normaldruck" 1013,25 hPa beträgt. Für eine Höhe von z.B. 100m ergibt das einen Wert von 1001,3 hPa. Die sich ergebende Differenz von ca. 12 ist dabei auch der benötigte Korrekturwert.


Tabelle 2

Sensorerweiterungen
Mehrfach wurde der Wunsch geäussert, die Wetterstation mit weiteren Sensoren auszustatten und auch deren Daten via LoRa-APRS zu übertragen. Infrage kommen dabei Sensoren zur Erfassung von z.B. Windrichtungen, anfallenden Regenmengen und Helligkeitswerten. Versuchsweise hatte ich meine oben beschriebene Station auch einmal entsprechend erweitert und dazu auch passende Softwareversionen erstellt. Danach hat sich allerdings herausgestellt, dass die Schnittstellen einzelner Sensorversionen doch sehr unterschiedlich sein können und sich bei Nachbauten dann Probleme ergaben, die immer auch eine individuelle Softwareanpassung erforderten. Aus diesem Grund werde ich auf die Bereitstellung entsprechender Versionen leider zukünftig verzichten.


Abb.7  Beispiel für die Zusammenschaltung der Baugruppen bei erweiterten Wetterstationsversionen


Abb.8   Beispiel für Displaydarstellung bei Verwendung einer erweiterten Version

Verwendung von 2.42"-OLED-Display

Für viele Anwendungen wird eine unzureichende Displaygrösse der bei den LoRa ESP32 HELTEC- und TTGO-Boards verwendeten 0.96"-OLED-Displays beklagt. Deshalb wurden Versuche unternommen, auch grössere OLED's mit 2.42"-Diagonalabmessung zu verwenden [7].  Es war schon etwas überraschend , als bereits erste Tests zeigten, dass sich schon die für die Originalversion benutzten Libraries auch für die 2.42-OLED's nutzen liessen. Das gilt zumindest, wenn hierbei die Version: "Adafruit_SSD1306" zum Einsatz kommt.


Abb.9   Grössenvergleich der Darstellung zwischen 0.96" und 2.42"-Display


Tabelle 3    Anschaltung OLED 2.42"  an LoRa ESP32-Boards
Die Pins sind entsprechend dieser Liste mit den TTGO-  bzw.  HELTEC-Boards [ Klammerwerte ] zu verbinden
** wenn mit Masse verbunden : I2C-Adresse 0x3C
* externe Pull-Up-Widerstaende für SDA und SDA werden NICHT benoetigt, da auf den Prozessor- und Display-Board bereits vorhanden

Im Lieferzustand sind die 2.42"-Displays zur Steuerung via SPI-Bus eingerichtet. In Verbindung mit den erwähnten ESP32-Boards ist dagegen ihr I2C-Bus-Modus zu benutzen, wofuer sie vorab noch umgerüstet werden muessen. Dazu ist auf der Displayrückseite der Widerstand "R4" zu entfernen. Weiterhin sind die Anschlusspins für die Widerstaende  "R5" und "R3" kurzzuschliessen bzw. hier jeweils ein Null-Ohm-Widerstand einzufügen ( siehe Abb.10 ).


Abb.10    Displayrückseite  in Konfiguration für I2C-Mode


NEU in 12/2023:  Inzwischen sind auch Versionen der 2.42"-OLED's verfügbar, die ausschliesslich eine Nutzung des I2C-Busses erlauben und damit auch die vorherige Hardwareanpassung entfällt. Nachdem sich dabei zudem auch die Zusammenschaltung vereinfacht, werden sie von mir inzwischen favorisiert. Erkennbar sind sie daran, dass sie lediglich 4 Anschlusspins ( Masse, +3,3V, SDA, SDL ) besitzen, wobei diese doppelt auf 2 Seiten der Displayplatine herausgeführt sind. Zugeführte RESET-Signale entfallen hierbei.  


Abb.11   Boardrückseite 2.42"-OLED in der I2C-Version

Linkliste

[1]  http://www.kh-gps.de/Lora-Decoder_OE.htm
[2]  http://www.kh-gps.de/LoRa_TX_WX_22_01_24_OK.zip
[3]  https://www.youtube.com/watch?v=f04Fpsfn5Jc
[4]  bei https://www.amazon.de suchen nach : Ersatz-Sensor-Windgeschwindigkeit-Froggit-WH1080 WH3080 WH1090
[5]  http://www.aprs.org/doc/APRS101.PDF
[6]  https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=de&gl=US
[7]  https://de.aliexpress.com/item/33024448944.html