Ampel mit einem Ethernet-Shield schalten

Lese­zeit: 6 Minu­ten
Navi­ga­ti­on

Für die­se Auf­ga­be benö­tigst du ein soge­nann­tes „Shield“, eine Pla­ti­ne, die ein­fach auf den Ardui­no auf­ge­steckt wird. Auf ihr befin­det sich ein LAN-Anschluss (RJ45). Alle digi­ta­len und ana­lo­gen Anschlüs­se ste­hen auch wei­ter­hin zur Verfügung.

Benö­tig­te Bauteile:

  • 3 LEDs (rot, gelb, grün)
  • 3 Wider­stän­de > 100 Ω
  • Ethernet-Shield
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Bei­spiel:

Das Pro­gramm schal­tet die rote LED ein und aus.
So sieht das Pro­gramm im Brow­ser aus:

Benö­tig­te Biblio­thek:
Sketch → Biblio­thek ein­bin­den → Biblio­the­ken verwalten

Bin­de die benö­tig­te Biblio­thek ein und defi­nie­re die Variablen.

# include <Ethernet.h>
 
int ROT = 5;
int GELB = 6;
int GRUEN = 7;

// MAC-Adresse und IP definieren
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 12 };

// Name vergeben
EthernetServer server(80);

// SchaltungLesen beinhaltet den Befehl zum Schalten der LED
String SchaltungLesen; 

Der setup-Teil. Beach­te die Kommentare.

void setup()
{
  Serial.begin(9600);
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);

  // mit fester IP starten
  Ethernet.begin(mac, ip);

  // Ethernet starten
  server.begin();

  // zur Kontrolle IP-Adresse anzeigen
  Serial.print("IP-Adresse des Servers: ");
  Serial.println(Ethernet.localIP());
} 

Der loop-Teil. Beach­te die Kommentare.

void loop() 
{ 
  // auf Clienten warten ...   
  EthernetClient client = server.available(); 

  // neue Anfrage 
  if (client) 
  {  
    // solange der Client verbunden ist ...  
    while (client.connected()) 
    { 
      if (client.available()) 
      {  
        // Daten vom Clienten lesen ... 
        char Zeichen = client.read(); 

        // ... und die Antwort zusammenbauen 
        SchaltungLesen += Zeichen; 

        // return gesendet 
        if (Zeichen == '\n') 
        { 
          client.println("HTTP/1.1 200 OK"); 
          client.println("Content-Type: text/html"); 
          client.println("Connection: close"); 
          client.println(); 
          client.println("<html>"); 
          client.println("<body>"); 
          client.println("<h2>>LED mit Ethernet-Shield schalten</h2>>"); 
          client.println("<hr />"); 

          // Button rot ein mit CSS formatieren 
          // Aufruf mit Javascript -> location.href 
          client.print("<input style='font-size:14pt; font-weight:bold;"); 
          client.print("background-color:#FF6565;"); 
          client.print("width:200; cursor:pointer;'type='button'"); 
          client.println("onClick= location.href='RotEin' value='rot einschalten'>");

          // Button rot aus 
          client.print("<input style='font-size:14pt; font-weight:bold;"); 
          client.print("background-color:white;"); 
          client.print("width:200; cursor:pointer;'type='button'"); 
          client.println("onClick= location.href='RotAus' value='rot ausschalten'>"); 
          client.println("<hr />"); 
          client.print("<b>Eigene IP: "); 
          client.print(client.remoteIP());
          client.print("</b>");
          client.println("</body>"); 
          client.println("</html>");
          delay(1); 
          client.stop(); 

          /*
            Buttons auswerten 
            indexOf -> untersuchen ob der String RotEin 
            in der Antwort enthalten ist 
          */
          if (SchaltungLesen.indexOf("RotEin") > 0) digitalWrite(ROT, HIGH); 
          if (SchaltungLesen.indexOf("RotAus") > 0) digitalWrite(ROT, LOW); 
 
          // String SchaltungLesen löschen 
          SchaltungLesen = ""; 
        } 
      } 
    } 
  }
}

Ergän­ze das Pro­gramm mit den übri­gen But­tons zum Schal­ten der LEDs und wer­te die But­tons aus.

So soll das fer­ti­ge Pro­gramm im Brow­ser aussehen:

Die Defi­ni­ti­on der Buttons:

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");

// Leerzeile zwingend erforderlich
client.println();
client.println("<html>");

client.println("<body>");
client.println("<h2>Ampel mit Ethernet-Shield schalten</h2>");
client.println("<hr />");

client.println("<table><tr>");

// Button rot ein
client.print("<td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:#FF6565;");
client.print("width:200; cursor:pointer;'type='button'");
client.println("onClick= location.href='RotEin' value='rot einschalten'></td>");

// Button rot aus
client.print("<td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:white;");
client.print("width:200; cursor:pointer;'type='button'");
client.println("onClick= location.href='RotAus' value='rot ausschalten'></td></tr>");

// Button gelb ein
client.print("<tr><td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:#FFFB65;");
client.print("width:200; cursor:pointer;'type='button'");
client.println("onClick= location.href='GelbEin' value='gelb einschalten'></td>");

// Button gelb aus
client.print("<td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:white;");
client.print("width:200; cursor:pointer;'type='button'");
client.println("onClick= location.href='GelbAus' value='gelb ausschalten'></td></tr>");

// Button grün ein
client.print("<tr><td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:#76FA5F;");
client.print("width:200; cursor:pointer;'type='button'");
client.println("onClick= location.href='GruenEin' value='grün einschalten'></td>");

// Button grün aus
client.print("<td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:white;");
client.print("width:200; cursor:pointer;'type='button'");
client.println("onClick= location.href='GruenAus' value='grün 
ausschalten'></td></tr>");

// Button alle an
client.print("<tr><td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:#8C90F3;");
client.print("width:200; cursor:pointer;'type='button'");
client.println("onClick= location.href='AlleAn' value='alle einschalten'></td>");

// Button alle aus
client.print("<td><input style='font-size:14pt; font-weight:bold;");
client.print("background-color:white;");
client.print("width:200; cursor:pointer;'type='button'");
client.print("onClick= location.href='AlleAus' value='alle ausschalten'></td></tr>");

client.println("</table>");
client.println("<hr />");
client.print("<b>Eigene IP: ");
client.print(client.remoteIP());
client.println("</body>");
client.println("</html>");

Die Aus­wer­tung der Buttons:

// Buttons auswerten
if (SchaltungLesen.indexOf("RotEin") > 0) digitalWrite(ROT, HIGH);

if (SchaltungLesen.indexOf("RotAus") > 0) digitalWrite(ROT, LOW);

if (SchaltungLesen.indexOf("GelbEin") > 0) digitalWrite(GELB, HIGH);
if (SchaltungLesen.indexOf("GelbAus") > 0) digitalWrite(GELB, LOW);

if (SchaltungLesen.indexOf("GruenEin") > 0) digitalWrite(GRUEN, HIGH);

if (SchaltungLesen.indexOf("GruenAus") > 0) digitalWrite(GRUEN, LOW);

if (SchaltungLesen.indexOf("AlleAn") > 0)
{
  digitalWrite(ROT, HIGH);
  digitalWrite(GELB, HIGH);
  digitalWrite(GRUEN, HIGH);
}

if (SchaltungLesen.indexOf("AlleAus") > 0)
{
  digitalWrite(ROT, LOW);
  digitalWrite(GELB, LOW);
  digitalWrite(GRUEN, LOW);
}


Ver­wand­te Aufgaben:


Letzte Aktualisierung: 24. Nov 2020 @ 8:52