Sensornetzwerk – Aufbau und Einsatz – Teil 1

 

Unser Werkstudent Daniel arbeitet seit einigen Monaten an einem Sensornetzwerk mit mehreren Knoten (Sensorpunkten). Welche Herausforderungen und Probleme sich hierbei ergeben haben, aber auch welche Erfolge er erzielen konnte berichtet er im Folgenden.

Im ersten Teil zum Thema Sensornetzwerk werden hierbei die Aufgabe und die anfänglichen Voraussetzungen für den Aufbau des Netzwerks aufgezeigt. Im zweiten Teil wird dann auf den Einsatz auf realer Hardware eingegangen.

Der erste Teil dreht sich hauptsächlich um die Vorbereitung und die Einarbeitung in das Betriebssystem.

Aufgabe

Die Aufgabe bestand im Wesentlichen darin, ein Sensornetzwerk aufzubauen und die damit verbundene Recherche nach möglichen Betriebssystemen und Hardwaremöglichkeiten. Bei diesem Netzwerk sollten Knoten(-punkte) eingerichtet werden, welche mit Sensoren/Aktoren bestückt werden können. Über dieses Netzwerk soll im Anschluss die Steuerung diverser Anbindungspunkte möglich sein, wie beispielsweise Messung von Temperatur und Luftfeuchtigkeit in angeschlossenen Räumen, wie auch die Steuerung von Licht und Jalousien. Die Grundstruktur des Netzwerkes ist nach dem Aufbau auf diverse Szenarien und Anwendungsfälle übertragbar.

Beim Aufbau ist es daher zunächst wichtig, ein geeignetes Betriebssystem zu verwenden. Dieses sollte auf die Verknüpfung von Sensorknoten und deren begrenzten Ressourcen ausgelegt sein. Außerdem sollte bei der Auswahl des Systems darauf geachtet werden, dass ein aktuelles Betriebssystem verwendet wird, welches Unterstützung und Support durch eine starke Community erhält und weit verbreitet ist.

Weiterhin ist darauf zu achten, dass das Betriebssystem diverse Protokolle unterstützt. Ein wichtiger Punkt ist zum Beispiel das Multi-Hopping, damit sich die Knoten automatisch mit dem nächsten Host-Knoten (Hauptknoten) verbinden können und sich somit automatisch ins Sensornetzwerk integrieren auch wenn kein direkter (Funk-)Kontakt mit dem Hauptknoten besteht. Dies ermöglicht einfaches Hinzufügen weiterer Knoten.

Des Weiteren soll das Protokoll 6lowPAN (IPv6 over Low power Wireless Personal Area Network) eingesetzt werden, welches  ein spezielles Protokoll für stromsparende Netzwerke ist und somit ideal für Sensornetzwerke geeignet ist. Es ermöglicht zudem, die Knoten mit geringem Aufwand in das bestehende Sensornetzwerk zu integrieren.

Die Kommunikation erfolgt über CoAP (Contrained Application Protocol). Dieses Protokoll ermöglicht die Informationsabfrage sowie den Empfang in Rein-Text und bietet zudem ein einheitliches und standardisiertes Protokoll, welches später von Drittanbieter-Anwendungen benutzt werden kann. Dadurch kann eine einfache Weiterverarbeitung der Daten erfolgen.

Ablauf

Soweit zu den Voraussetzungen und der Aufgabenstellung an sich. Im nächsten Schritt geht es zunächst an die Auswahl eines geeigneten Betriebssystems und die Recherche nach unterstützten Komponenten (Controller-Hardware, Sensoren etc.) für den Aufbau des Netzwerks.

 

Auswahl des Betriebssystems und der Hardware

Um später möglichst ein stabiles Sensornetzwerk aufbauen zu können, ist es wichtig, sich vorher Gedanken um die Auswahl der Soft- und Hardware zu machen, um somit eine Kompatibilität zu gewährleisten.

 

Das Betriebssystem

Die erste Fragestellung drehte sich hierbei um das Betriebssystem. Welche Betriebssysteme gibt es für IoT-Entwicklungen und welches ist für unsere Aufgabe am besten geeignet?

Das bedeutet zunächst Recherchearbeit. Kriterien für die Auswahl waren wie folgt:

  • Welche Hardware wird vom Betriebssystem unterstützt?
  • Wie ist der Speicherbedarf – RAM, ROM?
  • Welche Programmiersprache wird benötigt?
  • Ist das Betriebssystem echtzeitfähig?
  • Ist das Betriebssystem aktuell und verfügt über eine große Community und Verbreitung?
  • Welche Lizenzen werden benötigt?
  • Unterstützt das System die folgenden Protokolle: IPv6, 6lowPAN, UDP, CoAP?
  • Wie ausgeprägt ist das Powermanagement? Bei welcher Hardware unterstützt welches Betriebssystem welche Powermanagement-Modi?
  • Entwicklertools? Simulationsmöglichkeiten etc.?

Aufgrund dieser Kriterien entstand eine engere Auswahl unter den Systemen Contiki OS, Tiny OS und Riot OS. Die Wahl fiel dann auf Riot OS aufgrund der großen Hardwareunterstützung, einer aktiven und großen Community, der freien Verwendbarkeit, es ist hierbei also keine Lizenz benötigt, der Verwendung der Programmiersprache C / C++, der vielen Simulationsmöglichkeiten und der gut verfügbaren Hardware. Des Weiteren werden von Riot OS alle benötigten Protokolle unterstützt.

 

Die verwendete Hardware

Damit wäre die Frage nach dem Betriebssystem geklärt, bleibt noch die Frage nach der Hardware. Auch hier sind zunächst einige Fragen zu beantworten:

  • Welche Sensoren können verwendet werden bzw. werden vom Riot OS bereits durch passende Treiber unterstützt?
  • Welche Boards (Hauptplatine) werden von Riot OS unterstützt?
  • Welche Mikrocontroller werden von Riot OS unterstützt?
  • Welche Funkmodule werden unterstützt und sollen verbaut werden?

Da zu Beginn dieses Projektes erstmal wichtig war, die Möglichkeiten auszuloten und möglichst in kurzer Zeit erste Erfolge vorweisen zu können, haben wir zunächst fertige Boards verwendet.

Verwendet wurden in unserem Fall die beiden Boards stm32f3discovery und stm32f0discovery, da diese Hardware preisgünstig in Deutschland zur Verfügung steht, genügend Ein- und Ausgänge vorhanden sind und diese vom verwendeten Betriebssystem Riot OS unterstützt werden.

Außerdem wurde der Funkchip CC1101 mit 866Mhz verwendet, welcher die Kommunikation zwischen den Knoten unterstützt und dessen Treiber bereits im Betriebssystem integriert ist.

Sobald das Sensornetzwerk funktioniert werden eigene Boards entworfen. Dies hat den Vorteil, dass man platzsparendere Boards entwerfen kann, welche nur noch die benötigten Komponenten beinhalten. Dies wiederum führt dazu, dass man den Stromverbrauch optimieren kann und somit den Betrieb mit einer Knopfzellenbatterie ermöglicht.

Einarbeitung

Um einen ersten Einblick in Riot OS zu bekommen, wurde die zahlreichen Beispielprogramme ausgeführt. Zunächst wurden die Programme innerhalb der Simulationsumgebung (das sogenannten „nativ-Board“) von Riot OS gestartet. Dies ermöglicht, dass testen und starten von Programmen ohne die Verwendung von realer Hardware möglich ist. Für das Kennenlernen der Syntax und der Funktionsweise des Betriebssystems somit ideal.

Die Steuerung des Betriebssystems läuft über Shell Befehle. Mit Hilfe dieser lassen sich unter anderem Netzwerkeinstellungen vornehmen oder zum Beispiel mit dem selbstgeschriebenen Programm interagieren.

Seonsornetzwerk Shell-Befehl, generic.de AG

Seonsornetzwerk Shell-Befehl

Die Kommunikation zwischen dem PC (Linux-System) und dem Board erfolgt über die serielle Schnittstelle. Hat man alle Einstellungen etc. durch sein Programm automatisiert, kann das Board natürlich auch ohne direkte Verbindung zum PC arbeiten.

Eine weitere praktische Funktion der Simulationsumgebung ist der Aufbau eines virtuellen Sensornetzwerkes. Somit lassen sich bereits diverse Funktionen testen, mit dem Vorteil einer funktionierenden Verbindung der Knoten untereinander.

So ließen sich zum Beispiel bereits im Vorfeld unter anderem die UDP-Verbindung, die automatische Vergabe einer IPv6-Adresse und die CoAP-Verbindung der Knoten untereinander testen.

CoAP (Constrained Application Protocol) wird später verwendet, um die Sensordaten abzufragen und mit dem Sensorknoten zu interagieren. Als Identifikation dient hier die IPv6-Adresse der einzelnen Knoten. CoAP gibt die abgefragten Daten direkt in Rein-Schrift aus. Durch die Standardisierung dieses Protokolls ist eine Weiterverarbeitung durch Drittanbieter-Anwendungen möglich. Mehr dazu folgt in Teil 2.

Aufbau und Funktionsweise eines Sensornetzwerkes

Ein Sensornetzwerk besteht in der Regel aus mehreren Sensorknoten und einem Hauptknoten, welcher als Bindeglied zwischen dem Sensornetzwerk (6lowPAN) und des „normalen“ Netzwerkes (LAN bzw. WLAN) fungiert. Dieser Hauptknoten wird als Border-Router bezeichnet. Er fungiert sozusagen als Router zwischen den beiden Netzwerk-Grenzen.

Riot OS stellt dazu bereits diverse Programme zur Verfügung, um die Grundinfrastruktur eines Sensornetzwerkes mit Border-Router aufzubauen. Auch dies wurde während der Einarbeitung in der Simulationsumgebung getestet und somit bereits erste Kenntnisse über deren Funktionsweise aufgebaut.Der Hauptknoten ermöglicht somit die Kommunikation mit dem Sensornetzwerk auch von außerhalb.

Der Border-Router fungiert nicht nur als Bindeglied nach außen, sondern regelt auch das Sensornetzwerk selbst. Er vergibt an alle erkannten Sensorknoten automatisch eine IPv6-Adresse und bindet sie darüber in das Netzwerk ein. Dies wird in Teil 2 noch ausführlicher dargestellt.

 

Threads – Paralleles Arbeiten

Zur Vorbereitung wurden außerdem mehrere Threads erstellt. Threads können in Riot OS parallel abgearbeitet werden. Dabei sollten Aktionen getestet werden, welche parallel mit unterschiedlichen Prioritäten abgearbeitet werden, wie beispielweise das gleichzeitige Auslesen der Sensoren und zeitgleiche Warten auf ankommende Befehle über den Funkchip. Auch die Kommunikation zwischen verschiedenen Threads wurde getestet.

Die Untersuchung der Funktionsweise der Threads unter idealen Simulationsbedingungen ermöglicht später einen einfacheren Einstieg auf realer Hardware.

 

Im zweiten Teil des Beitrags wird die Umsetzung mit realer Hardware vorgestellt.

 

Daniel, Werkstudent Elektrotechnik und Softwareentwicklung generic.de AG

Gastbeitrag von Daniel Waschto