Arduino Wetterstation mit LoRaWAN Teil 1: Hardware

In meinem vorherigen Beitrag hatte ich eine kleine Einführung in LoRaWAN gegeben und dabei auch eine Schaltung gezeigt, in der eine kleine Wetterstation zusammengesteckt ist. Die Schaltung kann an einem beliebigen Standort auch ohne Internetverbindung betreiben.

Ich habe für diese Schaltung auch eine passende Hülle gebaut und die Software geschrieben, um das Ganze stromsparend mit Batterien und LoRaWAN zu betreiben.

So sieht das Ergebnis aus

Dies ist Teil einer dreiteiligen Serie. In Teil 1 beschäftigen wir uns um die Hardware und die Schaltung. Es wird ein lauffähiger Prototyp zusammen gesteckt und zum Laufen gebracht. In Teil 2 geht es darum, die Software der Wetterstation zum Laufen zu bringen und erste Daten in der Helium Konsole zu sehen. In Teil 3 geht es darum, für das Ganze auch eine Hülle zu entwickeln und die Daten in einem Smart Home Dashboard darzustellen.

Stückliste

NameAnzahl
SX12761
Schalter1
DHT111
AA Batterien3
Batteriepack1
Arduino Nano kompatibles Board1
LoRa Antenne1
KabelViele
Stückliste

SX1276

Das LoRaWAN Modul, was ich hier nutze ist sehr beliebt und wird oft auch in kommerziellen Produkten verwendet. Die Handhabung des Moduls ist nicht ganz einfach. Zum Einen entsprechen die Pinverbindungen nicht dem Standard auf Breadboards und müssen entweder über ein PCB-Board oder mit angelöteten Pins erweitert werden. Zum anderen ist auch die Handhabung in Software nicht die einfachste Sache. Ich habe einiges rum experimentieren müssen, bis ich das auf meinem Arduino zum Laufen bekommen habe. Dabei habe ich unzählige Stunden mit Testen verbraucht.

Schalter

Irgendein elektronischer Schalter ist ausreichend. Ich habe diese bei mir rumliegen. Ich habe Pins angelötet, damit ich sie auf meinem Breadboard nutzen kann. Aber auch später, damit ich das in meiner Wetterstation mit Jumper-Kabeln verbinden kann.

DHT11

Das ist der Temperatur- und Luftfeuchtigkeitssensor. Viel falsch kann man mit diesem Sensor nicht machen. Der Nachteil ist, dass die Temperatur ein wenig unpräzise ist nur und ganze Gradzahlen anzeigt. Wer höhere Anforderungen hat, sollte auf einen anderen Temperatursensor setzen.

Arduino Nano Kompatibles Board

Ich habe hier wieder auf meine Nano kompatiblen Boards gesetzt. Diese sind auch hier zu finden. Das Board ist klasse, im Laufe des Projektes habe ich aber zugegeben auch ein paar Makel festgestellt.

Batteriepack (3x AA)

Für die Energieversorgung werden Batterien verwendet. Drei AA Batterien werden über ein Batteriepack in Reihe zusammengeschaltet, sodass eine Spannung von etwa 4,5 Volt zustande kommt. Perfekt, um die Wetterstation zu betreiben. Ich habe mein Batteriepack selber ausgedruckt. Das Design findet sich hier (Datei: flexbatterAAx3.stl).

Jumper Kabel

Ich will alles als ein nachhaltiges und wiederverwendbares Design umsetzen. Falls ich irgendwann denke, die Wetterstation zu verbessern oder anders umzusetzen, will ich alle Teile wieder nutzen können. Ich nutze daher Jumper Kabel um dies zu gewährleisten. Die Wetterstation wird dadurch zwar etwas größer als nötig, aber das ist es mir wert.

LoRa Antenne (optional)

Mit dem LoRaWAN Modul gibt es auch eine kleine Antenne mit. Die ist ausreichend für Prototypen. Doch man wird feststellen, dass die Reichweite sehr stark eingeschränkt ist mit der mitgelieferten Antenne.

Diese kleinen LoRa Antennen gibt es bei Amazon ab zwei Euro pro Antenne. Die sind vermutlich nicht das Beste, aber die Reichweite der Sensoren steigt mit diesen Antennen. Ich habe mir diese für den späteren Verlauf des Projekts ebenfalls zugelegt.

Schaltung

Ich habe auch meine erste digitale Schaltung mit einem Tool entworfen. Es ist mir erstaunlich gut gelungen dafür, dass ich das zum ersten Mal gemacht habe. Hier sieht man alle Teile und wie sie miteinander zusammen gesteckt werden müssen. Die mitgelieferte Mini-Antenne ist ausreichend für den Prototypen.

LoRaWAN Netzwerk

Für die Nutzung von LoRaWAN habe ich das Helium Netzwerk („People’s Network“) und das „The Things Network“ (TTN) in Betracht gezogen. TTN war meine erste Wahl, weil die Einrichtung ziemlich gut funktioniert.

Nur 500 Meter weiter von meinem Wohnort gibt es nämlich auch ein LoRaWAN Gateway. Meine ersten Signale senden und empfangen hat Problemlos funktioniert. Leider scheint jedoch die mitgelieferte Antenne von meinem SX1276 zu klein zu sein. Die Reichweite des Helium Netzwerkes dagegen hat eine herausragende Reichweite. Bei der Registierung auf der Helium Konsole gibt es Credits kostenlos, sodass man direkt durchstarten kann. Im weiteren Verlauf fokussiere ich mich daher auf das Helium Netzwerk.

Anmeldung in der Helium Console

Die Helium Console ist die zentrale Schnittstelle wenn es darum geht, Sensoren mit dem Helium Netzwerk zu verbinden. Man richtet sein Gerät ein, bekommt Schlüssel und kann festlegen, was mit den Daten passiert.

Die Console ist beschränkt auf 10 Geräte, weil es nicht beabsichtigt ist, die Console der Foundation für produktive Zwecke zu nutzen. Für größere Anwendungsfälle gibt es Anbieter die dies abdecken.

Gerätecodes sollten nicht geteilt werden

Das Erstellen eines neuen Gerätes ist nicht mehr, als einen Namen einzugeben und das Gerät zu speichern. Das Wichtige für die Instandsetzung des Sensors sind die Dev EUI, App EUI und die App Key. Mit diesen drei Werten kann der Arduino später eine Verbindung zum Helium Netzwerk aufbauen und sich bei Hotspots identifizieren.

Arduino Software

Die Arduino Bibliothek Beelan-LoRaWAN ist eine großartige Bibliothek zum Durchstarten mit Beispielcode. Die „send-class-A-OTAA“ Beispieldatei hat fast alles bereits vorkonfiguriert. Folgendes muss man anpassen.

1. Zugangsdaten pflegen: Die Schlüssel, die man zuvor in der Helium Console gesehen hatte, kann man nun hier eintragen.

// OTAA credentials
const char *devEui = "0000000000000000";
const char *appEui = "0000000000000000";
const char *appKey = "00000000000000000000000000000000";

2. Pin-Nummern pflegen: Für unseren Aufbau haben wir die Verbindungen anders durchgeführt, als im Beispiel. Daher muss hier die Pin-Nummern aktualisiert werden. Wenn du dein Arduino genauso zusammengesteckt hast, wie in meiner Schaltung, dann sollte die folgende Pinbelegung bei dir auch funktionieren.

const sRFM_pins RFM_pins = {
  .CS = 10,
  .RST = 9,
  .DIO0 = 2,
  .DIO1 = 3,
  .DIO2 = 4,
  .DIO5 = 5,
};

Damit ist man bereit durchzustarten! Programmcode hochladen und ab die Post.

Testen

Damit man sieht, ob es wirklich funktioniert hat, kann man sich den Serial Monitor von der Arduino IDE anschauen. Dort bekommt man hilfreiche Meldungen über den Zustand der Verbindung. In der Helium Console kann man nun das Gerät öffnen und sieht folgende Inhalte beim Event Log.

Ist bei dir ein Join Request, Join Accept und Uplink zu sehen, dann war die Verbindung erfolgreich! Ist nur ein Join Request zu sehen, so ist vermutlich deine Antenne nicht stark genug. Ist gar nichts hier zu sehen, kontrolliere bitte, ob deine Schaltung richtig angeschlossen ist.

Der Beispielcode sendet einen Counter an die Konsole. Du kannst durch öffnen der Details den Inhalt des Pakets untersuchen.

Ergebnis

Wir haben es geschafft! Unsere Schaltung ist jetzt mit dem LoRaWAN-Modul und Arduino verbunden, und wir senden erfolgreich unsere ersten Signale an das Helium-Netzwerk.

Nächste Schritte

In Teil 2 dieser Serie werden wir einen genaueren Blick auf die Software für die Wetterstation werfen, einschließlich der Integration des Temperatur- und Luftfeuchtigkeitssensors (DHT11) und wie diese Daten über LoRaWAN gesendet werden können. Wir werden auch den Energiesparmodus besprechen, um die Batterielebensdauer zu maximieren.

In Teil 3 werden wir ein geeignetes Gehäuse für unsere Wetterstation erstellen und die Daten in einem Smart Home Dashboard anzeigen. So können wir die gesammelten Daten auf eine optisch ansprechende und bequeme Weise abrufen.

Insgesamt ist dieses Projekt eine gute Möglichkeit, in die Welt von LoRaWAN einzutauchen und zu lernen, wie man seine eigene Wetterstation baut. Mit jedem Schritt werden wir neue Erkenntnisse gewinnen und ein tieferes Verständnis für die Technologie dahinter entwickeln.