21.12.2015

theMatrix - ESP8266 LED-Matrix mit WLAN

Ziel

Eine LED-Matrix-Anzeige, die mit dem Browser per WLAN angesteuert werden kann. Es soll Laufschrift angezeigt werden. Das ganze soll möglich preisgünstig sein und man sollte es ohne Löten aufbauen können. Möglichst einfache Konfiguration wäre auch noch prima. Und das Gerät sollte dem Benutzer auch noch die URL zeigen, unter der es im WLAN erreichbar ist. Also so was:


Was passiert im Video?


Die ESP8266-LED-Matrix
  1. wird eingeschaltet
  2. meldet sich im WLAN an
  3. zeigt die eigene IP-Adresse
  4. wird mit einem Text beschickt
  5. der Text scrollt auf der Matrix

Was brauchen wir, was kostet das?

  • ESP-12-WLAN-Modul (ca 3,50€ mit Breakout-Board) 
  • FTDI-232-Interface (temporär zum Programmieren) (ca 2€)
  • 8x8-LED-Matrix mit MAX7219-Chip (ab etwa 2,50€/Stück)
  • Stromversorgung 3,3 Volt (ab 2€)
  • Breadboard + Kabel (ab 3,00€)
Gesamtkosten mit 5 Matrix-Modulen (40x8 LEDs) knapp 25€. Alle Bauteile sind z.B. auf eBay erhältlich. Meist direkt aus China mit Lieferzeiten um die drei Wochen.


Schaltung

Fritzing-Dateien mit der Schaltung gibt es auf GitHub: https://github.com/hermann-kurz/esp8266WifiMatrix/tree/master/fritzing

ESP-12-WiFi-Modul

Für das WiFi-Modul wurde das ESP-12-Modul  (basierend auf dem ESP8266-Chip) genommen. Dieses Modul ist FCC-zugelassen also legal verwendbar, was auf andere Module mit dem ESP8266-Chip nicht zutrifft.

Ein Problem ist, dass die Pins im 2mm-Raster sind, das Breadboard aber ein 2,54mm-Raster hat. Deshalb ist es sinnvoll, gleich ein ESP-12-Modul auf einem Breakout-Board zu kaufen, das die Pins im 2,54mm-Raster bereitstellt - sonst muss man selbst Drähte anlöten, um es im Breadboard zu betreiben. Diese Module sind extrem preiswert (unter 3€) auf eBay erhältlich!

Arduino-Plattform auf ESP-12-Modul

Das Tolle am ESP-12-Modul ist, dass es sich über die Arduino-IDE programmieren lässt! Dazu wird eine angepasste IDE benutzt, die angepasste Libraries an Bord hat. Die Installation ist hier beschrieben. Damit hat man einen WiFi-fähigen Arduino für nur 3€. Einfach unglaublich..

MAX7219-Module

Für die Ansteuerung der 8x8-LED-Matrizen, werden MAX7219-Chips verwendet. Die sind eigentlich für 7-Segment-Anzeigen gedacht, aber jemand hat dafür eine Arduino-Libary zur Ansteuerung von 8x8-LED-Matrizen geschrieben, die wir nutzen. Fertige Module die eine LED-Matrix und das MAX7219-Ansteuer-IC enthalten gibt es ab etwa 2,50€ auf eBay.

Sinnvoll ist es, ferug aufgebaute Module zu kaufen, da bei Bausätzen öfter mal Bauteile fehlen, oder falsch sind.

Die Daten werden zu den MAX7219-Modulen seriell übertragen, sie brauchen nur drei Signale (CS, CLK und DIN) und können kaskadiert, also hintereinander geschaltet werden.

Die drei Anschlüsse werden dann  mit dem ESP8266 so verbunden:

ESP-12 (Name) ESP-12 (Pin) MAX7219-Matrix
GPIO_2 11 CS
GPIO_14 5 CLK
GPIO_13 7 DIN

Die Anzahl der benutzten Module wird dabei im Quellcode angepasst. Ich habe mal fünf Module hibtereinandergeschaltet, das ergibt dann eine 40x8-Matrix.

FTDI-Adapter

Um das ESP-12-Modul zu programmieren, braucht man noch einen USB/Seriell-Adapter mit 3,3V-Pegel. Am besten sucht man nach einem sogenannten FTDI232-Adapter. Es gibt allerdings auch sehr viele Clones, die gleich bezeichnet sind, aber unter Windows andere Treiber brauchen. Unter Linux funktionieren die Clones normalerweise out-of-the-box.

ESP-12 (Name) ESP-12 (Pin) FTDI232-Adapter
TXD 16 RXI
RXD 15 TXO

Wichtig ist noch, dass GND des Adapters mit GND des ESP-12-Moduls verbunden wird.

Programmiermodus 

Zum Programmieren müssen einige Pins des ESP-12-Moduls auf definierte Pegel gelegt werden:
ESP-12 (Name) ESP-12 (Pin) Pegel
CH_PD 3 3,3V
VCC 8 3,3V
GPIO_0 12 GND
GPIO_15 10 GND



GPIO0 (Pin12 des ESP-12) auf Masse (GND) gelegt werden. Nach dem Programmieren muss man das Kabel dann entfernen.

Schaltung/Aufbau auf Breadboard

Insgesamt ergibt sich damit folgende Schaltung, die man mit einem Breadboard zusammenstecken kann.

Fritzing

Die Schaltung ist als Fritzing-File auf GitHub verfügbar:

Software

Für die einzelnen Komponenten gibt es Arduino-Libraries. Die mussten teilweise ein bischen angepasst werden, damit sie verwendet werden konnten. Alle Libraries und das Hauptprogramm habe ich auf GitHub unter einer Open-Source-Lizenz verfügbar gemacht.

MAX7219-Matrix-Library

Wichtigster Bestandteil ist die Library MAX7219-Library von "Squix", die mit einigen Patches aus dessen Blog versehen wurde. Sie ist ebenfalls auf GitHub erhätlich: https://github.com/hermann-kurz/MAX7219LedMatrix

WiFi & Webserver

Für das ESP-8266-Modul ist eine WiFi-Library in der Arduino-Library enthalten, die direkt verwendet wird. Das Vorgehen ist so, dass sich das Modul nach dem Einschalten in das WLAN-Netz verbindet. Hierzu sind SSID und Passwort ins Programm einkompiliert.

Nachdem das ESP-Modul im WLAN-Netz ist, zeigt es seine URL mit IP-Adresse auf der Matrix an. Verbindet sich nun jemand mit dieser URL, sieht er eine Seite, wo er Text eingeben kann. Nach Abschicken wird dann der Text angezeigt, bis ein neuer eingegeben wird.

Eine Fallstrick ist noch der Zeichensatz: im Matrix-Modul ist ein Latin1-Font enthalten, über den Browser kommen aber UTF-8-codierte Zeichen rein, die nach Latin1 konvertiert werden.

Vorgehen

Schaltungsaufbau

Zuerst baut man die Schaltung auf. Ich habe dafür aus ein paar Holzleisten ein kleines Gehäuse gebaut, in dem die Display nach vorne bündig reinpassen. 


Hintenrum sieht das nicht sehr schön aus, funktioniert aber prima. Man sieht links die Stromversorgung, in der Mitte das Breadboard mit dem ESP-12 und im Hintergrund die fünf 8x8-Matrizen, die miteinander verbunden sind.


Spannung beachten

Man darf das ESP-12-Modul auf keinen Fall mit 5 Volt  betreiben, es verträgt nur 3,3 Volt. Beim Spannungsregler kann man das einstellen. Ich betreibe auch die LED-Matrizen mit 3,3 Volt. Die würden auch 5 Volt vertragen, das habe ich aber nicht getestet.

Software besorgen

Als nächstes besorgt man sich die Arduino-IDE für den SP8266 https://github.com/esp8266/Arduino uns installiert sie. Dann muss ggf noch ein Treiber für den FTD232-Adapter installiert werden.

Software kompilieren, SSID/Passwort anpassen

Dann holt man sich den Quellcode von https://github.com/hermann-kurz/esp8266WifiMatrix und installiert in der IDE die Library für die MAX7219-Module: https://github.com/hermann-kurz/MAX7219LedMatrix. Um ins eigene WLAN zu kommen muss im Quellcode SSI und Passwort angegeben werden.

Programmieren (Programmiermodus)

Nun kann man das ESP-12-Modul in den Programmiermodus schalten, indem man GPIO-0 auf Masse legt, das Modul programmieren programmieren, und anschließend den Programmiermodus wieder rausnehmen.

Inbetriebnahme

Das Gerät ist damit fertig. Nach Anlegen der Versorgungsspannung startet die Matrix und bucht sich ins WLAN ein. Anchließend wird die eigene URL angezeigt. Im Browser kann man nun einen Text eingeben, der nach dem Abschicken durchscrollt.

Verbesserungsmöglichkeiten

Setup

Momentan müssen SSID und Passwort in den Arduino-Sketch reinkompiliert werden. Da wäre eine eigene Setup-Routine sehr sinnvoll, mit dem man die WiFi-Matrix über einen Browser konfigurieren könnte.

Font

Der verwendete Font ist etwas "fett". Den könnte man etwas schmaler machen, dann würden auch mehr Zeichen auf einmal auf die Matrix passen.

Links