Posts mit dem Label ESP8266 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label ESP8266 werden angezeigt. Alle Posts anzeigen

Sonntag, 17. September 2017

Wassermelder mit ESP8266


Die grundlegende Sensormechanik ist dem Homematic Wassermelder entlehnt. In ein Industrie Aufputz Gehäuse IP65 mit den Abmessungen 100x67x50 werden im Boden 5 Spikes eingebaut, ein Spike wird gekürzt um die Möglichkeit eines Wasserstandes zu haben.
Damit ergibt sich eine Bodenfreiheit von ca. 13 mm.
Zwei der Spikes bilden den primären Sensor, läuft Wasser auf dem Boden schließt er den Kontakt zwischen beiden Spikes.


Für die Schaltung braucht man im Wesentlichen neben etwas Draht noch einen ESP12F, 2 x 1 MOhm, 100µF Kondensator und eine Batteriehalterung für zwei AA Batterien.
Ein kleines Stück Universalplatine ein 6 poliger und ein 2 poliger Pfostenstecker sorgen für etwas Komfort beim Aufbau.
Das Schaltungsprinzip geht auf diesen Artikel zurück.

Ich habe aber als Software lediglich ESPEasy aufgespielt.

Funktion

Der Eingang RESET und GPIO16 (D0) wird über einen Jumper verbunden. damit kann man das Modul in den Sleep Modus versetzen und es kann zyklisch oder über den EN Eingang aufwachen.
Der Eingang EN (CH_PD) ist normalerweise über einen Widerstand 1 MOhm nach Masse gezogen, das Modul befindet sich im Sleep Modus und verbraucht nur ca. 16 µA.
Wird der Eingang durch Wasser mit dem Pluspol verbunden (normaler Betrieb) startet das Modul und liefert aktuelle Werte an das ESPEasy Modul von FHEM. Diesen Event kann man in FHEM auswerten.
Der Eingang GPIO14 (D5) wird ebenfalls mit einem Widerstand 1 MOhm nach Masse gezogen und ist mit dem abgesägtem Spike verbunden. Mit ihm könnte "Wasserstand  von ca. 5 mm ermittelt werden.

Betriebsarten

Konfiguration

Das Kabel zu den drei Fühlerspitzen wird entfernt.
Der Jumper wird von den Anschlüssen RST und D0 von J2 entfernt und so auf J6 gesteckt, dass EN und VCC gebrückt werden. Damit startet das Modul im normalen Modus.
Vorsicht, jetzt zieht das Modul dauerhaft ca. 80 mA. Wird es jetzt schon mit Batterie versorgt ist diese nach ca 15 Stunden (oder eher) leer.

Bei einem neuen Modul wird jetzt das Netzwerk konfiguriert.
Grundlegend ist die Konfiguration hier beschrieben

Nach dem Neustart unter dem Reiter Config:

  • ein sinnvoller Unit Name vergeben.
  • FHEM Server eintragen
  • Im Reiter Devices
    • Gerät definieren, System RSSI
    • Gerät definieren, Switch, GPIO14, kein Pullup


Nach dem die Geräte in FHEM automatisch angelegt wurden kann man den ESP in den Sleep Mode schicken: Unter Reiter Config Häkchen setzen. Mit der Zeitspanne in µsec kann man erreichen, dass sich der Melder immer wieder schlafen legt und in diesem Abstand eine erneute Meldung absetzt.

Normaler Betrieb

Jetzt zieht man den Jumper von J6 und steckt ihn auf J2 D0-RST
Das Gerät darf jetzt nicht mehr erreichbar sein.
Die Fühlerspitzen werden mit + EN D5 verbunden.

Reset Konfiguration

Ist das ESP Modul nicht mehr erreichbar oder soll neu konfiguriert werden, kann ESP-Easy zurückgesetzt werden. 
  • Das Kabel zu den Fühlerspitzen wird entfernt.
  • Ein zweiter Jumper wird so gesteckt, das an J6 TX und RX verbunden sind.
  • Der Jumper auf J6 wird so gesteckt, dass EN und VCC gebrückt werden.
Betriebsspannung einschalten und warten bis Wlan ESP_0 zu sehen ist. Dies dauert eine Weile!

Test 

Einfach die beiden Spikes mit feuchtem Finger verbinden, die blaue LED am ESP muss kurz aufleuchten und in FHEM muss ein Event erzeugt werden.

Konfiguration in FHEM

Hier noch eine Beispieldefinition
define ESPEasy_Wassermelder_WM1 ESPEasy 192.168.100.137 80 espBridge Wassermelder_WM1
attr ESPEasy_Wassermelder_WM1 IODev espBridge
attr ESPEasy_Wassermelder_WM1 Interval 300
attr ESPEasy_Wassermelder_WM1 event-on-change-reading .*
attr ESPEasy_Wassermelder_WM1 eventMap /gpio 14 on:on/gpio 14 off:off/
attr ESPEasy_Wassermelder_WM1 group ESPEasy Device
attr ESPEasy_Wassermelder_WM1 presenceCheck 1
attr ESPEasy_Wassermelder_WM1 readingSwitchText 1
attr ESPEasy_Wassermelder_WM1 room ESPEasy
attr ESPEasy_Wassermelder_WM1 setState 3

define Wassermelder_DOIF DOIF ([ESPEasy_Wassermelder_WM1:presence] eq "present") (set Wassermelder_dummy on)\
DOELSE (set Wassermelder_dummy off)
attr Wassermelder_DOIF do always
attr Wassermelder_DOIF icon helper_doif
attr Wassermelder_DOIF room Boden

Freitag, 14. Juli 2017

Elektrodrachen und so

Fertige IoT Module mit dem ESP Modul gibt es mittlerweile Einige. Von SonOff eine ganze Palette, dazu gibt es auch schon Anleitungen im FHEM Wiki.
Eine Alternative mit nicht so breiter Palette liefert Electrodragon. Ich habe mir zwei Module (SPDT und VDC Version ist die Bezeichnung von Electrodragon) von denen bestellt und möchte die Einbindung in FHEM hier kurz vorstellen.
All diesen Modulen gemeinsam ist, dass sie quasi ohne Lötarbeit für FHEM einsatzbereit gemacht werden können, der Interface Stecker zur Programmierung ist schon vorhanden. Die Module enthalten den ESP 12E Baustein mit 4 MB Flash.
Im Gegensatz zu SonOff liefert Electrodragon keine fertige Software und keine App mit. Diese Module sind für den "normalen Anwender" also nicht brauchbar.

Achtung: 

  1. Niemals die Module programmieren oder im offenen Zustand betreiben wenn sie mit dem Stromnetz verbunden sind!
  2. Die Stromversorgung während der Programmierung erfolgt besser durch eine separate 5 V oder 3,3 Volt Spannungsquelle. Sonst ist der Erfolg beim Flashen nicht gewährleistet. Beim Betrieb mit 3,3 Volt funktionieren die Relais nicht sauber! 
  3. Es sind keine Güte- und Prüfsiegel vorhanden! 

Electrodragon liefert derzeit 3 fertige Relais Module, zwei mit SPST Relais (einfacher Schließer) und eines mit SPDT Relais (Umschalter). Leider ist die Beschreibung im Shop relativ dürftig, es sind aber die Schaltpläne verfügbar. Alle Module verfügen über einen bestückten 12 poligen Steckverbinder zum Anschluss der Programmierumgebung und eventuell weitere Komponenten. Sie verfügen weiterhin um einen vorbereiteten Lötanschluss für einen DHT22. Das SPST Modul mit Niederspannungsversorgung hat zusätzlich einen vorbereiteten Lötanschluss für D0-D3 VCC GND.

Verwendungsmöglichkeiten aus meiner Sicht


SPDT Variante
Separates Netzteil zur Speisung 65-250 Volt AC, der Speiseeingang ist nicht mit den Relaiskontakten verbunden! Die Umschaltkontakte der beiden Relais sind separat herausgeführt. Die Kontakte sind damit potentialfrei.

SPST Variante mit Stromversorgung 85-250 Volt AC
Die Schließerkontakte der beiden Relais sind einseitig bereits mit der Speisespannung verbunden. Dieses Modul ist zum Einsatz von Schaltaufgaben mit minimalem Verkabelungsaufwand im Haushalt gedacht. Die Netzspannung kann auf zwei Verbraucher geschaltet werden, sowohl Versorgung als auch Verbraucher haben separate zweipolige Klemmen.

SPST Variante (VDC Version) mit Niederspannung Gleichstromversorgung 5-24 Volt DC
Im Auslieferungszustand sind die Schließerkontakte der beiden Relais einseitig bereits mit der Speisespannung verbunden. Der Pluspol der Speisespannung kann auf zwei Verbraucher geschaltet werden. 
Das Board bietet aber die Möglichkeit den Pluspol der Speisespannung und Schaltspannung zu trennen. Außerdem bietet es die Möglichkeit das Modul separat mit 5 Volt zu versorgen. Dabei ist die Schaltspannung der beiden Relais wählbar (AC oder DC). 
Die Eingangsspannung kann auf zwei Verbraucher geschaltet werden, sowohl Versorgung als auch Verbraucher haben separate zweipolige Klemmen. Man hat damit auch ein Modul mit Niederspannungsversorgung und zwei potentialfreien Schließerkontakten. 
Die Konfiguration der einzelnen Varianten erfolgt mit Jumpern bzw. Lötbrücken.

Praktisches Einsatzbeispiel

Mein Freund Steffen hat mit einem SPST Modul einen Zwischenstecker realisiert. Für kleines Geld gibt es z.B. bei conrad ein universelles Gehäuse (TRU COMPONENTS TC-SG 1022 SW203) und einen Dichtring (TRU COMPONENTS TC-SG 1015 SW203).

Programmierung

Electrodragon hat eine Art Demo Software vorinstalliert, mit der man einen MQTT Server anbinden kann. Ich will das Modul mit ESPEasy flashen und an FHEM anbinden.
Notwendige Hardware: 
Eine serielle Schnittstelle mit 3,3 Volt Logikpegel! (z.B. FTDI USB Adapter)
Eine 5 Volt oder 3,3 Volt Stromversorgung die etwa 300 mA liefern kann. 

Achtung!
Der typische FTDI Adapter kann nur 50 mA liefern und eignet sich nicht zur Stromversorgung! 
Man könnte das Modul über den 5 Volt Anschluss direkt vom USB versorgen, allerdings hat mein FTDI Adapter dafür kein Pin. Mit dem CP2102 Adapter geht das.

Ich verwende ein Breadboard, eine 5 / 3,3 Volt Stromversorgung fürs Breadboard und einen USB/seriell Adapter (mit CP2102 oder FTDI Chip aber unbedingt (3,3 Volt !) sowie ein paar Steckbrücken.
  • Spannungsversorgung aus!
  • Alle Masseanschlüsse werden verbunden, Spannungsanschlüsse am USB/Seriell Wandler werden nicht mit der separaten Versorgung verbunden
  • Stromversorgung an das Modul, Aufpassen! Entweder -> 5 V an 5 V ODER 3,3, V an 3,3 V
  • RX von der seriellen Schnittstelle an TX vom Modul
  • TX  von der seriellen Schnittstelle an RX vom Modul
  • USB Stecker an USB seriell Adapter
  • Spannungsversorgung ein.
Wird die allgemeine Spannungsversorgung mit verbundenem TX RX aber spannungslosem USB/seriell Wandler hergestellt, kann es sein, dass der ESP nicht richtig startet oder sogar "Factory Reset" durchführt.

Zum flashen muss beim Einschalten der Spannungsversorgung, der BTN2 (BTN) Knopf gedrückt  werden. Als Quittung leuchtet die Status LED dauerhaft. Die Bezeichnung der Knöpfe im Plan und Aufdruck ist nicht ganz konsistent.
Man muss beim Aufbau dafür sorgen, dass man leicht mit einer Hand die Stromversorgung stecken kann (Breadboard und Steckbrücke).
Im Detail ist der Flashvorgang hier beschrieben 

Auf dem SPST/VDC Board ist der zweite Knopf (RST) wirklich der Reset Knopf.
Auf dem SPST (Netzteilversion) /SPDT Board ist der zweite Knopf (BTN1) mit GPIO-02 verbunden. Hier muss der Reset also durch kurze Spannungsunterbrechung erfolgen.

Die Einbindung in FHEM zeige ich in diesem Artikel

Montag, 10. Juli 2017

Einbindung von ESPEasy Schaltern in FHEM

Die aktuellen Informationen findet man in der Doku  und im Forum.
Hier habe ich schon mal die Einbindung beschrieben.
ESPEasy kennt kein Relais Gerät als Output. Es kennt nur einen Switch Input. Ein GPIO Pin wird in dem Moment, wo man einen logischen Zustand setzt, einfach auf Ausgang gesetzt. Beispiel
in der ESPEasy Weboberfläche gpio,12,1
in FHEM set <ESPEasy Device Name> gpio 12 on
Genau genommen bräuchte man in ESPEasy für FHEM nichts definieren, allerdings würde das ESPEasy Modul dann auch kein Gerät erzeugen. Da man von seinem Schalter ja auch Lebenszeichen erhalten will, konfigurieren wir die Übertragung der Feldstärke (rssi) und als Status Rückmeldung einen Switch Input. Der eigentliche Schaltvorgang wird über eine eventMap erzeugt.
Durch die Wahl des Namen auf den Deviceseiten erzeugt man in FHEM ein oder mehrere Geräte. Der Name muss also nicht Unikat sein und soll es für diesen Fall auch nicht! Bei gleichen Namen erzeugt FHEM einfach ein weiteres Reading. Der Name im Feld Value bestimmt den Namen des Reading.

ESPEasy konfigurieren

Nach der WLAN Konfiguration mit dem Smartphone (mit ESP_0 verbinden) kommt man mit http://newdevice auf die Weboberfläche. Ich habe diesmal mit der Version 2.0.0 dev10 gearbeitet.
Die einzelnen Konfigurationsschritte (Seiten) immer mit Submit abschicken und das Häkchen bei Enabled nicht vergessen!

Config
Den Namen setzen: EDSPST1
Der neue Name ist im Browser sofort sichtbar, wirkt als Hostname aber erst nach dem nächsten Neustart.

Controllers
Hier ist ein Wert per default vorkonfiguriert, den ändern wir mit Edit.
Hinweis: Das Feld für Controller User und Password wird nur ausgefüllt wenn in FHEM bei der espBridge das Attribute authentication auf 1 gesetzt ist und die Werte für user und pass übergeben wurden!

Hardware
Keine Änderung.

Devices
Hier konfiguriert man zunächst zwei Geräte für die Relais, welche mit GPIO-12 und GPIO-13 verdrahtet sind.


Zusätzlich konfiguriert man noch den RSSI Wert, damit hat man eine Information über den WiFi Empfang des Moduls und dieser Wert sorgt für permanente Status Updates. Dieses Gerät erzeugt man zweimal, nur der Name wird unterschiedlich SW1 bzw. SW2.

Zum Schluss sieht die Konfiguration so aus

Pro vergebenen Device Namen (Name Spalte) wird von der espBridge ein Gerät erzeugt. Der Value Name (Value Spalte) erzeugt je ein Reading.
In FHEM sind durch diese Konfiguration zwei Geräte mit je zwei Readings entstanden.

FHEM konfigurieren

Durch die Übertragung der rssi Werte hat die espBridge in FHEM zwei Geräte erzeugt mit dem Namen ESPEasy_EDSPST1_SW1 und ESPEasy_EDSPST1_SW2. Diese muss man jetzt noch so konfigurieren, das die Schalter auch bedient werden können. Das wichtigste ist eine eventMap:
attr ESPEasy_EDSPST1_SW1 eventMap /gpio 12 on:on/gpio 12 off:off/
attr ESPEasy_EDSPST1_SW2 eventMap /gpio 13 on:on/gpio 13 off:off/
Damit entstehen on und off Kommandos für den set Befehl und für webCmd. Jetzt kann man die Schaltfunktion prüfen.

Damit der Status richtig angezeigt wird, braucht man noch ein angepasstes stateFormat

attr ESPEasy_EDSPST1_SW1 stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Switch","")}

Das sieht jetzt schon mal gut aus, ist aber noch nicht perfekt.

Nur mal zur Vollständigkeit die bis hierher komplette Definition, also das automatisch Erzeugte und Ergänzungen/Änderungen:
defmod ESPEasy_ED230V_SW1 ESPEasy 192.168.178.107 80 espBridge ED230V_SW1
attr ESPEasy_ED230V_SW1 IODev espBridge
attr ESPEasy_ED230V_SW1 Interval 300
attr ESPEasy_ED230V_SW1 eventMap /gpio 12 on:on/gpio 12 off:off/
attr ESPEasy_ED230V_SW1 group ESPEasy Device
attr ESPEasy_ED230V_SW1 presenceCheck 1
attr ESPEasy_ED230V_SW1 readingSwitchText 1
attr ESPEasy_ED230V_SW1 room ESPEasy
attr ESPEasy_ED230V_SW1 setState 3
attr ESPEasy_ED230V_SW1 stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Switch","")}


Mit attr <> setState 0 kann man die interne Erzeugung des state Readings ausschalten. Nun kann man mit verschiedenen Methoden z.B. einem userReadings sein eigenes state erzeugen.
state {ReadingsVal($name,"Switch","") }

Noch die Idee aus dem Forum für on-for-timer muss ich noch probieren

attr <deinEsp> eventMap /longpulse 5 on:on-for-timer/longpulse 5 off:off-for-timer/gpio 5 on:on/gpio 12 off:off/status gpio 15:check/

Hier wird noch gearbeitet ...

Montag, 2. Januar 2017

ESP8266 in FHEM

Der ESP8266 Baustein kann ziemlich einfach an FHEM angebunden werden. Das FHEM Modul wird zur Zeit in einem Entwicklerthread vorgestellt.

Vorbereitung

Das Modul braucht das debian Paket libjson-perl.

sudo apt-get update && sudo apt-get install libjson-perl

Seit März 2017 ist ESPEasy offiziell in FHEM enthalten, der folgende Befehl ist nicht mehr nötig.
 Es handelt sich um ein "Entwicklungsmodul" ist also nicht normaler Bestandteil der FHEM Installation. Es lässt sich aber einfach in unsere Installation einbinden, anstatt es nur einmal als Datei herunterzuladen und umständlich in den FHEM Ordner zu kopieren:
update add https://raw.githubusercontent.com/ddtlabs/ESPEasy/master/controls_ESPEasy.txt
update all https://raw.githubusercontent.com/ddtlabs/ESPEasy/master/controls_ESPEasy.txt
shutdown restart

In FHEM wird quasi ein kleiner Web Agent/Empfänger - die Bridge - auf Port 8383 bereitgestellt. Das Port ist natürlich "frei" wählbar.

define espBridge ESPEasy bridge 8383

Damit ist die das Modul empfangsbereit, alles weitere passiert weitestgehend automatisch. Die Bridge erzeugt die eigentlichen Geräte entsprechend der Konfiguration im ESP automatisch. Man braucht nur ein Bridge für mehrere ESP Module.
Das Modul enthält die Dokumentation, sie ist in der lokalen commandref zu finden. Das Modul wird durch diese Installation beim normalen update aktualisiert.

Installation ESP8266

Zunächst muss man auf dem Modul ESPEasy installieren/flashen. Die aktuelle Firmware findet man bei www.letscontrolit.com über diesen Link. Unbedingt den aktuelle release candidate nehmen, derzeit R147_RC8!

Update 07.03.2018
Mittlerweile gibt es eine ESP-Easy Version 2.0.0 und 3
In der Zip Datei ist jetzt das Tool FlashESP8266.exe, dort kann man COM Port und bin Datei (im gleichen Pfad) einfach per Drop Down auswählen. Das Konfigurationsnetzwerk meldet sich jetzt ESP_Easy_0. Die Weboberfläche ist leicht verändert.

Die zip Datei enthält ein paar Dateien und das Flash Programm.
Nach dem Anschluss des Moduls an den USB Anschluss müssen wir im Gerätemanager den COM Port herausfinden (Anschlüsse (COM & LPT) Bei mir COM5.
Es darf ab jetzt kein "serieller Monitor" auf die COM Schnittstelle zugreifen!
Jetzt wird die Datei flash.cmd gestartet, diese fragt zunächst die Parameter ab:

Comport -> nur die Zahl eingeben -> 5
Size - je nach Modul in kByte eingeben -> ESP12F -> 4096
Buildnummer -> R147_RC8 -> 147

Achtung: gern wird die Flashsize auch in kbit angegeben. Ein ESP01 hat 4096 kbit= 512 kByte. Ein ESP12F hat 4096 kByte=4 MByte.

Das Programm erwartet die Datei ESPEasy_R147_4096.bin im gleichen Pfad und startet mit dem esptool.exe den Flashvorgang. Hektisches Blinkern der blauen LED auf dem Modul zeigt die Datenübertragung an. Beim ersten Flashen mit ESPEasy wird nach dem Neustart zunächst der gesamte Flashspeicher gelöscht, dieser Vorgang dauert etwas. Also nicht unruhig werden wenn das Wlan ESP_0 nicht gleich sichtbar wird.
Dieser Flashvorgang löscht nicht jedesmal den kompletten Speicher, das Modul kann auf eine neue Version geflashed werden und die Konfiguration bleibt erhalten! (Der NodeMCU Flasher formatiert den Flashspeicher nach dem Neustart immer komplett.)

Einrichtung des ESP8266

Man sollte nach dem Flashen etwa eine Minute warten und dann den Reset Knopf am Modul drücken. Während dieser taucht ein offenes Wlan ESP_0xxxxx auf. Damit kann man m.M. nichts anfangen.
Es dauert ein paar Sekunden bis sich das Modul nach dem Start  mit einem eigenen verschlüsselten WLAN ESP_0 meldet. Hier findet man die Beschreibung.
Man verbindet sich am einfachsten mit dem Smartphone zu diesem WLAN, das WPA Kennwort ist configesp.
Normalerweise wird man nach der Verbindung sofort auf die Konfigseite des Moduls geleitet.

Dort trägt man seine WLAN Konfiguration in die Weboberfläche ein.

Falls es nicht automatisch passiert löst man die WLAN Verbindung mit dem Smartphone.
Es kann sein, dass das Wlan ESP_0 nach kurzer Unterbrechung wieder verbunden erscheint und man aufgefordert wird sich wieder anzumelden. Diese Anmeldung erfolgt nur für eine Sekunde und das Wlan ESP_0 verschwindet. Ich habe im seriellen Monitor beobachtet, dass man dies auch tun sollte. Erst dann wird er Flash geschrieben und der Baustein neu gestartet. Dies dauert wenige Sekunden.








Nach einem Neustart kann man sich nach kurzer Zeit zu http://newdevice verbinden.
Auf der config Seite konfiguriert man mindestens folgende Felder.

Name: <Eindeutiger Name> damit es im eigenen Netzwerk auffindbar ist.
Protocol: FHEM HTTP
Locate Controller: Auswahl entweder Name oder IP Adresse
Controller IP: <IPAdresse des FHEM Servers>
Controller Port:8383 (Das Gleiche wie beim define der Bridge)

Mit submit speichern!

Die blauen Fragezeichen verlinken ins Wiki, meist mit nützlichen Informationen.

Wenn man jetzt auf der Devices Seite ein Gerät konfiguriert sieht man das Ergebnis nach kurzer Zeit in FHEM.
Als Beispiel kann man dort System Info auswählen. Egal was man dort in der weiteren Klappleiste auswählt man sollte zumindest die Felder Name IDX und Value Name ausfüllen um sinnvolle Einträge zu bekommen.


Hier als Beispiel die RSSI Werte des WiFi Moduls:


Und so sieht es dann nach kurzer Zeit in FHEM aus ->







Tipps

Um die flash.cmd Datei gleich im richtigen Pfad zu öffnen, geht man in Windows auf den Ordner in dem die Datei liegt und drückt die Umschalttaste und gleichzeitig mit der rechten Maustaste das Context Menü - hier kann man den Punkt Eingabeaufforderung hier öffnen auswählen. Bei Windows 10 ab Version 1703 wird hier die Powershell angeboten. In dieser läuft die flash.cmd nicht -> einfach cmd & enter eintippen um die alte commandshell zu starten! Für häufigere Flashvorgänge sollte man sich eine angepasste Batchdatei erstellen.

Auf der Seite Tools kann man den Befehl reset absetzen, der löscht alle Einstellungen und versetzt das Modul wieder in den AP Modus - ohne das man neu flashen muss. Danach bootet das Modul von selbst wieder. Der Löschvorgang dauert etwa 1:40 min. Also nicht unruhig werden, wenn man darauf wartet, dass ESP_0 wieder erscheint.
Das funktioniert auch im Browser: http://<ESP Name>/tools?cmd=reset. Achtung wenn man diesen Befehl abgesetzt hat, bleibt das Fenster so stehen, wechselt man wieder in dieses Fenster oder drückt Refresh wird der Befehl sofort erneut gesendet.
Man kann "Factory Reset" auch per Hardware machen: Einfach RX und TX verbinden und neu starten. Den Trick habe ich hier  als Ausweg aus dem Deep Sleep gefunden.

Auf der Seite tools kann man auch die gesamte Konfiguration speichern und wiederherstellen. Der Dateiname endet zwar per default auf txt, es ist aber keine Textdatei. Man kann damit also nur die komplette Konfiguration übertragen, inklusive Gerätenamen usw. und leider nicht zwischendurch editieren.

Stromversorgung

Der verbreitete FTDI Chip darf laut Datenblatt 50 mA liefern, das ESP Modul kann bis zu 300 mA Spitzenstrom ziehen und verbraucht schon im normalen Modus ca. 50-70 mA. Die handelsüblichen FTDI Adapter ohne separaten Spannungsregler sind damit ohne externe 3,3 Volt Versorgung ungeeignet. Alle Developerboards haben separate Spannungsregler!

Fehlerquellen

Die Stromversorgung des ESP Bausteines ist nicht unkritisch. Häufig sieht alles gut aus, der Flashvorgang läuft durch aber anschließend funktioniert nicht alles -> Der Flashinhalt ist korrupt!
Ein billiger FTDI Adapter z.B. liefert nicht genügend Strom um den ESP zu betreiben. Ein zu langes mehrfach gestecktes USB Kabel kann sich als Fehlerquelle entpuppen.

Wenn sich der Baustein eigenartig verhält, ESP_0 nicht erscheint sondern ein anderes Wlan ESP_xxxx oder der Baustein nach korrektem Eintrag der SSID und Passwort und der Anmeldung im Wlan nicht als http://newdevice erreichbar ist -> unbedingt Stromversorgung des Bausteins prüfen!

Mittwoch, 14. Dezember 2016

ESP8266 12F

Ein 32 bit Prozessor, 4MByte Speicher, digitale GPIO und ein ADC Eingang und WLAN - das alles auf 2 cm². Dazu einfachste Programmierung - fast zu einfach!?

Das eigentliche kleine Modul ist natürlich erstmal schwer zu handhaben. Man braucht 3,3 Volt Betriebsspannung, USB Serial Wandler.
Aber es gibt ja fertige Boards, ich habe verschiedene ausprobiert. Die kann man einfach mit micro USB Kabel anschließen und es kann sofort losgehen. Aber wie? Je nach dem welches Modul man kauft hat man eine bestimmte Firmware vorinstalliert. Welche genau ist nicht immer vorhersehbar, vielleicht auch nicht wichtig.
Die Basisversion auf dem Modul kann mit einigen AT Befehlen gesteuert werden.

Ich würde das Wemos D1 mini bevorzugen und mit ESP Easy oder NodeMcu LUA arbeiten. Aber da muss ich mich noch ein wenig einarbeiten. ESP Easy ist aber wirklich ganz easy und vor allem auch schnell an FHEM angebunden.
Wahrscheinlich kann man mit ESPEasy ganz leicht ein paar Sensoren und unterstützte Geräte anbinden aber mit LUA die Dinge tun die darüber hinausgehen.

Verschiedene Module

Ich habe folgende Module ausprobiert:
ESP12E DEVKIT V2 von doit.am obwohl dort ESP12E dran steht ist ein ESP12F Modul drauf. Vorinstalliert ist eine LUA Firmware. Leider ist mein Modul eventuell kaputt. Es lässt alles mit sich machen, aber bei ESP Easy überlebt es den Power Reset nicht.
Wemos D1 mini von wemos.cc auch dies kommt mit NodeMcu Lua Firmware vorinstalliert. Außerdem liegen dem Modul zwar alle Stift- und Steckerlisten bei, sie sind aber nicht verlötet. Das Modul erscheint mir die zweckmäßigste Version zu sein!
LoLin NoneMcu V3 von wemos.cc wobei man auf der Seite nicht zu diesem Modul findet. Vorinstalliert ist eine AT Firmware. Es ist mechanisch gesehen das größte Modul meiner Serie - und damit fast unbrauchbar: Auf dem typischen Breadboards mit 2 x 5 Pins in Reihe belegt es die komplette Breite und begräbt die freien Kontakte unter sich. Damit kann man nichts mehr anschließen, man braucht eine großes/breites Breadboard.
Witty Board für die "witzige Wolke". Dieses Board ist zweiteilig gestapelt, auf dem Hauptmodul ist nur der ESP12F und der Stromanschluss angebracht. Als kleines Spielzeug ist in den Ecken eine RGB LED und ein Photowiderstand verbaut. Damit ist der ADC Anschluss schon belegt und 3 GPIO Pins. Auf der zweiten Platine ist USB Adapter untergebracht. Mann kann also die Hauptplatine nach dem Flashen/Programmieren trennen und mit 5 Volt Spannungsversorgung betreiben.
Das Modul hat eine Gizwits APP Firmware installiert, die ist aus meiner Sicht zu nichts zu gebrauchen.

Alle Module haben einen Reset Knopf um das Modul neu zu starten.
Nur das Wemos D1 mini hat keinen Flashtaster, den man aber eigentlich sowieso nie braucht.
Der ADC Eingang ist teilweise mit einem Spannungsteiler 3:1 beschaltet.

Die Module haben alle einen Spannungsregler AS1117 an Board. Soweit ich das verstanden habe, wird auch der USB-Seriell Chip CH340 mit 3,3 Volt gespeist. Damit sind alle Module eventuell sehr tolerant an VIN bzw VCC und es müssen nicht exakt 5 Volt anliegen wenn man nicht über die USB Schnittstelle speist. Zumindest bei den beiden großen Boards habe ich auch Angaben gefunden 4,5 - 10 Volt, theoretisch kann der AS1117 bis zu 15 Volt.
Das ESP12F Modul an sich ist nicht tolerant -> nur 3,3 Volt anschließen!

Firmwareversionen

AT Firmware

Geholfen hat mir diese Seite
Dazu braucht man das Flash Download Tool von ESPRESSIF und die aktuelle AT Firmware in Form des NONOS SDK von dieser Seite. Die latest Version auswählen un dann findet man das Download ganz unten auf der Seite unter Attachments.
Hat man das SDK entpackt wechsel man in den Pfad .\bin\at\ dort befindet sich eine Readme welche Datei auf welche Speicheradresse zu flashen ist. Für einen ESP-12F wählt man 4(5) Dateien aus:

eagle.flash.bin           -> 0x00000
eagle.irom0text.bin       -> 0x10000
blank.bin                 -> 0x7e000
blank.bin                 -> 0x3fe000
esp_init_data_default.bin -> 0x3fc000

Defaultwerte lassen, aber FLASH-SIZE auf 32 Mbit stellen. COM Port richtig einstellen!
Mit wenigen Befehlen ins Netzwerk:

AT
AT+GMR
AT+CWMODE=1
AT+CWJAP="SSID","Password"
AT+CIFSR

Diese Einstellung wird sofort auch gespeichert und überlebt ein Power Reset.


NodeMCU Firmware

Die Firmware NodeMCU bringt eine LUA - Scriptsprache basierte Umgebung.
Die Firmware und alle Tools kann man von dieser Seite beziehen. Man muss sich die Firmware aber aktuell immer "bauen" lassen. Der Einstieg für diesen unkomplizierten und vollautomatischen Prozess findet sich hier.
Für den Umgang und das Handling der Programme gibt es eine Java basierte Software namens ESPlorer. Den Umgang mit diesem Tool fand ich irgendwie sehr fremd.
Dieser Artikel hat mir dabei geholfen. Der NodeMCU Flasher ist relativ einfach zu bedienen und kann wie alle anderen Flasher natürlich auch andere bin Dateien flashen.
Die NodeMCU Firmware formatiert beim ersten Start den FLASH Speicher, so das alle alten Reste entfernt werden.
Mit wenigen Befehlen ins Netzwerk:

wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","Password")
ip = wifi.sta.getip()
print (ip)

Diese Einstellung wird nicht gespeichert, dazu müsste man einen Datei init.lua anlegen. Dies ist ein Init Script welches beim Neustart abgearbeitet wird. Hier finden sich viele Beispiele im Netz.

ESP Easy

Von Let's Control It gibt es die wohl am einfachsten zu bedienende Firmware. In dem verlinkten Wiki Artikel findet man alles, inklusive der Firmware. Die Firmware ZIP Datei enthält auch einen Flashtool, die Datei flash.cmd wird einfach gestartet und fragt drei Parameter ab: COM Port, Speichergröße in MByte und zu flashende Version.
ESP Easy startet eine Webserver, man konfiguriert die Verbindung zum eigene Wlan und nach einem Neustart kann man beginnen.
Achtung:  Bei diesem Flashvorgang werden die Einstellungen für das WLAN nicht überschrieben! Fehlerhafte Konfigurationen kann man damit nicht löschen!
Die Entwicklung dieser Software und auch der Webseite schreiten offenbar sehr dynamisch voran. Falls die Links nicht funktionieren: http://www.letscontrolit.com/ und dann zu ESP Easy scrollen und dort Wiki klicken. Download oder Software Links sucht  man auf der Homepage vergebens.
Mit wenigen Schritten ins Netzwerk:
WLAN mit der SSID ESP_0 suchen (manchmal auch ESP_0xxx)
Browser öffnen falls dies nicht automatisch geschieht, man landet sofort auf auf einer Webkonfigurationsmaske. SSID und Passwort eintragen.
Nach dem Neustart des Moduls kann man sich auf die IP Adresse oder auf http://newdevice verbinden.
Will man das Ganze in den Ursprungszustand versetzen (Reset) dann muss man sich mit einem seriellen Monitor verbinden und "blind" Reset (reset) eintippen. Man darf bei putty ctrl+m ctrl+j (CR LF) nicht vergessen.
Man hat leider kein lokales echo.
Es kann einen Moment dauern, bis der Vorgang mit FLASH:  Erase Sector: ... quittiert wird.
Nach dem Abschluss des Löschens erfolgt ein normaler Boot im AP Modus.

GizWits Firmware

Das sogenannte Witty Modul bringt eine eigene Firmware mit. Hier habe ich ein paar Infos dazu gefunden. diese Firmware ist dafür gedacht sich mit einer App zu verbinden und dann über eine Cloud etwas zu konfigurieren/programmieren. Aus meiner Sicht "witzlos". Das Modul ist offenbar für den chinesischen IoT Markt gedacht. man sieht ein paar Konsolen Ausgaben bei 115200 bps aber bedienen lässt sich nichts. Das Modul spielt selbständig etwas mit seiner RGB LED.

Tipps und Tricks

Firmware flashen

Der Speicher des ESP8266 ist in bestimmte Bereiche aufgeteilt und die Firmware ist auch OTA flashbar. Damit wird beim flashen nicht automatisch alles überschrieben. Also nicht wundern wenn die WIFI Konfiguration noch im Flash steht, obwohl man per USB geflashed hat und gehofft hat damit alles zu überschreiben.

Speichergröße

Zu allen Angaben zu Speichergrößen muss man beachten, dass manchmal von Mbit und manchmal von MByte gesprochen wird. Die kleinsten ESP hatten 4 Mbit= 512kByte Speicher. Der ESP8266 12F hat 32 Mbit=4MByte Speicher. Also nicht fälschlicherweise die Anleitung für 4 Mbit lesen obwohl man 4 MByte hat.

Wiederbelebung

Wen man sich mal "verflashed" hat - hilft die Baudrate der Schnittstelle auf 74880 bps (ich habe auch Angaben zu 76800 bps gefunden) zu stellen.
Dies ist die Baudrate vom "first bootloader".
Offenbar gibt es Situationen wo sich das Programm zum flashen nicht mehr auf eine Baudrate mit dem ESP Baustein einigen kann.
Der Nodemcu Flasher kann das im Dialog (Advanced).

Serielles Terminal

Womit kann man jetzt ganz einfach mal über die COMx Schnittstelle mit dem ESP kommunizieren?
Nicht besonders komfortabel geht es auch über putty. Ich habe das Programm ja ständig beim Wickel als ssh Konsole für meine Himbeeren.
Also bei der Verbindung die serielle Schnittstelle auswählen. Dabei neben der Geschwindigkeit vor allem darauf achten: Flow control auf none zu stellen.
Will am AT Befehle eingeben müssen die mit ctrl+m (CR) und ctrl+j (LF) abgeschlossen werden. Enter würde ctrl+m bringen, ctrl+j müssen man manuell nachlegen.
Das zu automatisieren ist für die Eingabe leider nicht vorgesehen, nur bei der Ausgabe ist das konfigurierbar (Terminal Einstellung).
Als Standardgeschwindigkeit haben alle meine Boards mit 115200 bps gearbeitet.

Treiber

Alle Boards sind mit dem CH340xx Chip ausgestattet. Beim ersten Anstecken an den Windows Rechner wird zwar ein USB2 serial Chip erkannt aber kein Treiber gefunden. Einfach auf dieses Gerät klicken, Treiber aktualisieren ausführen und den vorher lokal entpackten Pfad verweisen.
Die Seite ist in chinesisch, aber den download Button kann man erkennen: http://www.wch.cn/download/CH341SER_ZIP.html