Neben den vier USB-Schnittstellen und der HDMI-Schnittstelle bietet der Raspberry Pi 3 die Möglichkeit, externe Geräte wie zum Beispiel Sensoren, LC-Displays und LEDs über eine 40-polige Steckerleiste anzusteuern. Die Stecker stellen verschiedene Spannungen und Anwendungsmöglichkeiten bereit. An Pin 1 und 17 liegt eine Spannung von +3,3 V an. Pin 2 und 4 führen dagegen +5 V. Insgesamt acht Ground-Anschlüsse stehen mit den Pins 6, 9, 14, 20, 25, 30, 34 und 39 zur Verfügung. Damit verbleiben 28 Pins für die externe Kommunikation.
Die Pins mit fest definierter Spannung eignen sich nicht zur Stromversorgung. Externe Schaltungsteile, insbesondere Relais und Motoren, sollten über ein eigenes Netzteil versorgt werden. In Ausnahmefällen mag es möglich sein, dass ein Relais oder auch ein Lüfter direkt am +3,3 V- oder +5 V-Kreis funktionieren kann. Aber das sollte nicht die Regel sein, denn von einem dauerhaft sicheren Betrieb kann man nicht ausgehen. Die Stromentnahme an einem GPIO-Ausgang muss in jedem Fall begrenzt werden. Wenn ein GPIO-Ausgang etwas schalten soll, verstärkt man das Ausgangssignal mit einer Transistorstufe oder einer Treiberschaltung, um den GPIO zu entlasten. Der Gesamtstrom aller GPIOs sollte 50 mA nicht übersteigen. Die gesamte Elektronik eines einzelnen Anschlusses ist für maximal 16 mA ausgelegt, bis dorthin treten keine Schäden auf. Alles darüber ist unsicher.
Eine gute Regel
ist, die Ausgangsendstufen eines GPIO zwischen 2 mA und 16 mA zu halten.
Neben den sog. GPIO Pins zur parallelen Kommunikation stehen insgesamt drei unterschiedliche serielle Kommunikationsprotokolle zur Verfügung:
Sowohl GPIO als auch SPI, I2C und UART werden durch eine Anzahl von Klassen in entsprechenden Namespaces (Windows.Devices) unterstützt. Hierzu muss allerdings zuerst mit Nuget die Bibliothek „Windows.Devices“ in Visual Studio installiert werden. Dadurch werden auch eine Reihe weiterer interessanter Namespaces eingefügt, wie z.B. Bluetooth, Sensors und WIFI.
ine Anwendungsmöglichkeit des Rasperry Boards mit Windows 10 IoT Core ist die Nutzung als Messapparat für das Raumklima. Dazu werden Temperatur- und Luftfeuchtigkeitsmesswerte von einem Sensor eingelesen, auf dem User Interface angezeigt, auf der SD-Karte zwischengespeichert und letztlich in Microsoft Azure als Messages an ein Azure IOT Hub weitergeleitet. Von dort können die Telemetriedaten von beliebigen Endgeräten abgefragt werden.
Der DHT11-Sensor ist in zwei Varianten, mit drei oder vier Anschlüssen, verfügbar. Bei der dreipoligen Bauform, bei welcher der Sensor auf einer kleinen Platine untergebracht ist, ist meist ein Vorwiderstand mit verbaut. Bei der alternativen Bauform mus dieser extern beschaltet werden. Der nicht beschaltete vierte Anschluss sollte auf Gnd gelegt werden.
Die meisten Sensoren verwenden, soweit diese nicht einfach binär über GPIO angesteuert werden können, das SPI- oder I2C-Protokoll. Es gibt aber auch Sensoren, wie den weit verbreiteten kombinierten Temperatur- und Luftfeuchte-Sensor DHT11 bzw. DHT22, die ein abweichendes proprietäres serielles Protokoll einsetzen, das von .Net nicht unterstützt wird. Dieses Protokoll kann mit C# nicht in voller Bandbreite zuverlässig umgesetzt werden, da es mit sehr engen zeitlichen Kommunikationsfenstern arbeitet – zwischen zwei und 80 Microsekunden. Diese Werte können nicht immer zuverlässig eingehalten werden, da C# nicht deterministisch arbeitet. In diesem Fall wählt man den Weg über eine in C++ geschriebenen Bibliothek, die das Protokoll implementiert.
Ein einfaches in WPF verfasstes User Interface übernimmt die Anzeige der gemessenen Daten. Diese können zeitgleich auf einem über I2C angesteuerten zweizeiligen LC-Display sichtbar gemacht werden.
Die SD-Karte von der das Betriebssystem des Raspberry gebootet wurde, kann auch als Speichermedium für Messdaten benutzt werden. In Fällen, in denen ein Internetanschluss nur temporär verfügbar ist, kann es sehr sinnvoll sein, die Daten zu puffern. Das Speichern von Daten auf der SD-Karte ist allerdings nicht direkt vergleichbar mit dem Arbeiten mit Dateien in einer »normalen« .NET-Desktop-Anwendung, da der Zugriff auf den Datenträger nur eingeschränkt über eine virtuelle »Sandbox« möglich ist. Aus diesem Grund kann man auch nicht die üblichen Klassen des Namespace System.IO einsetzen.
Das eigentliche Ziel ist aber, die gemessenen Telemetrie-Daten möglichst unmittelbar über eine Internetverbindung an den Azure IOT Hub in Form von sogenannten „Messages“ weiterzuleiten. Dann können weltweit von allen möglichen Endgeräten aus auf diese Messages zugegriffen werden.
Microsoft Azure ist aus IT-Sicht ein fast schon omnipotentes Konglomerat aus verschiedenen Dienstleistungen, die bei Bedarf gebucht werden können und weltweit zur Verfügung stehen. Von der Bereitstellung von IT-Infrastruktur über Datenbank-, Website- und Webservice-Hosting bis hin zu einfachen Telemetrie-Messaging-Diensten wie Azure IOT Hub wird alles angeboten. Microsoft arbeitet dabei mit dem »Pay as you go«-Modell, bei dem nur in Anspruch genommene Leistungen bezahlt werden.
Azure IoT ist Microsofts Public-Cloud-Plattform für Entwickler und Administratoren, die eigene Software-Anwendungen in der Cloud ausführen möchten. Die Plattform umfasst eine Reihe von Diensten, die einzeln oder in Kombination genutzt werden können. Azure IoT Hub bietet dabei eine einfache und sichere Möglichkeit, Millionen von IoT-Geräte anzuschließen, bereitzustellen, zu verwalten und mit diesen bidirektional zu kommunizieren (Bild 9). Der IoT Hub ist die Brücke zwischen Geräten und entwickelten Lösungen in der Cloud, sodass Daten in Echtzeit gespeichert und analysiert werden können. Dabei werden eine beliebig große Speicherkapazität sowie andere Dienstleistungen bereitgestellt und nutzungsabhängig abgerechnet (automatische Skalierung).
Beim IoT Hub erfolgt die Authentifizierung auf Gerätebasis, damit in jeder IoT-Lösung die gewohnte Vertraulichkeit sowohl von Cloud-zu-Gerät- als auch von Gerät-zu-Cloud-Nachrichten beibehalten wird. Des Weiteren unterstützt die Microsoft Azure Cloud sichere Kommunikationsstandards. TLS (Transport Layer Security) wird immer vorausgesetzt, sodass man sich über HTTPS (HyperText Transfer Protocol Secure) und AMQPS (Advanced Message Queuing Protocol) direkt mit dem Azure IoT Hub verbinden kann. Ist dies nicht möglich, hat man die Möglichkeit, seine Kommunikation mit Hilfe eines Gateways in die entsprechenden Protokolle zu übersetzen.
Alle Geräte können mithilfe der Open-Source-Geräte-SDKs mit Azure IoT verbunden werden. Dabei unterstützen die SDKs verschiedene Betriebssysteme wie Linux, RTOS, Windows und Echtzeitbetriebssysteme sowie mehrere Programmiersprachen wie C++, Node.js, Java, C#, .NET und Python.
Voraussetzung für die Nutzung der Microsoft-Azure-Service-Plattform ist eine Registrierung und die Hinterlegung einer Kreditkarte.
Avnet Silica verfügt bereits über ein Konto und stellt sich damit als Azure Cloud Solution Provider (CSP) für industrielle Zwecke zur Verfügung. Mit der Avnet-Lösung erhalten Kunden den kompletten Zugriff auf die Microsoft-Azure-Services und bekommen eine detaillierte monatliche Abrechnung.
Ebenfalls stellt sich Avnet Silica als Partner für Lösungen im Bereich des Azure IoT Hubs oder der IoT Suite bereit und, um die einzelnen Geräte bei Azure anzumelden. Natürlich sind weiterhin die Microsoft-Embedded / IoT-Lizenzen sowie Sever-Lizenzen für den industriellen Gebrauch über Avnet Silica beziehbar.
Die Sicherheit der IoT-Lösungen ist durch eine Authentifizierung auf Geräteebene gewährleistet, sodass nur unter Verwendung der richtigen Anmeldeinformationen mit diesen Geräten kommuniziert werden kann. So lassen sich die Möglichkeiten des IoT voll ausschöpfen.
Die im Beitrag dargestellte Beispielanwendung kann über www.hackster.com im Quellcode heruntergeladen werden.