Forum: Mikrocontroller und Digitale Elektronik NodeMCU LED über WLAN schalten


von gfunk (Gast)


Lesenswert?

Ich habe ein NodeMCU-Board v3.2 mit dem ESP8266-Chip. Nun würde ich 
damit gerne einen WLAN Access-Point starten, und dann von meinem 
Laptop/Computer die integrierte LED auf dem Board ein-/ausschalten. 
Leider scheitere ich gerade an dieser einfachen Aufgabe, und hoffe mir 
kann jemand helfen.
Als Bastel-Einsteiger auf diesem Gebiet habe ich erstmal nach 
Beispiel-Code gesucht, und das hier gefunden:
http://shelvin.de/esp8266-die-blaue-led-per-html-seite-vom-iphone-umschalten/
Macht laut Beschreibung genau das, was ich will. Den Code konnte ich 
auch fehlerfrei übersetzen und mit der Arduino-IDE auf die NodeMCU 
laden. Der WLAN-AccesPoint startet, ich sehe das auf meinem Laptop. Ich 
kann mich damit verbinden und auch im Browser die Seite mit der 
IP-Adresse aufrufen. Das klappt bis hier alles, und ich sehe im Browser 
auch die Buttons. Also es ist schon erstaunlich wie weit ich auf die 
Schnelle gekommen bin, bloß wenn ich auf einen Button klicke, ist die 
Enttäuschung groß, denn mit der LED passiert ... nichts.
Vermutlich ist dieser Teil im Code entscheidend: "a h 
ref=\"?pin=LEDEIN\". Was passiert denn da? Oder ist die LED an GPIO16 
irgendwie blockiert?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Um die Anzahl der Fehlerquellen zu reduzieren, könntest Du zunächst mal 
die LED ohne WLAN/Webserver ansteuern, sie z.B. einfach blinken lassen.

Dann weißt Du, daß der Teil, der die LED ansteuert, korrekt 
funktioniert.

Als nächstes kannst Du versuchen, die Interaktion mit der Webseite 
auszuprobieren. Definiere Dir einen Zähler, den Du als Wert sowohl auf 
der Webseite ausgibst als auch durch Klick auf den Knopf erhöhst. Lädst 
Du danach die Webseite neu, müsste der Zählerwert entsprechend größer 
geworden sein.

Dann weißt Du auch, ob der Aufruf über den Knopf in der Webseite 
funktioniert.

Dazu musst Du diesen Codeabschnitt ändern:
1
    if (sCmd.length()>0) {
2
      sResponse += "Parameter:" + sCmd + "<BR>";
3
      if(sCmd.indexOf("LEDEIN")>=0) { // LED einschalten
4
        digitalWrite(BUILTIN_LED, 0);
5
      }
6
      if(sCmd.indexOf("LEDAUS")>=0){ // LED ausschalten
7
        digitalWrite(BUILTIN_LED, 1);
8
      }
9
    }

und die digitalWrite-Aufrufe ersetzen durch z.B. meinzaehler++ und 
meinzaehler--.

Diesen Zaehler gibst Du auf die gleiche Art und Weise aus wie den auf 
der Webseite schon integrierten Aufrufzähler "zaehler".

von gfunk (Gast)


Lesenswert?

Vielen Dank!
Minimalcode um die LED blinken zu lassen (ohne WLAN) geht. Also ist D0 
bzw. GPIO16 zumindest schonmal der richtige Port.
Nur mit WLAN funktioniert die LED komischerweise nicht.

Hat schonmal jemand genau diesen Beispielcode auf seiner NodeMCU 
getestet?

Der schon vorhandene Aufrufzähler zählt auch hoch, und das mit dem 
Zähler über die Buttons probiere ich bei nächster Gelegenheit noch aus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

gfunk schrieb:
> Minimalcode um die LED blinken zu lassen (ohne WLAN) geht. Also ist D0
> bzw. GPIO16 zumindest schonmal der richtige Port.

Den steuerst Du auch mit "BUILTIN_LED" an?


> und das mit dem Zähler über die Buttons probiere ich bei nächster
> Gelegenheit noch aus.

Nun, vielleicht liegt ja der Fehler genau dort. Wenn die Auswertung der 
URL-Parameter hier nicht richtig funktioniert, wird digitalWrite nicht 
aufgerufen -- und dann kann Deine LED auch nicht gesteuert werden.

Sofern Du eine serielle Konsole hast, kannst Du auf der ja mal die 
kompletten URL-Parameter ausgeben, und an den Stellen, wo die LED 
gesteuert werden sollte, enstprechendes.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Hier hast du ein funktionierendes Beispiel zum abgucken:
http://stefanfrings.de/esp8266/index.html#tcpsketch

von gfunk (Gast)


Lesenswert?

Danke für den Link, das ist ja eine sehr gute Seite! Aber der Code macht 
doch was ganz anderes, oder?

von Stefan F. (Gast)


Lesenswert?

gfunk schrieb:
> Aber der Code macht
> doch was ganz anderes, oder?

Der Code schaltet eine LED an und aus auf Befehl übers Netzwerk.

Was du noch hinzufügen müsstest, ist ein rudimentäres HTTP Protokoll und 
eine HTML Seite (anstelle dieser Plain-Text Umsetzung).

von Mathias _. (mathias1988)


Lesenswert?

Hallo zusammen,

ich habe heute ein WordClock Projekt dazu gefunden und auch schon mit 
einem Wemod D1 mini getestet. Ich denke das dürfte sich mit den 
Bedürfnissen des TO decken.
https://github.com/roggenrohl-inge/wordclock

VG,
Mathias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.