ESP8266-01 Relais mit Website steuern

In unserem eBook für den ESP8266-01 mit Relais haben wir euch erklärt, wie ihr mit den AT befehlen und einem Serial Terminal Programm das Relais schalten könnt. Heute möchten wir euch hier zeigen, wie das mit einer Website funktioniert. Am Ende haben wir 2 Buttons mit Ein und Aus.

Legen wir los:

Wir benötigen für dieses Projekt ein ESP8266-01 mit Relais und einen entsprechenden Programmieradapter.

Damit das Relais schalten wird, müssen wir 2 Befehle an das Relais (bzw. an den Steuer-IC des Relais) senden.

A00100A1                AUS

          byte open[] = {0xA0, 0x01, 0x00, 0xA1};
          Serial.write(open, sizeof(open));

 

A00101A2                EIN

          byte close[] = {0xA0, 0x01, 0x01, 0xA2};
          Serial.write(close, sizeof(close));


Das bauen wir nun in ein Arduino-Sketch:

 

#include <ESP8266WiFi.h>

const char* ssid     = "SSID";
const char* password = "PASSWORT";

WiFiServer server(80);

void setup()
{
  Serial.begin(9600);
  Serial.println("Starten");
    delay(10);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
    }
    server.begin();
    Serial.println("IP: ");
    Serial.println(WiFi.localIP());
}
int value = 0;
void loop(){
 WiFiClient client = server.available();
  if (client) {
    String currentLine = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.print("Relais <a href=\"/H\">Einschalten</a><br>");
            client.print("Relais <a href=\"/L\">Ausschalten</a><br>");
            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') { 
          currentLine += c;
        }
        if (currentLine.endsWith("GET /H")) {
          Serial.println("EIN");
          delay(10);
          byte close[] = {0xA0, 0x01, 0x01, 0xA2};
          Serial.write(close, sizeof(close));
        }
        if (currentLine.endsWith("GET /L")) {
          Serial.println("AUS");
          delay(10);
          byte open[] = {0xA0, 0x01, 0x00, 0xA1};
          Serial.write(open, sizeof(open));
        }
      }
    }
    client.stop();
  }
}

Wenn wir diesen Sketch nun mit richtigen WLAN-Informationen abändern und auf den ESP übertragen, kann die Website gestartet werden und das Relais geschalten werden.

Viel Spass beim Nachbauen und entwickeln eigener Projekte.

32 Kommentare

Eckhard Reis

Eckhard Reis

Hallo Zusammen
Ich habe anstelle eines Relais eine LED angeschlossen da erkenne ich die funktionsweise genau.
Beim Einschalten kommt ein kurzer Spannungsimpuls und beim Ausschalten ebenso
Dh. Die Funktion ist für ein Bistabiles Relais gedacht. Ein normales Relais zieht dann nur kurz an und fällt
gleich wieder ab. Das könnten die geschilderten Probleme sein.
Gruß Eckhard

Eckhard Reis

Eckhard Reis

Hallo Florian
Tolle Projektbeschreibung . Durch das Relaistestprogramm bin ich schnell zur Lösung gekommen.
War erst auf GPIO und nicht an der seriellen Schnittstelle.
Was mir aufgefallen ist.
Beim Senden “Einschalten” zieht das Relais nur kurz an und fällt dann ab
Beim Senden “Ausschalten” das gleiche
an was liegt das.
Da ich sowiso die kurze Einschaltzeit für mein Projekt brauche komme ich mit deiner Programmierung
sehr gut klar
Vielen Dank für deine tolle Projektbeschreibung
Gruß Eckhard Reis

Markus Weber

Markus Weber

Ich hab das selbe Problem wie Günter Niklaus.Auf das ESP kann ich zugreifen. Relais schaltet aber nicht. Lege ich 5V an die Spule an zieht das Relais ohne Probleme an.

Michael

Michael

Funktioniert bei mir.
Kann ich den Status auch auslesen?

Günter Niklaus

Günter Niklaus

Hallo,
Bei mir schaltet das Relais leider nicht. Und ich glaube, da bin ich eher das Problem. Auf dem ESP habe ich problemlos Tasmota aufspielen können. Den ESP kann ich wunderbar steuern. Doch das Relais gibt keine Reaktion. Was muss da noch getan werden, damit der GPIO0 das Relais ansteuert? Wenn ich separat ein Relais an den ESP anschließe, klappt es problemlos. Ich dachte bisher, den ESP über 3,3 oder 5V an Strom, und die zu schaltende Leitung entweder an NO oder an NC. Doch das Relais reagiert nicht. Kann mir jemand helfen?
Ach ja, über die Arduino-IDE wollte ich eigentlich nicht programmieren.
Viele Grüße Günter

Peter

Peter

Hallo,
nachdem ich VCC und CHPD mit einer Drahtbrücke verbunden habe, funktioniert das Relais problemlos.
Grüße,
Peter

Friedel

Friedel

Hallo,
funktionierte ohne Probleme.
IP Adresse in der Verbindungsliste des Routers gesucht und gefunden, webseite aufgerufen, Relais schaltet ein und aus.
Viele Grüße
;-) FRiedel

Joachim

Joachim

@bitboy: Danke für die Arbeit und den Link. Mit deiner Veröffentlichung kann ich etwas anfangen, weil die Dokumentation/Kommentierung gut ist.
Mit den sog. “Projekten” hier bei AZ kann ich in der Regel nichts anfangen, weil es bzgl. Dokumentation/Erklärung an allen Ecken und Enden fehlt. Manchmal beschleicht mich das Gefühl, das diese “Projekte” der nur dazu dienen sollen den Verkauf anzukurbeln. Der Anspruch auf Nachvollziehbarkeit und Funktion ist leide nicht sehr hoch

Uwe

Uwe

eine Noob Frage. Wie sendet man den den Code an das Relay Module ?
z. B.
byte open[] = {0xA0, 0×01, 0×00, 0xA1};
Serial.write(open, sizeof(open));

Kann man hierfür ein USB Kabel von PC an die Pinleiste des Modules anschliessen ? Kann man putty nutzen ? Oder wie erfolgt die Kommunikation zum Relay Module ?
Danke

Jürgen Eggers

Jürgen Eggers

Hallo, habe das seinerzeit auch als “Einsteigerprojekt” genommen. Schön wäre aber gewesen wenn Ihr dieses Projekt nicht einfach wieder von unten nach Oben gelegt hättet. Ihr habt einmal ein Captive Portal für den ESP32 vorgestellt, wäre schön gewesen das bei diesen “alten” Projekt mit einzubinden. Die W-Lan geschichte macht doch dem einen oder anderen Anwender gerade bei der anfänglichen Probiererei noch sorgen. Vielleicht kann das noch mal als Teil 2 nachgeschoben werden. Und vergesst nicht auf die Spendenaktion hinzuweisen, da finde ich es auch nicht erforderlich irgendwelche Hardwaregeschenke nach einer Spende zu verteilen. Ich denke der Freak und Fan eurer Hardware freut sich viel mehr auf interessante Projekte und belohnt das mit einem Einkauf bei Euch. Support ist Eure Stärke, verkaufen kann jeder Hinterhofhändler—- allerdings ohne Support

Sepp

Sepp

Hallo,
tolle Projekte habt ihr! Könnte man dieses System auch als Accesspoint betreiben?
Lg

Mars

Mars

Ok, bin ein Trottel. Wenn man denn Chip nicht in denn Flashmodus versetzt, kann es ja nicht gehen.

Mars

Mars

Leider hab ich das gleiche Problem wie Andi und BitBoy’s Projekt hilft mir auch nicht. Dabei hatte ich noch mehr Probleme.
Versuche das ganze unter Linux mir Ardurino 1.8.11 und bei mehreren Versuchen immer das gleiche.
Arduino: 1.8.11 (Linux), Board: “Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200”

Executable segment sizes:
IROM : 231844 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 26900 / 32768 – code in IRAM (ICACHE_RAM_ATTR, ISRs…)
DATA : 1260 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 688 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 24936 ) – zeroed variables (global, static) in RAM/HEAP
Der Sketch verwendet 260692 Bytes (27%) des Programmspeicherplatzes. Das Maximum sind 958448 Bytes.
Globale Variablen verwenden 26884 Bytes (32%) des dynamischen Speichers, 55036 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
Executable segment sizes:
IROM : 231844 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 26900 / 32768 – code in IRAM (ICACHE_RAM_ATTR, ISRs…)
DATA : 1260 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 688 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 24936 ) – zeroed variables (global, static) in RAM/HEAP
Der Sketch verwendet 260692 Bytes (27%) des Programmspeicherplatzes. Das Maximum sind 958448 Bytes.
Globale Variablen verwenden 26884 Bytes (32%) des dynamischen Speichers, 55036 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
esptool.py v2.8
Serial port /dev/ttyUSB0
Connecting…….._____….._____….._____….._____….._____….._____….._____
Traceback (most recent call last):
File “/home/mars/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/upload.py”, line 65, in
esptool.main(cmdline)
File “/home/mars/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool/esptool.py”, line 2890, in main
esp.connect(args.before)
File “/home/mars/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool/esptool.py”, line 483, in connect
raise FatalError(‘Failed to connect to %s: %s’ % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
Error in sys.excepthook:
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/apport_python_hook.py”, line 145, in apport_excepthook
os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o640), ‘wb’) as f:
FileNotFoundError: [Errno 2] No such file or directory: ‘/var/crash/_usr_bin_python3.6.1000.crash’

Original exception was:
Traceback (most recent call last):
File “/home/mars/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/upload.py”, line 65, in
esptool.main(cmdline)
File “/home/mars/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool/esptool.py”, line 2890, in main
esp.connect(args.before)
File “/home/mars/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool/esptool.py”, line 483, in connect
raise FatalError(‘Failed to connect to %s: %s’ % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

Egal wie klein das Stetch ist, der Fehler tauch immer wieder auf.

Was mache ich falsch? Wie kann ich es beheben?

Frank

Frank

Hallo, bin blutiger Anfänger! habe mich aber durchgewurschtelt, bis auf die letzten Schritte. Fehlermeldung bei den ersten beiden Kleinbefehlen. Wenn die raus sind, stoppt er bei #include… was muß ich eintragen? Wenn ich auch diese Zeile lösche stoppt er bei
WiFi.begin(ssid, password);— muß hier mein Netzwerk Router eingegeben werden, oder die WSP daten?
Ja, viele Anfängerfragen! Besteht Hilfemöglichkeit?

Andi

Andi

ich versuche das Beispiel “ESP8266-01 Relais mit Website steuern” auf den ESP8266-01 mit der Arduino-IDE zu übertragen.
Ich nutze einen vorhandenen USB2TT-Adapter. Habe Rx mit Tx auf dem ESP verbunden und Tx mit Rx. Die Stromversorgung des ESP01 erfolgt ebenfalls über den Adapter bzw. den +5V-Pin des Pfostensteckers. Es leuchtet die rote LED des ESP01.
Als Board hab ich in der Arduino-IDE das ‘generic ESP8266 module’ eingestellt. Upload-speed ist 115200, so ist auch die Com7 des Laptops eingestellt.

Beim Versuch den sketch hoch zu laden blinkt die blaue LED auf dem ESP01. Dann kommt die Fehlermeldung (siehe unten).
Was mache ich falsch? Wo ist mein Denkfehler? Vielen Dank für die Hilfe!!!

Hier die Fehlermeldung:
Arduino: 1.8.10 (Windows 10), Board: “Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200”

Executable segment sizes:
IROM : 242584 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 27140 / 32768 – code in IRAM (ICACHE_RAM_ATTR, ISRs…)
DATA : 1264 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 900 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 25016 ) – zeroed variables (global, static) in RAM/HEAP
Der Sketch verwendet 271888 Bytes (28%) des Programmspeicherplatzes. Das Maximum sind 958448 Bytes.
Globale Variablen verwenden 27180 Bytes (33%) des dynamischen Speichers, 54740 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
esptool.py v2.8
Serial port COM7
Connecting…….._____….._____….._____….._____….._____….._____…..____Traceback (most recent call last):
File “C:\Users\Andi\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.2/tools/upload.py”, line 65, in
esptool.main(cmdline)
File “C:/Users/Andi/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.2/tools/esptool\esptool.py”, line 2890, in main
esp.connect(args.before)
File “C:/Users/Andi/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.2/tools/esptool\esptool.py”, line 483, in connect
raise FatalError(‘Failed to connect to %s: %s’ % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

Dieser Bericht wäre detaillierter, wenn die Option
“Ausführliche Ausgabe während der Kompilierung”
in Datei → Voreinstellungen aktiviert wäre.

bitboy

bitboy

Werbung in eigener Sache
Wer Startschwierigkeiten hat (oder gar keine Lust aufs programmieren) kann sich mein Projekt auf Github ansehen :)
https://github.com/bitboy85/esp8266_WifiSwitch/blob/master/wifiswitch.ino
Werbung Ende

Pete

Pete

Funktioniert das o.g. Script noch? Bei mir kommt beim Drücken der Einschaltzeile nur folgendes im seriellen Monitor:

GET /HEIN
HTTP/1.1
Host: 192.168.4.1
User-Agent: Mozilla/5.0 (Android 4.2.2; Mobile; rv:67.0) Gecko/67.0 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.4.1/L
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

GET /favicon.ico HTTP/1.1
User-Agent: Mozilla/5.0 (Android 4.2.2; Mobile; rv:67.0) Gecko/67.0 Firefox/67.0
Host: 192.168.4.1
Connection: Keep-Alive
Accept-Encoding: gzip

Ich hatte es insofern abgeändert, als ich den ESP01 selbst ein WLAN erzeugen lasse, auf das ich mich per Handy verbinde und dann die Seite auf 192.168.4.0 aufrufen will.

Maik

Maik

Noch ein Nachtrag: Nachdem was ich bis jetzt gelesen hab, gibt es mehrere Versionen des Boards wobei der Unterschied im Widerstand R4 besteht.
Auf dem Bild kann man diesen noch sehen, auf meinem Board fehlt er.
Das Problem ist das dieser Widerstand eigentlich dazu gedacht ist, den Pin von dem Steuerchip beim Start auf 0 zu ziehen. Dies ist auch so im Datenblatt des Herstellers beschrieben. Es funktioniert nur nicht, dann schaltet das Relais gar nicht mehr, deswegen lautet vielfach ein Tipp diesen zu entfernen. Allerdings hat man dann das Problem, dass das Relais beim Einschalten des Boards kurz geschaltet wird.

Ich hab mehrere Widerstände ausprobiert aber keine Variante brachte das gewünschte Ergebnis. geholfen hat auf den ersten Blick ein SMD Kondensator wo auf dem Board R4 sein sollte, das scheint den kurzen Impuls beim Einschalten hinreichend zu dämpfen, damit das Relais nicht schaltet.

Maik

Maik

Da einige das Problem haben, dass das Relais nicht schaltet:
Wenn die Relais LED kurz aufblinkt und direkt wieder ausgeht ohne dass das Relais schaltet dann ist das ein Problem in der Spannungsversorgung.
Ich habs nicht im Detail ausprobiert aber bei 4V schaltet das Relais nicht, bei 5V schon.
In https://forum.arduino.cc/index.php?topic=473419.15 wird erwähnt, das daran eventuell ein falscher Widerstand (10k statt 4,7k) Schuld daran sein könnte.

Beim Einschalten klickt das Relais einmal an und sofort wieder aus. Das scheint an dem verwendeten Chip zu liegen. https://github.com/libretto/RelayMCU bietet eine Lösung an indem ein zusätzlicher Widerstand eingelötet wird. Hab ich selbst noch nciht ausprobiert, werde ich aber, da dieses klicken beim Start störend ist.

PS: Mein ESP der mit dem Board kam, ist anscheinend kaputt, da tut sich überhaupt gar nichts. ein anderer hat aber funktioniert.

Ron Schenter

Ron Schenter

Bei mir leider auch nicht … hab jetzt 3 verschiedene Boards probiert … Was läuft den hier falsch?

lG

Rainer

Rainer

Hallo zusammen, danke für das Einsteigermodul. Bei mir hat alles perfekt geklappt. Relais schaltet wie geplant auf der Webseite.
Anfänger-Fehler die ich hatte: Esp8266 nicht ordnungsgemäß im Programmiermodus, falscher Treiber, COM muss beim Arduino, auch wenn nur ein Port drin steht, angeklickt werden damit er aktiv ist.
Danke das Team.
Frage: Hat schon mal jemand Tasmota aufgespielt und das Relais zum Leben erweckt?

Andrea

Andrea

Hello, can I power it at 12V?

Thanks

Thomas

Thomas

Was läuft falsch, wenn das Relais ohne zu tun, an,aus,an,aus – Pause und wieder an,aus,an,aus geht? Das Wiederholt sich ständig!

TBo

TBo

Was läuft falsch, wenn das Relais ohne zu tun, an,aus,an,aus – Pause und wieder an,aus,an,aus geht? Das Wiederholt sich ständig!

Andreas

Andreas

Was mir seltsam vorkommt, ist die RX/TX Verschaltung vom ESP8266 mit max 3,3V auf den STC15F104 als 5V Variante. Hab so meine bedenken, das die Pegel nicht zusammenpassen. Wäre da der STC15L104 (bis 3,6V)nicht besser gewesen?
Beschaltung der RX/TX mit Widerständen verhindert jede serielle Kommunikation. Daher der Verdacht des zu niedrigen Pegel. Nach wie vor nicht EMV fest.

Andreas

Andreas

Hallo, ich habe es mit einer Firmware mit AT Befehlen hinbekommen auch mit ESPeasy mit P165. Gleiches Verhalten. Das Problem ist eher das Relaismodul. Scheint anfällig gegen äußere Einflüsse auf die RX/TX Leitungen zu sein. Ohne das Seriell der Befehl zum abfallen des Relais kommt, schaltet es, wenn man nur mit der Hand in die Nähe kommt. Die Relais LED blinkt da auch manchmal schwach. Da sind wohl ein paar Widerstände/Kondensatoren nötig.
Hat jemand eine Idee?

Gerhard

Gerhard

Hallo ,
habe obiges Sketch aufgespielt, leider Schaltet das Relais nicht.
Habe Firmware update gemacht, Baud-Rate 9600 belassen und verschiedene ESP8266 Platinen versucht. Das ESP8266 Modul reagiert zwar auf die Webseite mit Ein- und Ausschalbefehle (LED blinkt kurz) nur das Relais macht nichts.

Hilfe wird sehr gerne angenommen :-)

Gruß Gerhard

Jürgen

Jürgen

Wie auch bei allen anderen funktionierte das Schalten über die Webseite leider nicht – zumindest nicht auf Anhieb ;)
Wie sich bei mir herausstellte, braucht so mancher ESP8266-01 ein kleines Update.
Erst als ich den ESP mit folgender Anleitung flashte funktionierte nach dem Hochladen auch der Sketch einwandfrei.
Wichtig ist dabei auch eine konstante Spannungsquelle. Das Relais wir mit 5V versorgt (2pol-Klemme). Auf der Platine ist ein Spanungswandler für den ESP verbaut, so dass dieser keinen Schaden nimmt.
Wie bei mir Tests zeigten ist es auch Wichtig die Baud-Rate unbedingt auf 9600 zu lassen, da sonst auch keine Schaltungen erfolgen „ (Serial.begin(9600); „
Das Flashen des ESP8266 führte ich nach folgender Anleitung aus:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/firmware-flashen-esp8622-01s?ls=de
Ein Update auf eine noch höhere Version findet ihr hier:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/firmwareupdate-fur-esp8266-01s?ls=de

cosi

cosi

ESP läuft mit 3,3v und das. Relais mit. 5v
Relaiskarte hat einen 3,3v Spannungsregler ffür. Den ESP verbaut.
War bei mir das Problem

Rainer.H

Rainer.H

Hallo ,
ich habe das selbe Problem.
Webseite startet aber das Relais schaltet nicht :-(

VG,
Rainer

Dirk Schweitzer

Dirk Schweitzer

Mir geht es ähnlich :-(

Benjamin

Benjamin

Hallo,

mein ESP-01 war fix geliefert, in der Arduino IDE eingerichtet und mit obigem Beispiel geflasht. Hab mich schon gefreut, dass ich bald einen meiner Monitore fernsteuern kann.

Leider funktioniert obiges Bespiel nicht wirklich. Der ESP hat eine IP, der Webserver läuft und die Webseite ist aufrufbar.

Jedoch wird das Relais nicht geschalten… Hab ich ein kaputtes erwischt? Hab ich etwas vergessen?

Über Hilfe würde ich mich sehr freuen.

Viele Grüße,
Benjamin

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert