3 LEDReihen via Webseite ansteuern

Hallo,

ich bin an einem kleinem Projekt und zwar versuch ich 3 verschiedene LEDReihen über 3 Ausgänge über 3 Buttons auf einer Webseite an zu steuern. Mein Problem ist ich bekomm nur 1 Reihe zum leuchten, aber die anderen 2 nicht.
Als Hardware habe ich ein Pretzelboard mit einem ESP8266.

Mein Programm:

#define SSID "MeinWlan"
#define PASSWORD "MeinPW"

#define gLED 5
#define bLED 6
#define rLED 9
#define LED_WLAN 13

#define DEBUG true

const char site[] PROGMEM = {
"<HTML><HEAD>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=2.0, user-scalable=yes\">\n<title>\nFarbige LED\n</title>\n</HEAD>\n\n<BODY bgcolor=\"#BDBDBD\" text=\"#000000\">\n<FONT size=\"8\" FACE=\"Garamond\">\n<center><b>Welche LEDs moechten Sie ansteuern?</b></center>\n</FONT>\n\n<HR>\n
\n<FONT size=\"3\" FACE=\"Garamond\" COLOR=\"#FF0000\">\nMit Port D9 werden
\ndie roten Leds
\nein/aus geschalten
\n
\n<form method=\"GET\">\n\t<button type=\"submit\" name=\"rled\" value=\"1\">LED ein</button>\n\t<button type=\"submit\" name=\"rled\" value=\"0\">LED aus</button>\n</form>\n
\n<FONT COLOR=\"#00FF00\">\nMit Port D5 werden
\ndie gruenen Leds
\nein/aus geschalten
\n
\n<form method=\"GET\">\n\t<button type=\"submit\" name=\"gled\" value=\"1\">LED ein</button>\n\t<button type=\"submit\" name=\"gled\" value=\"0\">LED aus</button>\n</form>\n
\n<FONT COLOR=\"#0000FF\">\nMit Port D6 werden
\ndie blauen Leds
\nein/aus geschalten
\n
\n<form method=\"GET\">\n\t<button type=\"submit\" name=\"bled\" value=\"1\">LED ein</button>\n\t<button type=\"submit\" name=\"bled\" value=\"0\">LED aus</button>\n</form>\n
\n<HR>\n\n</font>\n</HTML>\n\0"
};

#include <SoftwareSerial.h>
SoftwareSerial esp8266(11, 12); // RX, TX

void setup() {
  Serial.begin(19200);
  esp8266.begin(19200);
  pinMode(gLED, OUTPUT);
  pinMode(bLED, OUTPUT);
  pinMode(rLED, OUTPUT);


  if (!espConfig()) serialDebug();
  else digitalWrite(LED_WLAN, HIGH);

  if (configTCPServer())  debug("Server Aktiv"); else debug("Server Error");
}


void loop() {
  String xBuffer;
  if (esp8266.available()) // check if the esp is sending a message
  {
    if (esp8266.find("+IPD,"))
    {
      debug("Incomming Request");
      int connectionId = esp8266.parseInt();

      if (esp8266.findUntil("?rled=", "\n")) digitalWrite(rLED, esp8266.parseInt());
      if (esp8266.findUntil("?bled=", "\n")) digitalWrite(bLED, esp8266.parseInt());
      if (esp8266.findUntil("?gled=", "\n")) digitalWrite(gLED, esp8266.parseInt());
      if (sendWebsite(connectionId, createWebsite())) debug("Website send OK"); else debug("Website send Error");
  }
  }
}



boolean sendWebsite(int connectionId, String webpage)
{
  boolean success = true;

  if (sendCom("AT+CIPSEND=" + String(connectionId) + "," + String(webpage.length()), ">"))
  {
    esp8266.print(webpage);
    esp8266.find("SEND OK");
    success &= sendCom("AT+CIPCLOSE=" + String(connectionId), "OK");
  }
  else
  {
    success = false;
  }
  return success;
}

String createWebsite()
{
  String xBuffer;

  for (int i = 0; i <= sizeof(site); i++)
  {
    char myChar = pgm_read_byte_near(site + i);
    xBuffer += myChar;
  }

  return xBuffer;
}

//-----------------------------------------Config ESP8266------------------------------------

boolean espConfig()
{
  boolean success = true;
  esp8266.setTimeout(5000);
  success &= sendCom("AT+RST", "ready");
  esp8266.setTimeout(1000);
  if (configStation(SSID, PASSWORD)) {
    success &= true;
    debug("WLAN Connected");
    debug("My IP is:");
    debug(sendCom("AT+CIFSR"));
  }
  else
  {
    success &= false;
  }
  //shorter Timeout for faster wrong UPD-Comands handling
  success &= sendCom("AT+CIPMODE=0", "OK");  //So rum scheit wichtig!
  success &= sendCom("AT+CIPMUX=0", "OK");

  return success;
}

boolean configTCPServer()
{
  boolean success = true;

  success &= (sendCom("AT+CIPMUX=1", "OK"));
  success &= (sendCom("AT+CIPSERVER=1,80", "OK"));

  return success;

}

boolean configTCPClient()
{
  boolean success = true;

  success &= (sendCom("AT+CIPMUX=0", "OK"));
  //success &= (sendCom("AT+CIPSERVER=1,80", "OK"));

  return success;

}


boolean configStation(String vSSID, String vPASSWORT)
{
  boolean success = true;
  success &= (sendCom("AT+CWMODE=1", "OK"));
  esp8266.setTimeout(20000);
  success &= (sendCom("AT+CWJAP=\"" + String(vSSID) + "\",\"" + String(vPASSWORT) + "\"", "OK"));
  esp8266.setTimeout(1000);
  return success;
}

boolean configAP()
{
  boolean success = true;

  success &= (sendCom("AT+CWMODE=2", "OK"));
  success &= (sendCom("AT+CWSAP=\"NanoESP\",\"\",5,0", "OK"));

  return success;
}

boolean configUDP()
{
  boolean success = true;

  success &= (sendCom("AT+CIPMODE=0", "OK"));
  success &= (sendCom("AT+CIPMUX=0", "OK"));
  success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.255.255\",90,91,2", "OK"); //Importand Boradcast...Reconnect IP
  return success;
}

//-----------------------------------------------Controll ESP-----------------------------------------------------

boolean sendUDP(String Msg)
{
  boolean success = true;

  success &= sendCom("AT+CIPSEND=" + String(Msg.length() + 2), ">");    //+",\"192.168.4.2\",90", ">");
  if (success)
  {
    success &= sendCom(Msg, "OK");
  }
  return success;
}


boolean sendCom(String command, char respond[])
{
  esp8266.println(command);
  if (esp8266.findUntil(respond, "ERROR"))
  {
    return true;
  }
  else
  {
    debug("ESP SEND ERROR: " + command);
    return false;
  }
}

String sendCom(String command)
{
  esp8266.println(command);
  return esp8266.readString();
}



//-------------------------------------------------Debug Functions------------------------------------------------------
void serialDebug() {
  while (true)
  {
    if (esp8266.available())
      Serial.write(esp8266.read());
    if (Serial.available())
      esp8266.write(Serial.read());
  }
}

void debug(String Msg)
{
  if (DEBUG)
  {
    Serial.println(Msg);

und meine dazugehörige html Seite

<HTML><HEAD>
<meta name="viewport" content="width=device-width, initial-scale=2.0, user-scalable=yes">
<title>
Farbige LED
</title>
</HEAD>

<BODY bgcolor="#BDBDBD" text="#000000">
<FONT size="8" FACE="Garamond">
<center><b>Welche LEDs moechten Sie ansteuern?</b></center>
</FONT>

<HR>


<FONT size="3" FACE="Garamond" COLOR="#FF0000">
Mit Port D9 werden

die roten Leds

ein/aus geschalten



<form method="GET">
	<button type="submit" name="rled" value="1">LED ein</button>
	<button type="submit" name="rled" value="0">LED aus</button>
</form>


<FONT COLOR="#00FF00">
Mit Port D5 werden

die gruenen Leds

ein/aus geschalten



<form method="GET">
	<button type="submit" name="gled" value="1">LED ein</button>
	<button type="submit" name="gled" value="0">LED aus</button>
</form>


<FONT COLOR="#0000FF">
Mit Port D6 werden

die blauen Leds

ein/aus geschalten



<form method="GET">
	<button type="submit" name="bled" value="1">LED ein</button>
	<button type="submit" name="bled" value="0">LED aus</button>
</form>


<HR>

</font>
</HTML>

Ich bekomm immer den Port D9 zum leuchten also die roten LEDs, aber nie die grünen oder blauen...
Bin ziemlich neu was das Programmieren angeht, vielleicht kann mir jemand einen Tip geben was nicht genau stimmt.

Danke!

Moin!

Ich habe zwar keine Lösung für Dein Problem, aber zwei Anmerkungen:

dukus:

  }

}

Solche Zeilen finde ich sehr problematisch, da man erst gucken muss, welche Klammer-zu sich auf welche Klammer-auf bezieht. Ansonsten ist Dein Code aber sehr gut lesbar (gerade wegen der Einrückungen).

dukus:

...
Welche LEDs moechten Sie ansteuern? > ```

Echte Umlaute sind hübscher. Statt 'oe' nimmste besser 'ö'

Als Korinthenkacker bin ich manchmal richtig gut :slight_smile:

Gruß

Gregor

esp8266.findUntil("?rled=", "\n")

Zerstört das die Daten im Buffer wenn "?rled=" nicht gefunden werden kann?

gregorss:
Echte Umlaute sind hübscher. Statt 'oe' nimmste besser 'ö'

Noch besser, Du deklarierst ordentlich den Zeichensatz der HTML-Seite

<meta charset="UTF-8">

und schreibst richtige Umlaute.
Den Code schreibst Du ja wahrscheinlich auch schon in UTF-8.

Gruß Tommy

Tommy56:
Noch besser, Du deklarierst ordentlich den Zeichensatz der HTML-Seite

Was „besser“ ist, ist wieder einmal eine Frage des Standpunktes. ö ist soweit ich weiß kompatibel bis in den Keller, die Deklaration des Zeichensatzes AFAIK nicht. Mein Wissensstand ist diesbezüglich evtl. mangelhaft.

Gruß

Gregor

Hallo,

danke erst mal für die Tipps... Jetzt müsst ich nur noch herausfinden wieso sich die LEDs nicht einschalten lassen :frowning:

Hast Du Dir auf dem ESP mal über Seriell ausgeben lassen, was beim Drücken der einzelnen Buttons dort ankommt?

Gruß Tommy

Hallo,

ich vermute der String der vom ESP gesendet wird stimmt nicht mit Deiner Abfrage überein. Was zeigt den Monitor an.

Frag doch nur auf rled,gled,bled ab.

Heinz

dukus:
Hallo,

danke erst mal für die Tipps... Jetzt müsst ich nur noch herausfinden wieso sich die LEDs nicht einschalten lassen :frowning:

Hast du dir schon mal den von mir genannten Bereich angeschaut? Vielleicht mal nach dem if(...)...; einmal serialDebug() aufrufen um zu sehen was da noch so an Daten kommen.

Hallo,

es ist egal welchen Button ich drücke es kommt immer folgendes im Seriellen Monitor an:

Incomming Request
Website send OK
Incomming Request

Website send Error

Nur das es bei den roten LEDs geht ( rLED 9 ) aber die anderen nicht :confused:

Hi

Habe den Sketch ganz oben nur überflogen - dort wären mir diese Meldungen aber nicht aufgefallen.

Wie Dem auch ist - WAS bekommst Du empfangen?
Bekommst Du überhaupt Werte für die anderen Stripes?
Nicht, daß Du dort wunderschön '0' empfängst und Dich hier wunderst, warum das Gelump aus bleibt.

MfG

postmaster-ino:
Hi

Habe den Sketch ganz oben nur überflogen - dort wären mir diese Meldungen aber nicht aufgefallen.

Wie Dem auch ist - WAS bekommst Du empfangen?
Bekommst Du überhaupt Werte für die anderen Stripes?
Nicht, daß Du dort wunderschön '0' empfängst und Dich hier wunderst, warum das Gelump aus bleibt.

MfG

Okay, bin noch ein totaler Anfänger, aber wie kann ich schauen was genau empfangen wird im Seriellen Monitor?

Hi

Irgendwo in Deinem Sketch wirst Du die Werte für die Ansteuerung der Stripes ja empfangen.
Genau dort sendest Du per Serial.print, WAS Du empfangen hast.
Vll. nicht nur den bloßen Wert, sondern noch etwas Erklärung drum herum.

Warum muß eigentlich immer mit einem Atomkraftwerk begonnen werden?
Klar, eine schnöde blinkende LED so ganz ohne Handy ist auch schon etwas 1980 ...

MfG

Hi
Weil Ferari fahren mehr Spass macht als Ente, glaubt man

Rentner:
Hi
Weil Ferari fahren mehr Spass macht als Ente, glaubt man

Hallo wer den genauen Hintergrund nicht kennt sollte einfach ruhig sein, außerdem was ist ein Ferari? Ich kenne nur Ferrari... :wink:

Es geht bei mir um ein Schulprojekt und leider ist mein Lehrer nicht kompetent genug um uns alles zu erklären, sondern möchte von uns etwas haben was er selber nicht erklären kann... Und deswegen versuch ich es nun selber zu lösen. Aber manche meinen natürlich direkt Ihren Senf dazu zu geben zu müssen, ohne den genauen Grund zu kennen wieso ich gerade dieses Projekt versuche in Gang zu bekommen.

Naja wie dem auch sei trotzdem danke an die nette Hilfe bisher, ich versuch mein Glück weiterhin irgendwie wird es klappen ::slight_smile:

Hi

Schön zu wissen, daß Es (Mal wieder) Hausaufgaben sind ...
Noch schöner, daß Dein Lehrer 'nicht taugt' - wird Ihn ebenfalls freuen, Das lesen zu dürfen.
Kleiner Tip: (jaaha - mittlerweile wohl mit zwei P ...) So blöd sind die Pauker meist gar nicht.
Vll. geht Ihr Ihnen am Ar*** vorbei - aber sei Dir gewiss, nach 'Arduino' und '3 LED Reihen' kann Er schon in Google eingeben - zur Not fragt Er Seinen 5-jährigen Sohn - Der kann Das bestimmt.

Nun zu Deinem Problem:
So ganz wirklich lösen willst Du Das ja scheinbar nicht.
Zumindest kommt von Dir NICHTS, was wohl Dein Sketch so an Ausgaben generiert - oder, wenn Du Welche hinzufügst, generieren könnte.

Wie so oft - viel Spaß noch mit Deinem Lehrer - auch hier gilt: Wer fic**n will, muß freundlich sein - und Dein letzter Post ist in meinen Augen bestenfalls arrogant.
Aber da ja Du von uns Hilfe haben willst, kannst Du Dir Das ja leisten :wink:

Zur Not hast Du ja noch einen, von Dir nicht wirklich als schlau bezeichneten, Lehrer, Dem Du erklären kannst, warum das Ganze nicht so läuft.

... jupp ... Du bist Deutschland ... wird echt Zeit zum Auswandern ... DAS soll Mal meine Rente finanzieren ...

In diesem Sinne:
Ab in die Rinne

PS: Jupp, bin jetzt auch weg hier, kannst also weiter machen.

dukus:
Hallo wer den genauen Hintergrund nicht kennt sollte einfach ruhig sein, außerdem was ist ein Ferari? Ich kenne nur Ferrari... :wink:

Es geht bei mir um ein Schulprojekt und leider ist mein Lehrer nicht kompetent genug um uns alles zu erklären, sondern möchte von uns etwas haben was er selber nicht erklären kann... Und deswegen versuch ich es nun selber zu lösen. Aber manche meinen natürlich direkt Ihren Senf dazu zu geben zu müssen, ohne den genauen Grund zu kennen wieso ich gerade dieses Projekt versuche in Gang zu bekommen.

Naja wie dem auch sei trotzdem danke an die nette Hilfe bisher, ich versuch mein Glück weiterhin irgendwie wird es klappen ::slight_smile:

Hallo

@dukus für den Fall das du doch noch mal hier reinschaust.

ich habe sehr wohl verstanden was Dein Problem ist und habe, wie andere auch, ganz konkrete Vorschläge gemacht was Du mal versuchen könntest. Aber leider hast Du auf keine dieser Vorschläge eine Antwort gegeben. Stattdessen jammerst Du hier rum und beschwerst Dich über deinen Lehrer. Woher willst Du wissen das er nicht kompetent genug ist. Am Ende wird er Deine Arbeit bewerten und dabei wird er sehrwohl sehen ob du dir das selbstständig erarbeitet oder lediglich kopiert hast.

Ich weiss auch nicht wie man auf die Idee kommen kann mit null Ahnung so ein Projekt anzugehen. Wenn Du nur mal 5 Stunde investiert hättest die integrierte Hilfe der IDE zu lesen um ein paar wenige Grundlagen zu verstehen und die dann auch mal zu probieren. Es gibt genug einfache Beispiele mit LED´s mit denen man dann Schritt für Schritt der endgültigen Aufgabe näher kommt. Hast Du schon mal darüber nachgedacht das genau das Dein Lehrer von Dir erwarten könnte. Stattdessen willst du mit kopieren & einfügen dein Ziel von 0 auf 100 erreichen.

viele Grüße Heinz.