Wemos D1 mini Projekt: Relais per Webseite schalten

Auf dieses Projekt bin ich von einem Leser meines Blogs aufmerksam geworden.

Dieser möchte gerne eine kleine Webseite mit einer Schaltfläche haben, um dort per Tastendruck ein Relais (oder mehrere) zu schalten. Dieses Relais soll dann nach 5 Sekunden wieder abfallen.

Teileliste

Für dieses Projekt benötigen wir folgende Teile:

  • Wemos D1 mini
  • Relaisshield (für den Wemos D1 mini)

Zusätzlich benötigen wir ein WLAN Netzwerk zu welchem wir uns verbinden können (SSID & Passwort müssen bekannt sein).

Es gibt den Microcontroller Wemos D1 auch als größere Bauform (im Format des Arduino UNOs) dieser bietet dann mehr digitale Pins.

Wemos D1 mini & R3 mit Relaisshields
Wemos D1 mini & R3 mit Relaisshields

Aufbau & Schaltung

Wenn man den Wemos D1 mini und das passende Relaisshield sein eigen nennt so ist der Aufbau relativ simple, denn diese beiden Bauelemente werden einfach aufeinander gesteckt.

Relais Shield für den Wemos D1 mini
Relais Shield für den Wemos D1 mini

Beachte dabei aber die korrekte Pinbelegung da sonst der Microcontroler und-/oder das Shield beschädigt werden kann.

Möchte man die nachfolgenden Schaltungen jedoch mit einer größeren Relaisplatine betreiben, so reicht der Wemos D1 mini & Wemos D1 R3 nicht mehr aus.

Relaisshield 4fach & 1fach
Relaisshield 4fach & 1fach

Hier empfehle ich den Arduino Mega mit einem ESP8266 Chip.

Arduino Mega mit ESP8266 Chip
Arduino Mega mit ESP8266 Chip

Dieser Microcontroller besitzt 54 digitale Ein/Ausgänge und dieses reicht für 3x 16 Relais (48Stck.) Jedoch würde ich empfehlen die Spannungsversorgung für die Relaisplatinen über ein externes 5V Netzteil zu realisieren.

Aufbau der Schaltung mit dem Wemos D1 mini

Nun möchte ich beschreiben wie man das Relaisshield am Wemos D1 mini mit Hilfe einer kleinen Webseite betreibt.

Der Wemos D1 mini hat genügend Speicherplatz um einen Sketch (inkl. Bibliotheken) und eine Webseite zu speichern. 

Die Webseite wird hier als String im Sketch abgelegt und bei einem Aufruf (Request) ausgeliefert.

Hier nun der Sketch wie man eine Verbindung zu einem bestehenden WiFi Netzwerk aufbaut.

Auf dem seriellen Monitor der Arduino IDE wird dann bei einer erfolgreichen Verbindung die zugeteilte IP-Adresse ausgegeben:

Schreiben wir nun das Sketch für das Relaisshield, wir könnten nun fest das Relaisshield für den Wemos D1 mini im Quellcode verdrahten. Diese vorgehensweise ist jedoch nicht gut da es so einige Relaisshields (1fach, 2fach, 4fach, 8fach, 16fach) auf den Markt gibt. 

Wir benötigen somit eine kleine Konfiguration, hier verwende ich ein Array von einem eigenen Typ Relais. Dieser neue Typ enthält ein Feld für eine Bezeichnung sowie für den Pin welcher angesprochen werden soll.

erzeugen der Klasse „Relais“

Um einen neue Klasse anzulegen erzeugen wir zunächst die HEADER Datei, diese Datei beschreibt die spätere Klasse.

Datei „relais.h“

Die eigentliche logik der Klasse kommt dann in die CPP Datei.

Datei „relais.cpp“

Zunächst müssen wir die HEADER Datei einbinden. Als nächstes folgt nun die Programmierung des zuvor definierten Konstruktors der Klasse sowie die Funktionen für die Felder „_bezeichnung“ & „_pin“ sowie „_startTime“ zum speichern der Zeit wann das Relais aktiviert wurde.

Nun können wir ein Relais Objekt erzeugen und auf die Felder zugreifen:

Da wir jedoch Relaisshields / Relaismodule verwenden wollen wo mehr als eines verbaut wurde, erzeugen wir ein Array mit Relais. Für eine bessere Organisation könnte man nun für jedes Relaisshield ein extra Array anlegen und dann alle Arrays zu einem Array verbinden (wir hätten dann ein Mehrdimensionales Array). Dieses erhöht jedoch nicht die Lesbarkeit des Quellcodes.

Array mit Relais erzeugen

Nun wollen wir die neue Klasse verwenden um unsere Relaisshields zu definieren. 
Ein Array erzeugt man in dem man an den Variablennamen eine eckige Klammer anfügt. 

Wir haben nun ein Array mit einem Wert erzeugt. 

Arrays beginnen immer mit dem Index „0“!

Wenn wir nun auf dieses Element in dem Array zugreifen wollen müssen wir wieder unser Array verwenden und in den eckigen Klammern ein Index setzen.

Mit dem Pfeil spricht man das Element an und kann dann Operationen mit dem durchführen.

Es würde auch funktionieren:

Zähler

Damit wir später mit dem Array arbeiten können benötigen wir eine Zählvariable, mit dieser können wir zbsp. in der Funktion „setup“ den pinMode über eine For-Schleife setzen.

Es gibt an dem Array eine Funktion um die Länge zu ermitteln jedoch ist dieses die Länge des Speichers. Man müsste dann das maximum der definierten Felder („bezeichnung“, „pin“) berechnen und dann kann man die Länge des Array verwenden. Dieses wäre jedoch viel zu kompliziert und daher bevorzuge ich eine einfache Variable:

Nehmen wir die Zeile auseinander:

const – definiert den Wert als Konstante, d.h. dieser Wert kann später nicht mehr verändert werden,
unsigned – dieser Operator besagt das nur positive Zahlen erlaubt sind,
int – ganze Zahlen
RELAIS_COUNTER – der Name der Variable
= – damit beginnt eine Zuweisung
1 – die anzahl der Elemente in dem Array.

Konstanten schreibe ich immer groß, dieses hat den Vorteil das man später im Code erkennt das es sich um eine Konstante handelt.

setup – Funktion

Erweitern wir nun die setup Funktion um eine For-Schleife damit wir die Relais und damit die Pins als Ausgänge  (OUTPUT) setzen.

Des Weiteren wird in der Funktion definiert was passieren soll wenn eine Bestimmte Adresse auf dem ESP8266 aufgerufen wird.

Es gibt in unserem Fall 2 Adressen einmal die ohne Parameter „http://192.168.178.26/“ und einmal zum setzen eines Status für ein Relais „http://192.168.178.26/set?btn=0“.

loop – Funktion

Die Funktion „loop“ wird sehr übersichtlich denn, es wird nur dem Server „gesagt“ das dieser auf Clients reagieren soll. 

Zusätzlich wird in der Funktion noch geprüft ob gesetzte Relais nach einer definierten Zeit x wieder zurück gesetzt werden soll.

HTML Dokument erstellen

Wenn der Benutzer die Adresse „http://192.168.178.26/“ aufruft so soll eine kleine Webseite angezeigt werden.

Webseite mit Schaltfläche für ein Relais
Webseite mit Schaltfläche für ein Relais

In meinem Test habe ich den Wemos D1 mini mit dem Relaisshield verwendet, daher ist auf dieser Seite „nur“ 1 Relais mit der Bezeichnung „R1“ eingerichtet.

Für jedes Relais wird eine Schaltfläche angeboten.

Die Schaltflächen werden dabei ähnlich einer Tabelle positioniert. Da hier ja mehr als nur 1 Relais dargestellt werden kann, möchte ich nach einer definierbaren Zahl x einen Zeilenumbruch erzeugen. Hier lege ich zunächst eine Konstante an.

 Die Webseite selber wird in einem String gespeichert, hier emphielt es sich zunächst diese in einem Editor wie Notepad++ oder PSPad zu schreiben und dann in die Arduino IDE zu integrieren.

Setzen eines Relais Status

Die Schaltfläche aus der Webseite erzeugt einen Request an die Adresse „http://192.168.178.26/set?btn=0“ dieses bewirkt dass, das Relais aus dem Array am Index „0“ auf HIGH (aktiv) gesetzt wird.

Da wir den Index als Parameter an der URL übergeben müssen wir zunächste alle gelieferten Parameter durchlaufen um dann unseren Key „btn“ zu finden und auszuwerten.

Wurde kein Index übergeben so passiert nichts, es würde dann ein Timeout auf der JavaScript Console ausgegeben werden.

Schaltung & Aufbau mit Relaisshields

Wie eingangs erwähnt kann man größere Relaisshields erwerben. Diese Relaisshields gibt es in 1fach, 2fach, 4fach, 8fach sowie 16fach. Je nach größe muss man beachten das ein geeigneter Microcontroller gewählt wird.

Für die nachfolgende Schaltung verwende ich einen Wemos D1 R3 welchen ich bereits im Tutorial WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip vorgestellt habe.

Schaltung

In der nachfolgenden Schaltung habe ich einen Arduino UNO verwendet, dieser Unterscheidet sich etwas zum Wemos D1 R3 jedoch sind die verwendeten Anschlüße an den gleichen stellen zu finden.

Schaltung 4fach & 1fach Relais am Arduino UNO
Schaltung 4fach & 1fach Relais am Arduino UNO

Aufbau

Für den Aufbau der Schaltung benötigst du:

  • 9 Steckbrettkabel, männlich – weiblich, 20cm
  • 2 Steckbrettkabel, männlich – männlich, 10cm
  • 1x Steckbrett 170 Pin
  • 1x 1fach Relaisshield
  • 1x 4fach Relaisshield
  • 1x Wemos D1 R3
Aufbau - Wemos D1 R3 mit 4fach & 1fach Relaisshield
Aufbau – Wemos D1 R3 mit 4fach & 1fach Relaisshield

An den Relaisshields sind die Pins mit jeweils

  • GND für Ground
  • IN1 – Relais 1
  • IN2 – Relais 2
  • IN3 – Relais 3
  • IN4 – Relais 4
  • VCC – Spannungsversorgung 5V 

gekennzeichnet.

RelaishieldWemos D1 R3
4fach Relaishield 
GNDGND
IN1D11
IN2D10
IN3D9
IN4D8
VCC5V
1fach Relaisshield 
VCC5V
IN1D12
GNDGND

Der Microcontroller besitzt „leider“ nur einen Pin für 5V daher verwende ich zusätzlich ein kleines, 170 Pin Steckbrett um dort die 5V zu verteilen.

Quellcode

Im Quellcode müssen wir nur die verwendeten Pins und die Bezeichnungen anpassen:

Video

In diesem Video verwende ich das Relaisshield vom Wemos D1 mini da ich leider feststellen musste dass, das 1fach Relaisshield defekt ist.

Schalten von Relaisshields per Webseite

 

Download

Hier nun der Quellcode zum Download.

Sollten Fragen bestehen so kannst du dich gerne über das Kontaktformular oder per E-Mail an mich wenden.

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.