Arduino, Raspberry Pi und Node-RED

IoT-System aus Standardkomponenten selbst bauen

30. Juli 2018, 12:00 Uhr | Klaus Dembowski
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 2

Die Applikation CAN-Bus-Sensorknoten

Für die Weiterverarbeitung der CAN-Businformation ist der differentielle Pegel in ein massebezogenes Signal (single ended) umzusetzen, wofür ein CAN-Bus-Transceiver (MCP2551) notwendig ist. Dieser wird mit einem CAN-Buscontroller (MCP2515) verbunden, der das CAN-Busprotokoll nach dem erläuterten Verfahren absolviert und die Daten über eine Standardschnittstelle wie SPI zu einem Mikrocontroller weiterleitet (Bild 6).

Anbieter zum Thema

zu Matchmaker+
TU Hamburg
Bild 6: Die Schaltung des CAN-Bus-Sensorknotens, der als Prototyp auf einer Lochrasterplatine aufgebaut ist und das Arduino-Nano-Board (rechts) aufnimmt.
© K. Dembowski

In der Applikation verwendeten wir ein Arduino-Nano-Board als steuernden Mikrocontroller, der mit seiner Platine hucke-pack auf eine Lochrasterplatine gesetzt wird, welche die Elektronik des CAN-Busses und die Sensoren enthält. Für diesen Prototyp wurden beispielhaft ein digitaler Temperatursensor DS1620 von Maxim Integrated und als analoges Bauelement ein Drucksensor vom Typ MPX4250 von NXP (Bild 7) eingesetzt, die an die digitalen Pins D7 bis D9 bzw. an einen analogen Eingang (A7) des Arduino Nano angeschlossen werden.

TU Hamburg
Bild 7: Die verwendeten Sensoren für den CAN-Bus-Knoten.
© K. Dembowski

Auf die Arduino-Programmierung, die für die Ankopplung der Sensoren mit ein paar Codezeilen zu erledigen ist, wollen wir hier nicht weiter eingehen. Lediglich der SPI und der CAN-Bus erfordern etwas mehr Aufwand, wofür es jedoch bereits fertige Bibliotheken gibt. Die SPI-Bibliothek ist in der Arduino-Entwicklungsumgebung standardmäßig vorhanden. Für den MCP2515 sind im Internet zahlreiche CAN-Busbibliotheken zu finden, wovon einige aber nur eingeschränkt oder auch fehlerhaft funktionieren. Gute Erfahrungen wurden mit der CAN-Busbibliothek von Seeed Studio gemacht.

TU Hamburg
Bild 8: Der Node-RED-Flow für das Programm beim Raspberry Pi.
© K. Dembowski

Als Programmierwerkzeug für die Erstellung von Software für IoT-Anwendungen hat IBM Emerging Technology Service das Tool Node-RED entwickelt. Node-RED wird mittlerweile von der JS Foundation unterstützt. Das Konzept für die Programmerstellung beruht auf einem grafischen Editor, der über einen Internet Browser aufgerufen wird.

Die auf der linken Seite der Oberfläche (Bild 8) vorhandenen Knoten werden einfach per Mausklick in das Editor-Fenster gezogen. Sie haben je nach Typ verschiedene Eigenschaften, wobei das Prinzip stets das Gleiche ist: Daten fließen in einen Knoten hinein, werden verarbeitet und wieder ausgegeben. Durch die Verbindungen der Knoten werden Datenströme bzw. Flows visualisiert. Weil Node-RED auf Node.js und somit auf JavaScript basiert, werden die Daten im Rahmen eines JSON-Objektes (JavaScript Object Notation) übermittelt. Das Objekt heißt in der Regel msg und hat in seiner Grundform die Eigenschaften msgid, topic und payload. Die Message-ID lässt sich dem Objekt zuweisen und wird automatisch erstellt, die Eigenschaft topic hingegen kann selbst gewählt werden, muss aber über keinen Inhalt verfügen, und die Nutzdaten liegen unter der Eigenschaft payload vor.

Um einen Flow anzulegen, werden zunächst Initialdaten mit dem Inject-Node bestimmt. Hierfür klickt man einfach auf das graue Feld links neben dem Pfeil, wodurch ein msg-Objekt an den Ausgang des Inject-Nodes gesendet wird. Die nachfolgenden Nodes sehen dieses Objekt demnach als Input. Mit einem Doppelklick gelangt man in das Konfigurationsmenü des Knotens und kann dort festlegen, welchen Inhalt die payload des Objektes haben soll, beispielsweise, ob die Daten einmalig oder in regelmäßigen Intervallen zu senden sind.

Ein Function-Node verfügt üblicherweise über ein Konfigurationsmenü, wo es auch möglich ist, eigenen JavaScript-Code zu integrieren, der dann auf das Objekt angewendet wird. Ein Function-Node erhält als Input stets ein JSON-Objekt und gibt am Ausgang auch wieder eines aus. Zur üblichen Ausrüstung von Node-RED gehört der Watson-IoT-Knoten, über den sich Daten direkt an die Watson-IoT-Plattform senden lassen, um somit Sensordaten in einen Node-RED-Flow direkt an IBMs Bluemix-Cloud zu übertragen.

Für die Kommunikation zwischen dem Raspberry Pi und dem arduino-basierten CAN-Bus-Sensorknoten wird der CAN-Bus verwendet, wozu zwei Custom-Nodes (cansend, candump) dienen. Eine Nachricht wird mit cansend übertragen, und candump erhält die Nachrichten auf dem CAN-Bus, die noch nach IDs (der CAN-Bus-Knoten bzw. der dazugehörigen Nachrichten, s. o.) gefiltert werden müssen, damit nur die relevanten Daten weiterverarbeitet werden.


  1. IoT-System aus Standardkomponenten selbst bauen
  2. Wer kann, der CAN
  3. Die Applikation CAN-Bus-Sensorknoten
  4. Die Cloud-Anwendung

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!