Arduino-Komponenten haben sich schon lange für das Prototyping qualifiziert und werden dabei durch M5Stack-, Grove-, QwIIC-, mikroBus-Komponenten u.a.m. wirkungsvoll unterstützt.
Die WisBLOCK Komponenten der in Shenzhen ansässigen Fa. RAKwireless Technology Co. erweitern die vorhandenen Möglichkeiten zusätzlich. Gemäß Aussage des Herstellers ist WisBlock ist eine komplette, qualifizierte Systemlösung, die aus einer Reihe von modularen IoT-Blöcken wie Sensoren, Rechnerkernen und Konnektivität besteht.
Es stehen zahlreiche Module zur Verfügung, die sich in Baseboards, Core-Module für LoRaWAN (nRF52840 SX1262, RP2040 SX1262) sowie WiFi &BLE (ESP32), Wireless-Module (WiFi, NB-IoT, GSM, LoRaWAN, NFC-Reader), sowie Sensor-, Interface-, Display-, Speicher- und Power-Module unterteilen lassen. Informieren Sie sich im OnLine-Shop von RAKwireless unter über das breite und kostengünstige Angebot.
Hinzu kommen verschiedene Gehäusevarianten, von denen mir für IoT-Anwendungen vor allem das RAKBox-B2 Gehäuse mit Solarpanel interessant erscheint.

Die folgenden Abbildungen zeigen Ihnen die kompakte Montage von einem Core-Modul und zwei Sensor-Modulen auf einem Baseboard als Beispiel.


Die Installation eines Baseboards mit Core-Modul und Antennen im RAKBox-B2 Gehäuse zeigt die folgende Abbildung.

Die WisBLOCK Komponenten sind auf GitHub unter der URL https://github.com/RAKWireless/WisBlock/ bezüglich Hard- und Software sehr gut dokumentiert. Wenn Sie sich also hierfür interessieren, dann ist das der richtige Ausgangspunkt.
Evaluationsschwerpunkt
Ich möchte mit den WisBLOCK Komponenten und dem RAKBox-B2 Gehäuse mit Solarpanel einen solarbetriebenen LoRaWAN-Knoten aufbauen und damit meine Untersuchungen zur Laufzeit eines batteriebetriebenen IoT-Knotens komplettieren.
Ich werde hier im Blog über die einzelnen Schritte informieren. Das Datum am Ende gibt ihnen einen Hinweis auf die jeweilige Aktualisierung.
Hardware-Vorbereitungen
Neben dem Angebot im Online-Shop des Herstellers habe ich für den Vertrieb in Deutschland die Innet Industrieelektronik Vertriebs GmbH und für den Vertrieb in der Schweiz bastelgarage.ch gefunden.
Mit den folgenden Komponenten beginne ich meine Versuche:
- WisBlock RAK5005-O Base Board zur Aufnahme eines Core-Moduls, eines I/O-Moduls und bis zu vier Sensor-Modulen
- WisBlock Core RAK11300 mit LoRa – Core-Modul mit Raspberry Pi Pico RP2040 & Semtech SX1262
- WisBlock RAK1920 Sensor Adapter Modul zur Kontaktierung einer M5Stack ENV.II Unit mit Grove-Interface
- WisBlock RAK1921 OLED Display zur Ausgabe von Informationen bei Batteriebetrieb
- RAKBox-B2 Gehäuse mit Solarpanel
Die Montage der WisBLOCK-Komponenten ist recht einfach. Dennoch muss den hochpoligen Steckverbindern mit Gefühl begegnet werden. Die recht kleinen Schrauben, die zum Fixieren der Boards verwendet werden, waren für mich eine Herausforderung. Pinzette und passender Schraubenzieher sind erforderlich. Vor der Montage des Baseboards muss die Pfostenleiste für das OLED-Display eingelötet werden. Im montierten Zustand kommt man da nicht ehr dran.
Die folgende Abbildung zeigt das mit einem Core-Modul RAK1130 bestückte Basebaords RAK5005-O montiert auf dem Unterlagsblech. Slot A und Slot B dienen der Aufnahme von Sensor-Modulen. Slot C und Slot D sind an der Rückseite angeordnet! Das IO-Slot dient der Aufnahme der etwa größeren IO-Module, zu denen auch das hier verwendete WisBlock RAK1920 Sensor Adapter Modul zählt.

Die Hardware für den IoT-Knoten komplett ist in der folgenden Abbildung gezeigt. Rechts sehen Sie das WisBlock RAK1920 Sensor Adapter Modul mit angeschlossener M5Stack ENV.II Unit und in der Mitte das 0.96″ OLED-Display.
Die Stromversorgung und Kommunikation erfolgt hier in der üblichen Weise über USB. Die LiPo-Batterie mit einer Kapazität von 1500 mAh und die Solarzelle sind ebenfalls bereits angeschlossen.

Inbetriebnahme MCU & Peripherie
Um die WisBlock Core Boards zu Ihrer Arduino IDE hinzuzufügen, müssen Sie das RAKwireless Arduino BSP installieren. Tragen Sie die folgende URL in die Preferences der Arduino IDE unter Additional Boards Manager URLs ein: https://raw.githubusercontent.com/RAKwireless/RAKwireless-Arduino-BSP-Index/main/package_rakwireless_index.json.

Nach einem Restart der IDE können Sie das gewünschte BSP installieren. Ich verwendet das Core-Modul auf Basis RP2040, weshalb ich hier auch nur dieses installiere.

Erste Inbetriebnahmetests habe ich mit den Programmen RAK11300_Battery_Level_Detect.ino und LoRaWAN_ENVII_Template.ino vorgenommen. Diese Programme und weitere (noch in Arbeit befindliche Programme) finden Sie auf GitHub unter https://github.com/ckuehnel/WisBLOCK.
Das Programm RAK11300_Battery_Level_Detect.ino fragt die Batteriespannung des LiPo-Akkus ab und signalisiert so den Ladezustand des LiPo-Akkus. Das ist später ein wichtiger Indikator für die Betriebsfähigkeit eines autonom arbeitenden IoT-Knotens.

Das Programm LoRaWAN_ENVII_Template.ino habe ich meinem Buch LoRaWAN-Knoten im IoT entnommen. Eine M5Stack ENV.II Unit mit SHT31 und BMP280 Sensoren wird hier als mögliche externe Quelle für Messdaten über das Grove-I2C-Interface des WisBlock RAK1920 Sensor Adapter Moduls abgefragt.

Die hier erhobenen Messdaten für Temperatur, relative Luftfeuchtigkeit und Batteriespannung können beispielsweise über LoRaWAN an einen Server übermittelt werden. Genügend Beispiele dieser Art finden Sie im oben angegebenen Buch zu LoRaWAN.
Hier ein Auszug aus dem Buch zum Thema Stromaufnahme:
Bei batteriebetriebenen IoT-Knoten, die drahtlos kommunizieren, muss der Leistungsbedarf auf das absolute Minimum reduziert werden. Das bedeutet, dass der IoT-Knoten nach Erfassung und Übermittlung der Sensordaten in einen Schlafzustand versetzt werden muss.
Gemäß der Beziehung

wird die mittlere Stromaufnahme umso geringer werden, je größer das Verhältnis von Schlafzeit tSLEEP zu Betriebszeit tOP ist.
Der Betriebsstrom IOP wird durch die Stromaufnahme des Mikrocontrollers (und dessen Peripherie) und den LoRa-Transceiver bestimmt, während die Stromaufnahme während des Schlafzustands ISLEEP weitgehend durch den eingesetzten Mikrocontroller und dessen Schlafmodi definiert ist.
Um eine hinreichend geringe Stromaufnahme eines LoRaWAN-Knotens zu erreichen, sollte die SLEEP-Phase also so lang ausgedehnt werden, wie es die Anwendung sinnvoll erscheinen lässt. Für die Messung von Temperatur und Luftfeuchtigkeit im Außenbereich kann eine halbe Stunde durchaus in Ordnung sein.
Betrachtet man nun die zur Verfügung stehenden WisBLOCK-Cores RAK4631 (nRF52840) und RAK11300 (RP2040) und deren Unterstützung durch die Arduino IDE, dann war schnell festzustellen, dass der RP2040, wie der Auszug aus dem Datenblatt zeigt, keine optimale Auswahl bzgl. der Stromaufnahme im Deep Sleep war.
Software Usecase | Typ. Average DVDD Current | Max. Average DVDD Current | Units |
… | … | … | … |
Sleep | 0.39 | 4.5 | mA |
Ich werde nach diesen Überlegungen den LoRaWAN-Knoten mit einem RAK4631 (mit deaktiviertem BLE) aufbauen und die M5Stack ENV.II Unit durch einen Sensor RAK1901 (mit einem Sensirion SHTC3 Humidity and Temperature Sensor IC) ersetzen, da dieser Sensor ebenfalls in einen Sleep-Mode versetzt werden kann.
Um das Core-Modul RAK4631 verwenden zu können, ist das betreffende BSP zu installieren.

Erste Inbetriebnahmetests habe ich mit den Programmen RAK4631_Battery_Level_Detect.ino und RAK4631_RAK1901_Temperature_Humidity_SHTC3.ino vorgenommen. Diese Programme und weitere (noch in Arbeit befindliche Programme) finden Sie auf GitHub unter https://github.com/ckuehnel/WisBLOCK.
Das Programm RAK4631_Battery_Level_Detect.ino fragt die Batteriespannung des LiPo-Akkus ab und signalisiert so den Ladezustand des LiPo-Akkus. Das ist später ein wichtiger Indikator für die Betriebsfähigkeit eines autonom arbeitenden IoT-Knotens. Im Programm hier sind neben der seriellen Ausgabe auch OLED und BLE aktiv.


Das Programm RAK4631_RAK1901.ino fragt die durch das RAK1901 SHTC3 Sensormodul erfassten Messwerte für Temperatur und Luftfeuchtigkeit ab.

Solarbetriebener LoRaWAN-Knoten
Aufbauend auf dem Programmbeispiel RAK4631-DeepSleep-LoRaWan.ino werde ich das Programm für einen solarbetriebene LoRaWAN-Knoten erstellen, welcher durch die folgenden Merkmale gekennzeichnet sein wird:
- Spannungsversorgung durch LiPo-Akku mit 1500 mAh
- Pufferung durch Solarzelle mit x W
- LoRaWAN Datenübertragung in TTS (CE)
- Messung der Spannung des LiPo-Akkus
- Messung von Temperatur und Luftfeuchtigkeit im Gehäuse durch SHCT3 Sensor
- Visualisierung der erfassten Daten über DataCake
- Messung der externen Temperatur und Luftfeuchtigkeit durch M5Stack ENV.II Unit (optional)
- Messung der externen Temperatur durch wasserdichten DS18B20 Sensor (optional)
Das Arduino-Programm ist fertig und auf GitHub abgelegt. Zurzeit ist der Serial Monitor noch eingeschaltet und der Zyklus steht zu Testzwecken noch auf zwei Minuten.
DevEUI, AppEUI und AppKey habe ich in der TTS(CE) Anwendung erzeugt und im File lora_handler.cpp nachgetragen.
Im File main.h kann der serielle Output später abgeschaltet werden.
// Comment the next line if you want DEBUG output. But the power savings are not as good then!!!!!!!
//#define MAX_SAVE

Mit dem folgenden Payload formatter kann die Ausgabe in der Console von TTS(CE) formatiert zur Anzeige gebracht werden.


Die verbleibenden Aufgaben sind nun noch
- Aufladen des LiPo-Akkus über USB für eine definierte Ausgangssituation
- Setzen der Zykluszeit auf 15 min
- Abschalten des seriellen Outputs
- Neucompilation und Programm-Upload
- Verschließen des Gehäuses
Die Datacake Integration ist ebenfalls geschafft. Die Details hierzu finden Sie in meinem LoRaWAN-Buch beschrieben.

Temperatur und relative Luftfeuchtigkeit werden im geschlossenen Gehäuse gemessen. Hier geht es vorgängig um die Umgebungsbedingungen für die Elektronik im Gehäuse, denn die Solarzelle soll ja so positioniert werden, dass eine maximale Sonneneinstrahlung aufgefangen wird. So ist es auch nicht verwunderlich, dass hier bei Mittagstemperaturen um die 20 °C Gehäuseinnentemperaturen von über 30 °C gemessen werden.

Über den nebenstehenden QR-Code oder diesen Public Link können Sie die Funktion des solar-gepufferten LoRaWAN-Knotens verfolgen.
Die Arbeiten sind abgeschlossen und der Test startet mit dem im folgenden Bild gezeigten Equipment am 18.03.2022 14:15.

In der folgenden Grafik führe ich die Batteriespannung über der Zeit nach.

Beginnend am 27.04.2022 weist die Batteriespannung recht seltsame Werte auf. Bereits einige Tage zuvor hat es begonnen zu regnen. Da bei einem vollgeladenen LiPo-Akku Spannungen über 4.2 V praktisch ausgeschlossen sind, muss der Fehler eine andere Ursache aufweisen.
Schon das Öffnen eines der Löcher im Gehäuse brachte die Erklärung. Aus dem offenbar undichten Gehäuse kam erstaunlich viel Wasser heraus. Ich habe nun (8.05.2020 14:30) das Gehäuse im Trockenen platziert und ein Loch zu Belüftung offengelassen.
Wie ein Blick in die Historie der Feuchtigkeitsmesswerte zeigt, wäre dieses Problem schon eher erkennbar gewesen.
Fazit: Unbedingt die Dichtheit eines solchen Gehäuses überprüfen und dem Messwert der internen Luftfeuchtigkeit die notwendige Beachtung schenken.
Zwischenstand: Der Test läuft seit dem 18.03.2022 bis heute praktisch ohne Unterbrechung. Das sind schon mal 8 Monate. In diesem sehr sonnigen Sommer gab es optimale Bedingungen. Der Herbst hat nun aber auch schon zahlreiche Regentage mitgebracht und die Wetterbedingungen werden das bisherige Ergebnis sicher noch beeinflussen.
Anfang Dezember 2022 hat sich schlagartig der Winter gemeldet und nachts waren es dann auch gleich -10 °C. Leider musste ich feststellen, dass bei meiner Temperaturanzeige bei null Schluss war. Kein Wunder, denn der Temperaturmesswert war mit uint16_t
deklariert gewesen. Also galt es, die Deklaration in int16_t
zu ändern und den Payload Decoder anzupassen. Die angepasste Software liegt nun auf GitHub und befindet sich im Test.

Der Wintereinbruch und die dann folgenden trüben Tage haben dem LiPo zu schaffen gemacht. Nun ist das Wetter wieder besser und die Spannung geht langsam wieder nach oben. Sonnige Tage Anfang Februar lassen die Durststrecke schnell vergessen.
Ein Jahr lang Online.
2023-03-20/CK