Ampel mit WiFi schalten

Lese­zeit: 5 Minu­ten

Lösung
Seite als PDF

Das Pro­gramm "baut" eine HTML-Sei­te mit der eine Ampel hän­disch geschal­tet wer­den kann.

So sieht es aus:

Nach dem Start wird die zuge­wie­se­nen IP im Seri­el­len Moni­tor angezeigt:

Benö­tig­te Bauteile:

  • 1 rote LED
  • 1 grü­ne LED
  • 1 gel­be LED
  • 3 Wider­stän­de 220 Ω
  • Lei­tungs­dräh­te

Beach­te die ➨Vor­wi­der­stän­de ver­schie­de­ner LEDs

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

Vor­be­rei­tun­gen:

Instal­lie­re mit dem Board­ver­wal­ter das pas­sen­de Board:

Benö­tig­te Bibliothek:

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

# include "WiFiNINA.h"

int ROT = 5;
int GELB = 6;
int GRUEN  = 7;

// Router: Name des Routers
// Passwort: WLAN-Passwort
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";

// festeIP = false -> IP-Adresse über DHCP vergeben
// festeIP = true -> IP festlegen
bool festeIP = false;

// feste IP
IPAddress ip(192, 168, 1, 200);
// Netzwerkstatus
int status = WL_IDLE_STATUS;

WiFiServer server(80);
WiFiClient client = server.available();

Der set­up-Teil:

void setup()
{
  pinMode(ROT, OUTPUT);
  pinMode(GELB, OUTPUT);
  pinMode(GRUEN, OUTPUT);

  Serial.begin(9600);

  // statische IP
  if (festeIP) WiFi.config(ip);

  // Verbindung aufbauen
  if (WiFi.status() == WL_NO_MODULE)
  {
    Serial.println(F("Verbindungsaufbau gescheitert!"));
  }

  Serial.print("Verbindung aufbauen mit ");
  Serial.println(Router);

  while (status != WL_CONNECTED)
  {
    status = WiFi.begin(Router, Passwort);

    // Zeit für den Verbindungsaufbau
    // wenn die Verbindung nicht zustandekommt -> Zeit vergrößern
    delay(2000);
  }

  server.begin();

  // IP des Servers/des verbunden Computers anzeigen
  Serial.print("Server: ");
  Serial.println(WiFi.SSID());

  // IP des Arduinos anzeigen
  if (festeIP) Serial.print("Statische IP Adresse Arduino: ");
  else Serial.print("IP Adresse Arduino DHCP: ");
  Serial.println(WiFi.localIP());
}
Download

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  // auf Clienten warten ...
  client = server.available();
  if (client)
  {
    String SchaltungLesen;

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

        // return (\n) gesendet
        if (Zeichen == '\n')
        {
          // wenn der String SchaltungLesen leer ist
          if (SchaltungLesen == "")
          {
            /*
              HTML-Seite aufbauen
              die folgenden Anweisungen müssen
              mit print oder println gesendet werden
              println "verschönert" den Quelltext
              (erzeugt einen Zeilenumbruch im Quelltext)
              " müssen mit \ maskiert werden " -> \"
            */
            // HTML-Seite aufbauen
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");

            // Leerzeile zwingend erforderlich
            client.println();

            client.println("<!doctype html>");
            client.println("<html>");

            client.println(F("<body>"));
            client.println("<h2>Ampel mit WiFi-Modul schalten</h2>");
            client.println("<hr />");

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

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

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

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

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

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

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

            client.println("<hr />");

            // IPs anzeigen
            client.print("<b>Eigene IP: ");
            client.print(client.remoteIP());
            client.print("</b>");
            client.print("<br><b>IP Arduino: ");
            client.print(WiFi.localIP());
            client.print("</b>");
            client.println("</body>");
            client.println("</html>");

            // HTTP-Antwort endet mit neuer Zeile
            client.println();

            // Seite vollständig geladen -> loop verlassen
            break;
          }

          // wenn SchaltungLesen nicht leer ist -> Inhalt löschen
          else
          {
            SchaltungLesen = "";
          }
        }

        // bei einem anderen Zeichen als return (\r)
        // -> Zeichen dem String SchaltungLesen hinzufügen
        else if (Zeichen != '\r')
        {
          SchaltungLesen += Zeichen;
        }

        // indexOf überprüft, ob die Zeichenfolge im String SchaltungLesen enthalten ist
        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);
      }
    }

    client.stop();
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 11. Feb 2024 @ 10:33