Mit dem Raspberry Pi lassen sich auf einfache Art und Weise Steuerungen aufbauen. In der Regel werden dazu Sensoren verwendet, um Werte zu erfassen und dann auf Basis dieser Werte mit Aktoren etwas zu steuern. Ein Display hilft dabei visuell darzustellen was gerade in der Steuerung passiert.

Die Kombination eines Displays und Node-Red macht es für den „Programmierer“ einfach. Allerdings sind ein paar Hintergrundinformationen sinnvoll. Ich habe seit einiger Zeit ein solches Display hier liegen und hatte bisher nicht die Zeit gefunden es einmal anzusteuern. Mit 20×4, also 4 Zeilen zu jeweils 20 Zeichen kann damit schon eine ganze Menge Informationen dargestellt werden.

Das Display selbst basiert auf einem Hitach HD44780 Display Controller und ist generell erst einmal NICHT I2C fähig. Diese Möglichkeit kommt durch eine kleine Zusatzplatine, welche an das Display angeschlossen oder besser angelötet wird. Diese Platine macht die Umsetzung von und auf I2C und ermöglicht damit den einfachen Anschluss an das bestehende BUS-System. Das System hat einen recht weiten Versorgungsspannungsbereich von 2.4-5.5V, lässt sich somit gut mit 3.3V am Raspberry PI betreiben.

Mit diesem Beitrag möchte ich die Integration, die Umsetzung mit Node-RED zeigen.

LCD2004A mit I2C Extension Unit

Das folgende Bild zeigt den Flow für die Anzeige auf dem LCD. Zu Testzwecken wird hier einfach das Datum und die Uhrzeit ermittelt, diese dann jede Sekunde auf dem Display ausgegeben. Also eine ganz einfache Uhr. Die verbleibenden 3 Zeilen sind statisch, können aber dynamisch gefüllt werden. Schauen wir uns den Flow etwas detaillierter an.

Node-RED Flow für die Anzeige

Ein Injektor sendet jede Sekunde den Timestamp. Der ist in einer für uns nicht gut lesbaren Form (1664266291818) und muss erst einmal aufbereitet werden. Dieses könnte jetzt in einer Function-Node mit Java Script Befehlen erfolgen oder aber wie hier in einer Date/Time Formatter Node.

Einstellungen der Date/Time Formatter Node

Das Ergebnis ist ein Text der in der ersten Zeile des Display angezeigt wird. Aus diesem Knoten kommt nun folgender Payload: „Di 27.09.22 10:17:04“ Diese Zeichenkette ist genau 20 Zeichen lang und passt somit genau in die erste Zeile. Als nächstes muss dem Display mitgeteilt werden, wie der Text auf dem Display angezeigt werden soll und was in die anderen 3 Zeilen angezeigt wird. Jetzt kommt ein Function-Node ins Spiel. Mit diesem Node wird die Aufbereitung für das Display durchgeführt. In meinem Beispiel ist nur die erste Zeile dynamisch, alle anderen 3 Zeilen haben immer den gleichen Inhalt. Auch wenn ich immer wieder sage, für Node-RED sind nur wenige Programmierkenntnisse notwendig, so kommt man an dieser Stelle um etwas Java Script nicht herum. Nachfolgend der Code in der Function-Node. Hier wird der einkommende Payload in den String für Zeile 1 gewandelt und alle anderen Zeilen sind statisch mit einem festen Text versehen. Die Aufbereitung des PAYLOAD für die Ausgabe umfasst je Zeile 3 Parameter. clear | text | alignment.

var String01 = msg.payload;
var String02 = "*********************";
var String03 = "VHS RASPI Kurs";
var String04 = "www.georg-keller.de";

msg.payload = [
		{
			"clear": true,
			"text":String01,
			"alignment":"center"
		},
		{
			"clear": false,
			"text":String02,
			"alignment":"center"
		},
		{
			"clear": false,
			"text":String03,
			"alignment":"center"
		},
		{
			"clear": false,
			"text":String04,
			"alignment":"center"
		}
	];

return msg;
PCF8574

Bei dem PCF8574 handelt es sich um einen 8-Bit-I2C/SMBus-I/O-Expander mit 2,5 bis 5,5 V und Interrupt von Texas Instruments. Das ist die kleine Zusatzplatine, welches nun die Wandlung von I2C auf die parallele Ansteuerung des Displays übernimmt. In dem Node LCD-I2C ist folgende Einstellung zu treffen:

Die I2C Bus Adresse ist HEX 0x27. Diese musste ich hier nicht eingeben und ich vermute das dieser Node nur ein einziges Display ansteuern kann. Daher wird die Adresse vermutlich fest eingestellt sein. Die Palette zur Bereitstellung des Nodes ist „node-red-contrib-pcf8574-lcd“. Eine weitere Konfiguration war nicht notwendig.

Die Palette für die Bereitstellung des Date/ Time Formatter ist „node-red-contrib-moment“. Der Node hier mit Date/Time Formatter benannt heißt MOMENT.

Was bleibt ist die Hardware nun mit dem Raspberry Pi zu verbinden. Dazu sind 4 Verbindungen nötig. VCC auf +3.3V, GND auf GND, SDA und SCL jeweils auf die SDA und SCL Anschlüsse des Raspberry PI legen. Nicht vergessen in raspi-config den I2C BUS zu aktivieren und schon sollte es gehen.

Viel Erfolg damit.