NodeMCU LED über WLAN schalten

Gast #5728096
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?
Persönliche Seite #5728124
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".
Gast #5728181
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.
Persönliche Seite #5728221
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren