ESP8266 Max7219 MQTT Matrixdisplay für ioBroker

In diesem Artikel zeige ich Dir, wie Du dir ein LED-Matrix Display für Dein Smart-Home bauen kannst. 

 

Inhaltsverzeichnis

  1. Einführung
  2. Verwendete Materialen
  3. Aufbau der Schaltung
  4. Programmierung
  5. Integration in ioBroker

 

 

1. Einführung

In diesem Artikel wollen wir ein ESP8266 LED Matrixdisplay aufbauen und programmieren, welches wir über ioBroker steuern können. Als Display verwende ich mehrere Max7219 Displays mit 8×8 Punkten. Um eine Zeichenkette übersichtlich und damit gut lesbar darzustellen, sollen mindestens 12 Display-Module hintereinander geschalten werden. Am Display soll der Text, die Helligkeit und die Geschwindigkeit des Lauftextes per MQTT-Nachricht gesteuert werden können. Im nächsten Kapitel liste ich zunächst die verwendeten Materialen auf.

 

 

2. Verwendete Materialen

Für die Entwicklung des Displays habe ich folgende Materialen verwendet:

 

 

3. Aufbau der Schaltung

Der Aufbau der Schaltung ist relativ einfach. Für die Stromversorgung werden die 5V des ESP8266 an das Display angeschlossen.

Die restlichen Pins werden wie folgt angeschlossen:

Matrix ESP8266
VCC 5V (VIN)
GND GND
DIN D7
CS D3
CLK D5

Den Grundaufbau habe ich auf einem Breadboard aufgebaut. In einem späteren Schritt (im Artikel nicht enthalten), wird für das Display noch ein passendes Gehäuse gebaut. Die einzelnen Displays lassen sich relativ einfach in Reihe schalten. Wichtig ist dabei drauf zu achten dass immer Out -> in geschalten wird.

 

 

 



 

4. Programmierung

Für die Programmierung des Matrix-Displays müssen wir im ersten Schritt die benötigten Bibliotheken für GFX, das Max7219-Display sowie für die MQTT-Anbindung installieren.

 

Bibliotheken im Bibliotheksverwalter:

  • Adafruit_GFX
  • PubSubClient

Hinweise zur Installation von Bibliotheken
Installation von Bibliotheken über den Bibliotheksverwalter

 

Bibliotheken über Github

Hinweise zur Installation von Bibliotheken
Manuelle Installation von Bibliotheken ohne den Bibliothekenverwalter

 

Im nächsten Schritt erstellen wir uns in Arduino einen neuen Sketch und kopieren den folgenden Code in den Sketch:

Im folgenden Diagramm wird der Ablauf grob erklärt:

 

Das Script beginnt mit den Include-Anweisungen für die eingesetzten Bibliotheken. Nach den Include-Anweisungen folgt der Konfigurationsblock, mit dem die Pin- und Displaykonfiguration gesetzt wird. In meinem Beispiel werden 12 Module nebeneinander (horizontal) eingesetzt. Zudem werden hier die WiFi-Einstellungen sowie die IP-Adresse des MQTT-Brokers (IP von ioBroker) definiert. Abschließend werden noch Standardwerte für die Geschwindigkeit, Helligkeit und Schriftgröße des Displays gesetzt.

Mit der Methode „setup_wifi“ wird eine WiFi-Verbindung aufgebaut. Der Fortschritt des Verbindungsaufbaus wird über die serielle Schnittstelle ausgegeben. Bei einem erfolgreichen Verbindungsaufbau wird zudem die IP-Adresse des Displays über die serielle Schnittstelle ausgegeben.

Die Methode „setup“ initialisiert das Display mit den Standardwerten und richtet die Displays entsprechend aus. Dazu die Methode setRotation des matrix-Objekts aufgerufen. Nach der Initialisiertung des Displays wird die WiFi-Verbindung hergestellt und die Verbindung zum MQTT-Broker aufgebaut. Zudem wird die Callback-Methode gesetzt.

Mit der Methode „MQTTCallback“ wird auf eine Veränderung der abonnierten MQTT-Datenpunkte reagiert. Dazu wird der Topic sowie der Inhalt der Nachricht analysiert und entsprechend die Konfiguration des Displays verändert. Folgende Datenpunkte werden vom Broker abonniert:

  • MatrixDisplay2/text
  • MatrixDisplay2/intensity
  • MatrixDisplay2/scrollwait

Die Methode „printMatrix“ erstellt die Laufschrift mit der hinterlegten Konfiguration.

Mit der „reconnect“ Methode wird in der loop-Methode überprüft ob eine WiFi-Verbindung vorhanden ist. Zudem wird die Verbindung zum MQTT-Broker hergestellt.

 

 

 

5. Integration in ioBroker

Die Integration in ioBroker ist wie immer extrem einfach. Im Bereich Objekte unter dem Ordner mqtt.0 habe ich einen weiteren Ordner „MatrixDisplay2“ angelegt, in dem nun die einzelnen Datenpunkte zur Steuerung des Displays gespeichert werden. Ich habe die Datenpunkte mit dem Tool „MQTTBox“ vorab publiziert und angelegt.

 

Nun lässt sich die Matrix über die oben gezeigten Datenpunkte steuern und konfigurieren.

 

Ich hoffe Dir gefällt der Artikel 🙂 Ich freue mich über Deinen Kommentar!

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

6 Gedanken zu „ESP8266 Max7219 MQTT Matrixdisplay für ioBroker

  • 21. März 2019 um 17:34
    Permalink

    Hallo Matthias,

    für mein MQTT auf dem IoBroker habe ich Username und Password vergeben. Von daher bekomme ich immer im IoBroker eine Fehlermeldung im Log.

    Wie kann ich im Source Code Username und Password integrieren?

    Danke und Grüße,
    Claus

    Antwort
    • 22. März 2019 um 6:18
      Permalink

      Moin Claus,

      für die Verwendung von Username und Passwort musst Du in Zeile 88 die Angaben an die connect() Methode übergeben:


      if (client.connect(clientId.c_str(),"MyUsername","MyPassword")) {

      Antwort
  • 5. April 2019 um 12:03
    Permalink

    Hallo,

    ein tolles Projekt. Ich möchte das gerne nachbauen und überlege gerade, wie ich am besten die Displays miteinander verbinde.

    Hast du dafür die eigentlichen LED Panels vom Controller gelöst, u- förmige Haken eingesetzt und dann von der Rückseite gelötet?

    Hast du davon vielleicht noch ein Foto.

    Schönen Gruß

    Paul

    Antwort
    • 8. April 2019 um 20:34
      Permalink

      Hallo Paul,

      ich kann Dir folgendes Display empfehlen:

      Damit kannst Du die Displays durch „Umbiegen“ der Pins wunderbar verbinden.

      Viele Grüße,
      Matthias

      Antwort
  • 15. April 2019 um 16:53
    Permalink

    Hi! Klasse Anleitung, danke dafür. Mein Lauftext ist sehr verschwommen.
    Was muss ich im Script ändern um einen statischen Text abzubilden?

    Danke.

    Gruß
    Martin

    Antwort
    • 16. April 2019 um 20:02
      Permalink

      Hallo Martin,

      der Code ist speziell für die Laufschrift ausgelegt. Schau Dir mal die Schleife an, hier müßtest Du nun statisch eingreifen und den Text an die entsprechende X-Position zeichnen.

      Viele Grüße,
      Matthias

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere