netcoast.ch - Projekte aus der echten Welt in der virtuellen Welt

Inhaltsverzeichnis

Min

Einleitung

Inhaltlich baut der Artikel auf einem bestimmten Basiswissen auf, eventuell hilft es zuerst den Artikel ESP8266-01 (ESP-01) über Serial Monitor mit AT Befehlen im Clientmodus verwenden und Firmware flashen anzusehen.
Die Beispiele sind für einen Testaufbau mit einem ESP8266-01 über einen Arduino welcher als Adapter fungiert gedacht.
Deshalb gehen wir hier auch von der Bedienung des ESP-01 über den Serial Monitor aus.
Im Endefekt funktionieren die Beispiele aber auch über SoftwareSerial oder HardwareSerial.

Es empfiehlt sich jewils die Anweisungen genau durchzulesen, wenn man etwas weglässt, sucht man dann stundenlang nach Fehler die keine sind...

Schema direkte Verbindung ESP8266-01 (ESP-01) und Arduino / andere Hersteller ohne SoftwareSerial mit AT Befehlen

Dieses Beispiel zeigt eine Test-Basiskonfiguration, in der wir einfach mit dem ESP8266-01 über die Arduino IDE kommunizieren möchten.
Hier fungiert der Arduino lediglich als Adapter, deshalb ist der Reset mit Ground verbunden und RX mit RX und TX mit TX (normalerweise wären diese ja gekreuzt):

Ich verzichte hier absichtlich auf einen Logic-Level-Shifter, trotz der 3.3V / 5V Problematik.
Alternativ kann auch der Programmer CH340G oder ein FTDI Programmer wie der YP-05 (Achtung hier würden RX und TX gekreuzt werden) verwendet werden.

ESP8266-01 Servermodus aktivieren und als AccessPoint oder im Stationmodus betreiben

Unterschied AccessPoint / Stationmodus und wie sie aktiviert werden

AccessPoint - Modus
Ist dieser Modus aktiviert, kann man sich mit dem ESP8266-01 als WLan-Client verbinden, der ESP arbeitet so wie ein WLan-AccessPoint.
Der ESP8266-01 kann als AP und Station gleichzeitig eingerichtet werden.
Mit 2 wird der reine AccessPoint-Modus aktiviert, mit 3 der Station- und AccessPoint-Modus aktiviert. In diesem Fall bekommt man entweder 1 oder 2 IPs.
Egal welche dieser beiden Einstellungen gesetzt ist, Clientgeräte können nur untereinander kommunizieren, sie kommen nicht ins Internet.
Selbst wenn der Modus 3 aktiv ist und dieser mit einem WLan verbunden ist.
AT+CWMODE=2 oder AT+CWMODE=3
Mit folgender AT-Befehlszeile wird die aktuell gewählte Konfiguration ausgegeben:
AT+CWMODE?
SSID, Passwort und andere Daten für den AP-Modus konfigurieren:
AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>[,<max conn>][,<ssid hidden>]
  • <ssid>: String - angezeigte / verwendete SSID.
  • <pwd>: String vom WLan-Passwort. Länge: 8 ~ 64 bytes ASCII.
  • <channel>: Kanal-ID.
  • <ecn>: encryption method; WEP wird nicht unterstützt.
    • 0: OPEN
    • 2: WPA_PSK
    • 3: WPA2_PSK
    • 4: WPA_WPA2_PSK
  • [<max conn>]: Maximale Anzahl von Clients. Bereich: [1,10].
  • [<ssid hidden>]:
    • 0: SSID wird ausgestrahlt (Standart).
    • 1: SSID wird nicht ausgestrahlt.
Beispiel:
AT+CWSAP="ESP-Lan","abc123456789",5,3,5,1
Hinweis:
Diese Befehle funktionieren nur wenn AT+CWMODE=2 oder AT+CWMODE=3.
Bestimmte ESP können die Konfiguration speichern, wenn AT+SYSSTORE=1 gesetzt ist.

Stationmodus
Ist dieser Modus aktiviert, wird der ESP als Client von einem WLan-Router verbunden. Hängt dieser am Internet, kommt der ESP auch ins Internet. Dieser Modus ist auch dann wichtig, wenn man von anderen Geräten im "normalen" WLan-Netzwerk mit dem ESP kommunizieren möchte.
Der ESP8266-01 kann als AP und Station gleichzeitig eingerichtet werden.
Mit 2 wird der reine AccessPoint-Modus aktiviert, mit 3 der Station- und AccessPoint-Modus aktiviert. In diesem Fall bekommt man entweder 1 oder 2 IPs. Clientgeräte können bei Modus 3 nur untereinander kommunizieren, sie kommen nicht ins Internet.
AT+CWMODE=1 oder AT+CWMODE=3
Mit folgender AT-Befehlszeile wird die aktuell gewählte Konfiguration ausgegeben:
AT+CWMODE?

Servermodus aktivieren

Der Servermodus ist schnell aktiviert:
  1. CIPMUX=1 (Mehrere Verbindungen erlauben, was voraussetzung ist).
  2. CIPSERVER=1,80 (Server auf Port 80 starten, ohne das 80 wird standardmässig der Port 333 genommen).
Ab diesem Zeitpunkt kann man sich mit dem ESP8266-01 bereits verbinden lassen, wenn man die IP weiss und sich im entsprechnden Netzwerk befindet.

Eine Webseite anzeigen lassen

Für diese Beispiele verwende ich nur die essentiell wichtigsten HTML-TAGs, man sollte ich auch bewusst machen, dass der ESP nicht mit einem richtigen Webserver zu vergleichen ist.
Er lässt sich aber für coole Projekte die übers Internet oder Netzerk funktionieren sollen, wunderbar einsetzen.

In diesem Beispiel ist der ESP8266-01 als Client (AT+CWMODE=1) mit einem WLan-Router verbunden.
Es funktioniert aber auch gleich wenn man den ESP als AP einrichtet uns sich mit zum Beispiel seinem Smartphone damit verbindet.
  1. IP vom ESP herausfinden.
    AT+CIFSR

    Antwort:
    +CIFSR:STAIP,"192.168.1.13"
    +CIFSR:STAMAC,"dd:dc:d2:23:dc:2c"
  2. IP im Browserfenster eingeben, hier im Beispiel "192.168.1.13"

    Der Browser wartet nun auf eine Antwort, im Seriellen Monitor der Arduino IDE sollten wir eine Reaktion darauf sehen:

    Uns interessiert hier nun die Verbindungsnummer "1", welche wir an der Zeile mit +IPD,<NR>, ... ablesen können.
  3. Jetzt teilen wir mit, wieviele Zeichen wir zurücksenden werden mit AT+CIPSEND:
    AT+CIPSEND=1,144
    Das 1 steht für die Verbindungsnummer und die 144 für die zu sendenden Zeichen.
  4. Im Serial Monitor senden wir nun diese Zeichen:
    <html><body><form action="http://192.168.1.13" method="post"><input id="EinFeld" name="blau" value=""><input type="submit"></form></body></html>
  5. Noch zeigt die Webseite nichts an, wir müssen die Verbindung jetzt noch schliessen:
    AT+CIPCLOSE=1

Daten per GET an den ESP8266-01 senden

Diese eher "unsichere" Variante ist die einfachere der beiden Varianten, Daten an den ESP zu übermitteln.
Unsicher bedeutet hier, dass man die Informationen einfach per Klartext über die URL mitgibt.
Wenn das für das Projekt keine Rolle spielt, kann man sich gut dieser Variante bedienen.

GET-Methode bedeutet, dass in der URL die Variablen und deren Inhalt für jeden gut lesbar mitgegeben werden, zum Beispiel:
http://esp8266.netcoast.ch/ResponseTest/AntwortAktiv.php?NAME=Muster
Am Ende kommt ein ?, und dann der Variablenname, hier "NAME" und deren Inhalt, hier "Muster". Natürlich können mit & mehrere Variablen mitgegeben werden.
Dies kann jetzt auf zwei Arten zustande kommen:
Variante 1 - Über einen normalen Link, zum Beispiel so:
<a href="http://192.168.1.13?blau=Max">Der Linktext</a>

Variante 2 - Über ein Formular mit method="get"
<form action="http://192.168.1.13" method="get"><input id="EinFeld" name="blau" value=""><input type="submit"></form>

Hinweis
Ohne SSL / HTTPs werden die Daten unverschlüsselt übertragen, was sicherheitstechnisch problematisch ist. Ob GET oder POST macht sogesehen für das Thema Sicherheit keinen Unterschied.

Daten per POST an den ESP8266-01 senden

Sichherheitstechnisch relevantere Informationen sollten auf diese Weise ausgetauscht werden.
Man hat hier zwar einen etwas grösseren Aufwand, er hält sich aber in grenzen und ist auch letztendlich einfach umzusetzen.
Dies wird aber am einfachsten über ein Formular mit der Option method="post" gelöst.
<form action="http://192.168.1.13" method="post"><input id="EinFeld" name="blau" value=""><input type="submit"></form>
Im Obigen Beispiel wird im Anschluss ein Formular mit Post an den Server mit der Variable "blau" und dem Inhalt gemäss dem Input-Feld übermittelt. Zum Beispiel so:


Hinweis
Ohne SSL / HTTPs werden die Daten unverschlüsselt übertragen, was sicherheitstechnisch problematisch ist. Ob GET oder POST macht sogesehen für das Thema Sicherheit keinen Unterschied.

Praktisches Umsetzen der Varianten

Ich kann hier aufgrund des Umfangreichen Themas nur Denkanstösse und Tipps geben.
Schlussendlich sollte man sich ein bisschen HTML-Wissen selber aneignen. Meiner Meinung nach, kommt man bereits mit Anfängerwissen sehr weit.

Für die Projektumsetzung muss man sich zuerst die Frage stellen:
Wie soll der ESP8266-01 überhaupt angesprochen werden?
  • Soll man sich mit dem Netzwerk vom ESP verbinden müssen / können? -> CWMODE=2 / CWMODE=3
    • Muss der ESP von einem anderen Gerät ohne Internet direkt über WLan verbunden werden können?
    • Muss der ESP von einem anderen Gerät direkt über WLan verbunden werden können, der Server-ESP aber Daten ins Internet senden können?
  • Muss der ESP von sich aus ins Internet kommen? -> CWMODE=1 / CWMODE=3
    • Möchte man zum Beispiel einen Wert in eine Datenbank abfüllen?
    • Soll auf einen bestimmten Wert in einer Datenbank reagiert werden?
Designed & styled by slaps313