Schlagwort-Archiv: ESP8266

Lokale Uhrzeit mit dem ESP8266 und einem NTP Zeitserver (inklusive Sommer/Winterzeit)

Nachdem ich Code für den ESP8266 publiziert habe (klick), der einen NTP Zeitserver abfragt, sind immer wieder Anfragen gekommen. Die NTP Abfrage liefert UTC Zeit und die Fragesteller wollten eine Umrechnung auf lokale Zeit inklusive automatischer Sommer/Winterzeit Umstellung.
Ich es jetzt endlich mal geschafft aus einem noch nicht publizierten Projekt ein Demoprogramm für die Fragestellung zu bauen.

Der Demo-Code basiert auf dem Webserver Beispiel. Für die Uhrzeit Funktionalität werden drei Komponenten benutzt:
1. Der NTP Code aus dem o.g. Beispiel.
2. Die timelib Bibliothek von M. Margolis. Diese kann über die Arduino IDE installiert werden.
3. Die Timezone Bibliothek von J. Christensen. Diese muss manuell installiert werden; die Bibliothek gibt es hier: https://github.com/JChristensen/Timezone

Die Programmlogik:
In der timelib Bibliothek kann man einen sogenannten Sync-Provider definieren. Diese Funktion gibt die aktuelle Uhrzeit zurück. Weiterhin wird definiert, wie oft die Uhrzeit synchronisiert werden soll. Wir setzen das Intervall auf täglich (86400 Sekunden). In der Funktion wird die Zeit von einem NTP Server abgefragt. Die timelib Bibliothek ist damit auf UTC gesetzt.
Wenn die Webseite aufgerufen wird, wird die Zeit mit Hilfe der timezone Bibliothek umgerechnet. Die Funktionen der timelib können genutzt werden, um die umgerechnete Zeit in ein lesbares Format umzuwandeln.
Der ESP8266 Webserver ist per http://localtime/ erreichbar, wenn der Router lokale Netzwerknamen unterstützt (@Vodafone: Eure Easyboxen sollten das so langsam mal lernen – AVM kann’s doch auch). Ansonsten die IP aus dem seriellen Log nehmen.

Hier gibt es den Code: ESP_NTP_LocalTime_Demo

Viel Erfolg!

ITEAD Sonoff Switch und S20 Steckdose programmieren (ESP8266)

Es wird mal wieder Zeit für einen Beitrag. Der noch nicht publizierte Projektstau ist groß, aber im Job ist gerade viel los 🙂
Ich habe vor einiger Zeit die ITEAD WiFi Homeautomation Produkte entdeckt, die auf dem ESP8266 beruhen. ITEAD stellt für die Produkte auch die volle Dokumentation inkl. Schaltpläne zur Verfügung. Genauer gesagt geht es hier um die WiFi Steckdose mit dem Namen Sonoff S20 und den Sonoff Switch, der ein WLAN Schalter in Form eines Schnurschalters ist.

Der Preispunkt der Produkte ist ziemlich gut. Ein Eigenbau für den Preis dürfte schwierig bis unmöglich sein. Die WiFi Steckdose bekommt man für 13€, den Schalter für unter 7€. Die Produkte haben kein CE Zeichen. Der innere Aufbau ist aber sehr gut und ein CE dürfte nach meine Meinung kein Problem sein, wenn es denn beantragt würde. Zur ITEAD Original Firmware kann ich nichts sagen. Ich habe bisher alles sofort auf meine Firmware umgeflasht. Es wird dazu auch noch ein Post folgen.
Netterweise hat ITEAD auf den Platinen schon vorgesehen, dass man eine Stiftleiste einlöten kann. Stiftleisten gibt es bei ebay für weniges als nen Appel und nen Ei. Das Öffnen der Gehäuse ist einfach. Der Schalter ist nur geklipst, die Steckdose ist geklipst und hat eine zusätzliche Schraube.

Auf der Platine der Steckdose ist die Pinbelegung angegeben. Beim Schalter habe ich sie auf dem Foto notiert. Beim Schalter ist zusätzlich noch GPIO14 herausgeführt.

Und jetzt kommt die obligatorische Warnung:
Die Geräte bieten einen sehr einfachen Zugang zur Heimautomatisierung. ABER die 230V Netzspannung sind kein Spass. Die nötige Sachkunde ist Voraussetzung. Auf keinen Fall dürfen die Geräte offen an 230V betrieben werden. Keines Falls darf man die Platinen mit dem Rechner programmieren, wenn sie an 230V angeschlossen sind.
Keine gute Idee: Pins aus dem Gehäuse herausführen.

Die Programmierung der Boards erfolgt analog zu einem normalen ESP8266 Board, siehe auch:
https://blog.thesen.eu/esp8266-wlan-microcontroller-mit-der-arduino-ide-programmieren/

Generell kann ich eine Programmierung ohne Programmierboard nicht empfehlen. Es gibt immer wieder Anleitungen, welche ESP8266 Boards direkt an FTDI oder CH340 Chips hängen, weil diese ja einen 3.3V Ausgang haben. Das ist nicht empfehlenswert, weil diese Pins bis maximal 50mA belastbar sind. Der ESP8266 zieht im Mittel 80mA (wenn WiFi an ist) und bis über 200mA als kurze Pulse. Ein Programmierboard sorgt für eine stabile Spannnung und eine Wandlung der Pegel zwischen 3.3V und 5V.
Wer ein ESP8266 Programmierboard hat, kann das einfach mit ein paar Jumperkabeln verwenden.

Hier sind einfach die Anschlüsse eines Programmierboards für einen ESP8266-01 genommen worden. GPIO14 hängt in diesem Beispiel auf der Seite des Programmierboards in der Luft. Der ESP8266-01 würde auf dem Foto mit der Antenne nach unten zeigen.

Um in den Programmmiermodus zu kommen, muss man aber ein wenig tricksen. GPIO0 und Reset des Programmierboards sind ja nicht verbunden. Es geht aber ganz einfach. GPIO0 ist über den Taster auf der Sonoff Platine erreichbar. Und statt Reset kann man einfach den USB Stecker neu anstecken. Konkret:

  • USB Stecker des Programmierboards abstecken.
  • Taster auf dem Sonoff Board drücken und gedrückt halten.
  • USB Stecker einstecken.
  • Taster auf Sonoff Board loslassen.

Danach kann man das Board ganz normal z.B. mit der Arduino IDE programmieren.

Die GPIO Belegung:

  • GPIO0 Taster
  • GPIO12 Relais (high = on) + LED (blau); LED nur bei S20
  • GPIO13 LED grün (low = on)
  • GPIO14 Pin 5 der Stiftleiste – nur Sonoff Switch

Hardware Ausstattung:

  • ESP8266
  • PN25F08 Flash (1MByte/8MBit)
  • 10A Relais
  • Taster
  • LED grün – grün/blau S20

Es ist also der selbe großer Flash Baustein verbaut wie im ESP8266-12. Es sollten als alle ESP Projekte laufen.

Viel Erfolg!

ESP8266 – Reset Probleme lösen und Relais stabil schalten

Mit dem ESP8266 Mikrocontroller kann man sehr günstig und einfach Anwendungen im WLAN realisieren und steuern oder messen. Bei einigen Aufbauten hatte ich Stabilitätsprobleme und das Netz steht voll von Problemschilderungen um neustartende oder crashende ESPs. Mit den folgenden drei Methoden habe ich bisher alle Schaltungen stabil bekommen, so dass die ESPs auch monatelang ohne Reboot laufen.

Problem 1 – die Reset-Leitung ist ein Sensibelchen
Die Reset Leitung des ESP ist ungewöhnlich sensibel. Man sollte die Reset Leitung des ESP auf jeden Fall über einen Widerstand (z.B. 10kOhm) auf 3.3V ziehen. Das langt aber nicht immer. Es hängt von der konkreten Boardversion ab, wie der ESP sich verhält. Insbesondere die etwas älteren Module sind sehr empfindlich, weil hier offenbar keine Stützkondensatoren für die Resetleitung auf den Boards eingebaut sind. Der Test ist einfach: Mit einem Schraubenzieher oder Stück Draht einfach mal an die Reset Leitung gehen, während der ESP läuft. Wenn ein instabiles Board vorliegt, kann man so einen Neustart auslösen – auch wenn man die Reset Leitung mit 10k an 3.3V gelegt hat. Klingt ungewöhnlich, liegt aber daran, dass der ESP sehr hochohmige Eingänge hat und auf sehr kurze Pulse mit geringer Amplitude reagiert.
Die Lösung ist ein 100nF Stützkondensator, der möglichst nahe am Reset-Eingang angelötet wird in Kombination mit 10k auf 3.3 Volt. Minimale Kabellängen zum Kondensator sind Pflicht, weil der ESP „nervig“ sensibel ist. Das folgende Bild zeigt als Beispiel zwei 100nF Kondensatoren, die direkt an einem ESP8266-12 angelötet sind. Die Metallabschirmung liegt auf Masse. Der linke Kondensator stützt die Reset Leitung. Der rechte die 3.3V Versorgungsspannung.

ESP12_stabilized
Mit den Stützkondensatoren sollte die Sensitivität der Reset-Leitung auf Berühungen behoben sein.

Problem 2 – instabile Versorgungsspannung
Der ESP8266 hat recht hohe Anforderungen an die Versorgungsspannung. Im Mittel werden 80mA benötigt, kurzfristig zieht der ESP aber bis zu 250mA. Deshalb sollte die 3.3V Versorgungsspannung mit einem großen Elko gestützt werden. Ich nehme mindestens 470 Mikrofarad, meistens aber 3300 Mikrofarad. Ich habe mit einen Satz Elkos mit 3300Mikrofarad für maximal 6.3V besorgt. Diese sind noch relativ klein und günstig zu bekommen.
Mit einem solchen Elko und einen zusätzlichen 100nF Stützkondensator direkt am 3.3V Eingang des ESP, ist ein Spannung bei einem typischen Handynetzteil (5V) und einem LM1117-3.3 als Spannungsregler stabil genug.

Problem 3 – Relaisboard stabil schalten
Genau wie oft im Netz beschrieben hatte auch ich das Problem, dass das Schalten von 230V über ein Relaisboard den ESP ziemlich zuverlässig gecrasht oder neu gestartet hat. Dabei habe ich über ein übliches Relaisboard mit Optokoppler einen Klingeltrafo geschaltet.

Markise_Relaisboard

Das Problem läßt sich lösen, wenn man einen Entstörkondensator parallel zum Verbraucher schaltet. Wichtig: Der Kondensator muss mit dem Verbraucher verbunden bleiben, auch wenn das Relais abschaltet. Sonst wirkt der Kondensator nicht.
relais_supp
Ohne Kondensator entstehen beim Abschalten von induktiven Lasten leicht einige tausend Volt. Diese hohe Spannung sorgt in Kombination mit den sehr hochohmigen Eingängen des ESP für die Probleme. In der Praxis scheinen schon sehr kleine Induktivitäten auszureichen, um den ESP zu „ärgern“.
Bitte keinen einfachen Kondensator von der Stange nehmen, sondern einen sogenannten X2 oder FX2 Kondensator (EN132400). Diese sind zur Entstörung geeignet und bis zu einigen kV durchschlagsfest. Ein geeigneter 0.47 Mikrofarad FX2 Kondensator ist im folgenden Foto abgebildet. Mit einem solchen Kondensator konnte ich bisher alle Probleme lösen.

x2_capacitor