ESP2866 & ESPEasy

Inhalt

Vorstellung der Boards

Der Wemos D1 mini, sowie Node MCU sind Entwicklerboards mit einem ESP8266 Wlan-Chip.

Im Iot sind diese Boards sehr nützlich, denn dank Wlan sind sie, natürlich in entsprechender Reichweite, beliebig platzierbar und können die Werte gleich mehrerer Sensoren auswerten und an Fhem weitergeben. Des Weiteren ist der sehr günstige Preis einen näheren Blick wert.

Wie man anhand der Pins sehen kann, bieten beide Boards viele Anschlussmöglichkeiten und haben so einen entsprechend hohen Wirkungskreis. Die serielle Schnittstelle macht es möglich z.B. einen RFID-Reader zu betreiben (mehr dazu im Kapitel „RFID“), dank normal zu schaltender GPIOs ist es auch möglich z.B. ein Relais zu betreiben. Den I2C-Bus bieten diese Boards ebenfalls. Wer also z.B. ein Display 16×2 oder 20×4 Display betreiben möchte – kann ebenfalls auf so ein Board zurückgreifen.

Die oben genannte Firmware ESPEasy bietet die Möglichkeit das Board über ein Webinterface ziemlich komfortabel zu verwalten.

zurück zum Inhalt

ESPEasy flashen und einrichten

Um ESPEasy auf das Board zu bekommen, benötigt man

  • Ein entsprechendes Board (sollte klar sein)
  • ESPEasy als Zip File
  • USB Datenkabel  (es wird kein FTDI Adapter benötigt)

Vor dem Flashen sollte man wissen, wie viel Flash-Speicher das Board hat. Im Fall vom Wemos D1 mini wären das 4Mbit – meist steht das aber in der entsprechenden Artikelbeschreibung mit dabei oder Google hilft.

Das Board kann nun per USB Datenkabel angeschlossen werden und das ESPEasy Zip File sollte entpackt werden.

ESPEasy

Uns interessiert hier das „FlashESP8266“, dieses wird einfach per Doppelklick geöffnet.

ESPEasy2

Unter dem „COM-Port“ taucht in der Regel von selbst das Board auf (wer auf Nummer sicher gehen möchte kann auch im Gerätemanager nachsehen). Unter „Firmware“ wählt man nun die für das Board passende Datei aus. Im Fall des hier angeschlossenen Wemos D1 mini mit ESP8266 Chip und 4Mbit Flash-Speicher also das blau hinterlegte File.

Nachdem man auf „Flash“ geklickt hat öffnet sich selbständig ein Kommandozeilen-Fenster und beginnt den Flash-Vorgang. Das Flashen dauert etwa 30 Sekunden und wird mit einem kleinen Fenster „Flash complete“ beendet.

Das USB Kabel kann nun vom Computer getrennt  und stattdessen zur Stromversorgung des Boards in ein entsprechendes Netzteil gesteckt werden. Das Board erstellt nun ein eigenen Wlan Hotspot mit dem Namen „ESP_Easy-0“ an das man sich mit dem Passwort „configesp“ anmelden kann.

Screenshot_20180327-192219

Nun öffnet man den Browser und tippt „192.168.4.1“ ein. Es öffnet sich die Konfigurationsseite, wo das Board mit dem heimischem Wlan verbunden werden kann.

Screenshot_20180327-200755

Nach der Eingabe des Passworts wird die Verbindung hergestellt.

Screenshot_20180327-200811

Wenn die Verbindung erfolgreich hergestellt wurde, zeigt ESPEasy für einen kurzen Moment noch die neue lokale IP-Adresse an, über die man das Board nun erreichen und konfigurieren kann – das alles geschieht im Browser.

ESPEasy3

In den Menüs können diverse Einstellungen vorgenommen werden.

Unter „Config“ kann der Hostname, hier „Unit Name“, geändert werden und eine „Unit Number“ vergeben werden. Diese sollte bei der Verwendung mehrerer Boards entsprechend angepasst werden (Board 1; Unit Number 1, Board 2; Unit Number 2 und so weiter). Des Weitern kann man noch ein Passwort für den Benutzeroberfläche von ESPEasy setzen (zu empfehlen).

Unter „Hardware“ finden sich Einstellungen zu den GPIOs des Boards mit entsprechender Nummerierung, die dem Aufdruck des Boards entsprechen (sehr praktisch).

ESPEasy5

Die Status LED auf den meisten Boards ist in der Grundeinstellung abgeschaltet – so ist es natürlich nicht immer ersichtlich, ob das Board derzeit in Betrieb ist. Unter „Wifi Status LED“ lässt sich das ändern. Bei den dort vorgeschlagenen Änderungen leuchtet die LED (beim Wemos D1 Mini) durchgehend (zu Lasten des Energiebedarfs – dies ist inbesondere bei Batteriebetrieb zu beachten).

Die Einstellung  „I2C Interface“, „SPI Interface“ oder „GPIO boot states“ sind soweit selbst erklärend. Je nach Verwendungszweck können der Bus bzw. die Pins gewählt oder als Ein- oder Ausgang (hier mit den Zuständen High und Low) gesetzt werden.

Für die Nutzung in Fhem ist der Reiter „Controllers“ interessant. Hier wird folgende Einstellung vorgenommen

ESPEasy4

Unter Controller IP wird selbstverständlich die IP-Adresse des Fhem Servers eingetragen und das Häkchen bei „Enabled“ gesetzt. Nach einem Klick auf Submit, kann ESPEasy nun mit Fhem kommunizieren.

zurück zum Inhalt

ESPEasy-Bride in Fhem anlegen

Damit Fhem selbst auch versteht was der Wemos da sagt, benötigen wir wieder eine Brücke, die ESPEasy Bridge. Diese wird mit

define Name der Bridge ESPEasy bridge 8383

angelegt.

Am Board betriebene Devices werden meist per Autocreate in Fhem angelegt und sind sofort betriebsbereit.

zurück zum Inhalt

RFID Reader

Es gibt verschiedene Typen von RFID-Readern, die sich über ESPEasy sehr einfach mit Fhem verbinden lassen.

So können dann ausgelesene Tags an Fhem gesendet werden, diese können dann z.B. über ein Notify eine Aktion auslösen.

devices

Hier möchte die beiden Reader P040 „RDM6300“, sowie P017 „PN532“ vorstellen.

zurück zum Inhalt

RDM6300

Das ist ein Reader, der über die serielle Schnittstelle (Tx /Rx) kommuniziert und Transponder im Frequenzbereich von 125 KHz auslesen kann.

datenblatt RDM6300

Da der Reader mit einer Spannung von 5V betrieben wird, müssen die beiden Datenleitungen der seriellen Schnittstelle (Rx/Tx) mit einem Level-Konverter betrieben werden.

P_20180328_194541_vHDR_Auto

Angeschlossen wird das Ganze wie folgt:

  • Node MCU „VU“ -> RDM6300 „P1 / 5 
  • Node MCU „G“ -> RDM6300 „P1 / 4
  • Antenne -> RDM6300 „P2

Serielle Schnittstelle:

  • RDM6300 „P1 / 1“ (Tx) -> Level-Konverter „HV1
  • Level-Konverter „LV1“ -> Node MCU „Rx
  • RDM6300 „P1 /2“ (Rx) -> Level-Konverter „HV2
  • Level-Konverter „LV2“ -> Node MCU „Tx

Unter ESPEasy wird dann ein neues Device angelegt

rdm6300

Hat man alles korrekt angeklemmt und angelegt, kann man zum testen einen Transponder an die Antenne halten, der Tag wird dann unter ESPEasy angezeigt. Zeitgleich wird ein Device in Fhem erzeugt, welches ebenfalls den ausgelesenen Tag anzeigt

rdm63002

rdm63003

Die ausgelesenen Tags können jetzt z.B. in einem Notify weiterverarbeitet werden – damit könnte man eine Alarmanlage scharf schalten, eine Tür freigeben – oder ganz was anderes anstellen.

zurück zum Inhalt

PN532

Anders als der RDM6300 arbeitet der PN532 mit einer Frequenz von 13,56 MHz. Bei der Wahl der Transponder muss darauf geachtet werden, die 125 KHz Transponder können mit diesem Reader nicht ausgelesen werden – dafür allerdings NFC Tags von Smartphones.

P_20180327_180931_vHDR_Auto

P_20180327_181004_vHDR_Auto

Weitere Unterscheidungsmerkmale sind, dass der PN532 keine externe Antenne hat und mit einer anderen Schnittstelle kommuniziert – dem I2C Bus.

Man kann den Reader auch über die SPI Schnittstelle betrieben – für die Anbindung an ESPEasy ist allerdings der I2C Bus vorgesehen. Dafür sind die Pins „GND, VCC, SDA und SCL“ zu verwenden.

Um zwischen den Schnittstellen zu wechseln, sind zwei DIP Schalter auf der Platine vorhanden, die gemäß der Legende, die unterhalb abgedruckt ist,  in Position gebracht werden müssen. (Oben auf dem Bild ist die Einstellung für den I2C Bus ausgewählt).

Der Reader arbeitet mit 3,3V, daher ist kein Level-Konverter nötig.

Wer meine anderen Tutorials gelesen hat, der hat gesehen, dass ich die I2C-Schnittstelle einst deaktiviert habe – das mache ich zunächst Rückgängig, dazu wird in der ESPEasy Oberfläche unter „Hardware“ und „I2C-Interface“ jeweils wieder ein GPIO für SDA und SCL gesetzt.

ic2

Danach kann der Reader angeklemmt werden:

  • PN532 „GND“ -> Node MCU „G
  • PN532 „VCC“ -> Node MCU „3V
  • PN 532 „SDA“ -> Node MCU „D7
  • PN 532 „SCL“ -> Node MCU „D8

Der Node MCU sollte jetzt einmal neu gestartet werden,  danach kann man unter „Tools“ -> „I2C Scan“ nachschauen, ob der Reader erkannt wurde.

i2cscan

Unter „Devices“ kann nun eine neues Device angelegt werden

pn5321

Nach einem Klick auf Submit kann, wie auch beim RDM6300, ein Transponder an den Reader gehalten werden. Der ausgelesene Tag wird in ESPEasy angezeigt und in Fhem ein neues Gerät angelegt.

overview pn532

pn532 fhem.png

Im Grunde ist die Einrichtung an dieser Stelle beendet. Allerdings wäre das ja auch wieder zu einfach.

[Optional aber empfohlen]

Wer sich die „Task Settings“ oben im Device noch einmal genauer ansieht, der stellt fest, dass ein „Reset Pin“ angeschlossen werden kann. Das sollte man auch tun, da der Reader hin und wieder dazu neigt seinen Dienst einfach einzustellen. Abhilfe schafft da nur ein Neustart.

Dazu muss

  • PN532 „RSTPDN“ -> Node MCU „D6

verbunden werden und die Angabe noch in den Task Settings ergänzt werden. ESPEasy sollte nun in der Lage sein den Reader selbständig neu zu starten.

zurück zum Inhalt

Fhem Tipps

Wenn man den Event-Monitor beim übertragen von Tags beobachtet, stellt man mitunter fest, dass der Tag dort mehrfach übertragen wird. Lässt man nun ein Notify eine Aktion auslösen, findet diese Aktion teilweise gleich mehrfach statt – das muss nicht sein, daher empfehle ich

attr event-on-change-reading Tag

damit der übermittelte Tag auch nur einmal im Event-Monitor auftaucht und eine Aktion auch nur einmal ausgelöst wird.

Um einen Tag dann auch mehrmals hintereinander nutzen zu können

attr Tag:

setzen. So ist der Tag nach X-Sekunden wieder „Frei“ und kann die selbe Aktion erneut auslösen.

Ich habe für ein paar Transponder jeweils ein Notify angelegt, dass bei erscheinen des jeweiligen Tags eine Aktion auslöst.

zurück zum Inhalt

Relais

Ein Relais ist ein elektronischer Baustein, der mit zwei Stromkreisen arbeitet.

Im Inneren Befindet sich eine Spule mit Eisenkern, Arbeitskontakte und ein Anker. Die Spule mit Eisenkern befindet sich im sog. Steuer-Stromkreis. Hier genügen kleine Spannungen um an der Spule mit Eisenkern ein Magnetfeld zu erzeugen, dass den sog. Anker anzieht um im Last-Stromkreis die Arbeitskontakte zu schliessen. Die Spannung im Last-Stromkreis kann dabei wesentlich höher sein, es besteht kein unmittelbarer Kontakt zum Steuer-Stromkreis – und genau darin liegt der Vorteil.

Man also hergehen und mit einer Spannung von 3,3V oder 5V z.B. ein 230V Gerät am normalen Stromnetz einschalten.

Am Node MCU V3 mit ESPEasy kann man recht Problemlos mehrere Relais einrichten und anschließend am Ort seiner Wahl arbeiten lassen.

Was man dazu benötigt sind:

  • einen mit ESPEasy geflashten und für Fhem eingerichteten Node MCU V3
  • ein, oder mehrere Relais

P_20180328_185740_vHDR_Auto

  • und Female-Female Jumperkabel

Der Anschluss ist hier ziemlich einfach. Davon ausgehend, dass der Node gegenwärtig an einem Mikro-USB Netzteil hängt, wird das Relais vom Node mit Spannung versorgt – hier genügen 3,3V.

  • Relais „VCC“ -> Node MCU „3V
  • Relais „GND -> Node „G
  • Relais „IN -> Node „D1 (in der Regel kann jeder mit „D“ gekennzeichnete Pin genommen werden, der in ESPEasy nicht anderweitig genutzt wird)

Weiter geht’s in der Oberfläche von ESPEasy unter dem Reiter „Hardware“. Je nach dem welcher GPIO gewählt wurde, muss der entsprechende Modus gewählt werden. Nutzt ihr, wie ich, den GPIO „D1“ und habt kein I2C Device in Benutzung, müssen die beiden I2C Pins auf „None“ gesetzt werden. Der Modus für den „D1“ kann dann auf „Output Low/High“ gesetzt werden. Ein Klick auf Submit übernimmt die Änderungen.

relais1

Als nächstes muss unter dem Reiter „Devices“ ein Gerät angelegt werden.  Falls noch Keins da sein sollte, klickt man unter „1“ auf „Edit“ und wählt im Dropdown ein Gerät vom Typ P001 – Switch Input.

relais2

Der Name kann natürlich frei gewählt werden. Der Haken bei „Enabled“ aktiviert das Gerät.

Der Haken bei „Inversed Logic“ kann bei Bedarf gesetzt werden. Bei dem von mir verwendeten Relais handelt es sich um ein Wechsler-Relais. An diesem Relais befinden sich drei Kontakte – abhängig vom Schaltzustand ist zwischen je zwei Kontakten Durchgang. Wer die Kontakte am Relais so verwendet, dass die grüne LED auf der Relaisplatine bei Durchgang leuchtet, der sollte unter „Hardware“ den Pin Modus auf „Output High“ setzen und „Inversed Logic“ aktivieren – so steht in Fhem „off“ wenn die grüne LED aus ist und „on“ wenn sie leuchtet.

Unter 1st GPIO wird der Pin ausgewählt, an dem der IN Kontakt des Relais mit dem Node verbunden ist – „Send to Controller“ sollte aktiviert werden.

Bei einem Klick auf Submit wird kurze Zeit später ein Gerät in Fhem erzeugt.

relais3

Wie man sieht, wird der vergebene Device-Name aus ESPEasy ebenfalls an Fhem übergeben.

Um das Relais zu schalten, muss nicht mehr gemacht werden, als der jeweilige Status des GPIO Pins über den Set-Befehl zu ändern.

set Devicename gpio D1 0

schaltet das Relais bzw. die grüne LED ein und

set Devicename gpio D1 1

schaltet das Relais bzw. die grüne LED wieder aus.

relais4

Selbes könnte man z.B. auch als webCmd eintragen:

attr Devicename webCmd gpio D1 0:gpio D1 1

und so direkt aus dem Webinterface heraus schalten.

Viel Spaß damit.

zurück zum Inhalt

20×4 I2C Info-Display

Mit einem Display am Node MCU kann man sich sämtliche Daten, die das Board verarbeitet darstellen lassen.

Hier nutze ich ein 20×4 Display mit einem I2C Adapter. Ein 16×2 Display kann man auf die selbe Art und Weise betreiben.

Der I2C Adapter muss zunächst mit dem Display verbunden werden. Ich habe dazu eine Buchsenleiste an den Display gelötet und kann den Adapter so leicht an und abstecken.

Das Display selbst arbeitet mit einer Spannung von 5V – in dem Fall wäre eigentlich ein Level-Konverter notwendig, hier muss man probieren – natürlich erst mit Konverter, um das Board nicht zu beschädigen.

In meinem Fall wurde das Display mit Konverter vom Node MCU nicht erkannt – ohne Konverter funktioniert es einwandfrei. Dies hängt vom I2C-Controller und ggf. verbauten Pull-Up Widerständen ab.

Im nächsten Schritt ist wieder interessant, welche Pins vom Node MCU für den I2C Bus genutzt werden. Dazu wird im Webinterface unter Hardware nachgesehen

ic2

Folglich wird das Display wie folgt angeschlossen

  • Display, I2C-Controller „GND“ -> Node MCU „G
  • Display I2C-Controller „VCC“ -> Node MCU „VU
  • Display I2C-Controller „SDA“ -> Node MCU „D7
  • Display I2C-Controller „SCL“ -> Node MCU „D8

Im Webinterface unter Tools -> I2C Scan sollte man nun den I2C-Controller finden

scan

Die Adresse „0x3f“ muss unter den Device-Angaben übernommen werden, desweiteren können unter den Task Settings im Device auch direkt die Ausgaben gesetzt werden.

Als Device wird „P012 – Display – LCD2004“ ausgewählt und zwar auch, wenn man ein 16×2 Display verwendet. Die entsprechende Angabe über die Größe wird dann unter „Display Size“ gesetzt.

displaydevice.png

In das I2C-Adressfeld wird die vorher im I2C Scan ausgelesene Adresse eingetragen. „Display Button“ kann, auch auf „None“ gesetzt werden.

„Display Timeout“ gibt an nach wie vielen Sekunden das Display abschaltet – 0 hält das Display immer „an“. Unter „Delay“ wird angegeben nach wie viel Sekunden eine Wertänderung an das Display weitergegeben wird.

Die Angaben unter „Line 1 – 4“ setzen die entsprechenden Ausgaben direkt auf dem Display. Ich habe dort in den Zeilen 1,2 und 4 die Angaben aus dem Let’s Controll It Wiki übernommen.

In der 3. Zeile habe ich angegeben, dass ich den ausgelesenen Tag von einem RDM6300 RFID Reader ausgegeben haben möchte.

Selbstverständlich könnte man sich jeden X-Beliebigen Wert eines angeschlossenen Devices anzeigen lassen (z.B. Temperatur und Luftfeuchtigkeit eines entsprechenden Sensors usw. usw.).

Das Vorgehen dazu und weitere Variablen lassen sich bei Let’s Controll it nachlesen.

P_20180402_133116_vHDR_Auto

Zur Nutzung der „System time“ in Zeile 2, muss unter „Tools“ -> „Advanced“ ein NTP Server eingetragen werden.

timezone

Ich habe dort „de.pool.ntp.org“ verwendet und das „Timezone Offset“ auf „120“ Minuten gesetzt, da erst 11, statt 13 Uhr gezeigt wurde.

P_20180402_134220_vHDR_Auto

zurück zum Inhalt

Nachricht von Fhem

Das Display an sich, wird über die ESPEasy Bridge nicht in Fhem als Device angelegt – das liegt daran, dass das Display selbst keine Daten sendet.

Um etwas an das Display zu senden wird Device benötigt, dass durch die ESPBride erzeugt wurde – beispielsweise ein Switch Input, wie er beim Steuern eines Relais angelegt wird.

devices

Als erstes kann man nun in der Weboberfläche des Node MCU die Angaben in den Displayzeilen entfernen.

DisplayNode

Das Display ist nun nackt – und zeigt nach einem Klick auf Submit nur

P_20180505_134449_vHDR_Auto.jpg

an.

Über den, in Fhem angelegten, Input-Switch kann man jetzt Nachrichten auf dem Display darstellen, dazu verwendet man folgende Syntax

set Name des Input-Switch lcd Reihe Zeichen Nachricht

zurück zum Inhalt

Beispiel

Wir schreiben nun mal in Zeile 1, ab Zeichen 1 Tinkerblog.net auf das Display

displaytest

P_20180505_135047_vHDR_Auto

So könnte man z.B. auch ein Reading auf das Display senden.

zurück zum Inhalt

DLCD

ist ein inoffizielles Fhem Modul zur Steuerung von I2C Displays.

zurück zum Inhalt

Installation

Zur Installation muss die Datei 39_DLCD.pm aus diesem Forumsbeitrag in das Verzeichnis /opt/fhem/FHEM eingefügt werden. Das kann man z.B. mit Filezilla erledigen.

Danach startet man Fhem mit

shutdown restart

neu und führt mit

update all

ein Update durch, nach einem weitern Neustart ist das Modul dann einsatzbereit.

zurück zum Inhalt

Definition

Um ein Display mit DLCD zu steuern muss dann erstmal ein Device angelegt werden

define LCD DLCD

Das neue Device kann erstmal rein gar nichts, da es nicht weiß, wie es das Display anspricht. Daher muss erstmal ein Attribut gesetzt werden, dass das Kommando enthält

attr LCD dlcdTriggerCmd set ESPEasy-Input-Switch lcd %L% 1 %T%

Nun weiß  das DLCD Device, dass es mit dem Befehl set ESPEasy-Input-Switch lcd %L% 1 %T% eine Nachricht an das Display senden kann. Die beiden Buchstaben zwischen den Prozentzeichen stehen dabei für die variable Linie und den variablen Text – und sind somit Variablen 😉

Als nächstes müssen die tatsächlichen Zeilen des Displays angegeben werden, dazu setzt man

attr LCD dlcdPhysicalRows 4

Man kann allerdings mehr als die vier echten Zeilen nutzen, in dem man

attr LCD dlcdRows 8

eingibt und gleichzeitig das Attribut

attr LCD dlcdScrolling 1

setzt. So kann man 8 Zeilen an das Display senden und das Modul scrollt ständig durch die insgesamt 8 Zeilen.

Um einen Inhalt an die Zeilen zu senden kann man nun mit

attr LCD dlcdLineZeile Text

etwas an eine Zeile senden. Statt Zeile kann man sich entsprechend der Nummern 1-8 bedienen.

zurück zum Inhalt

Readings ans Display senden

Man kann nun mit der Kombination verschiedene Zeilen-Attribute jedes Reading aus Fhem heraus an das Display senden, Informationen dazu finden sich u.A. im Fhem-Wiki.

Um ein Reading einzulesen erfordert es zunächst ein dlcdVal, z.B. die gemessene Temperatur eines Sensors

attr LCD dlcdVal1 Device:Reading

Das Reading muss auch immer Formatiert werden, dazu nutzt man das Attribut dlcdVal1formatnum, dieses bietet eine Vielzahl an Formatierungen für ein Reading – meist kann man 2+1 nutzen.

attr LCD dlcdVal1formatnum 2+1

Das eingelesene und formatierte Reading kann nun an das Display, an eine Beliebige Zeile gesendet werden. Hier nehmen wir einfach Zeile 1

attr LCD dlcdLine1 Name: %1%

die %1% steht dabei für das dlcdVal1.

Eines neues Reading bekommt also immer auch ein neues dlcdVal, an das Display wird das eingelesene Reading dann immer mit %X% gesendet.

zurück zum Inhalt

Beispiel

Ich habe zur Veranschaulichung mal vier dlcdVal gesetzt und die eingelesenen Readings an das Display gesendet.

dlcd.png

  1. Val1: Temperatur eines Temperatursensors
  2. Val2: Status meiner Xbox
  3. Val3: Status eines Fensters
  4. Val4: Status einer Sonoff S20

Jedes Val wird nun an die entsprechende Zeile gesendet

  1. Line1 – stellt Val %1% dar
  2. Line 2 – stellt Val %2% dar
  3. Line 3 – stellt Val %3% dar
  4. Line 4 – stellt Val %4% dar

Natürlich kann Line 3 auch Val %1%  darstellen – aus Gründen der Übersicht habe ich es aber mal ordentlich gemacht.

Hier das Ergebnis

P_20180505_152233_vHDR_Auto.jpg

Fairer Weise muss ich dabei sagen, dass mein Display, obwohl es 20 Zeichen pro Zeile darstellen kann, immer 16 Zeichen begrenzt, daher musste ich etwas improvisieren.

Es gibt auch eine MQTT-Lösung für die ganze Geschichte mit dem Display – aktuell habe ich allerdings noch keine ausgearbeitet. Vielleicht teste ich das ganze dann mal mit einem OLED-Display und MQTT.

zurück zum Inhalt