Projekt steht nicht zum kostenlosen Download zur Verfügung! Wenn Sie den Softwareteil des Projekts mit den auf der angegebenen Seite beschriebenen Funktionen erwerben möchten, wenden Sie sich an: martinius96@gmail.com
Arduino 74HC595 Shift register Ethernet Wiznet W5100 Schematics Webserver WebClient

Kaskade 74HC595 über Arduino gesteuert - Versuchen Sie es online HIER! - WebClient


  • Das System verwendet insgesamt 12 74HC595-Schieberegister, die in einer Kaskade verbunden sind.
  • Jedes Register kann die Nummer 0-9 über die 8 angeschlossenen LEDs anzeigen.
  • Alle 4 Schieberegister bilden eine logische Einheit - eine Anzeige zur Auflistung einer vierstelligen Nummer.
  • Webserver:


  • Webserver läuft auf Arduine Uno.
  • Stellt eine HTML-Webseite mit einem Formular bereit, in das Sie drei Ziffern eingeben können.
  • Nach dem Absenden des Formulars werden die Daten verarbeitet und im EEPROM-Speicher gespeichert. Der Benutzer wird auf einer separaten Unterseite über die Verarbeitung der Daten informiert.
  • Nach dem Speichern der Daten wird der Benutzer zurück zum Formular geleitet.
  • Der EEPROM-Speicher ist nicht flüchtig. Auf Daten kann auch nach Wiederherstellung der Stromversorgung zugegriffen werden, die Karte wird jedoch neu gestartet.
  • Alle Nummern werden dann auf drei Anzeigen dargestellt, die aus 12 74HC595-Schieberegistern bestehen.
  • WebClient:


  • Arduino verwendet im Client-Modus Remote-Webserver-Dienste.
  • Die Kommunikation mit dem Webserver erfolgt alle 5 Sekunden nach dem HTTP-Protokoll.
  • Auf dem Webserver wird eine PHP-Webanwendung ausgeführt, mit der Sie drei vierstellige Zahlen über ein Formular eingeben können.
  • Formulardaten werden in einer MySQL-Datenbank gespeichert.
  • Die Arduino-Anforderung ruft Daten aus dieser Datenbank ab, indem der Server abgefragt wird.
  • Arduino analysiert die verarbeiteten Daten und rendert sie dann über die 74HC595-Schieberegister.
  • Die Daten werden auch im EEPROM-Speicher des Arduino gespeichert. Sie werden verwendet, wenn die Verbindung zum Webserver fehlschlägt. Wenn die Arduino-Karten neu gestartet werden, werden sie zum anfänglichen Rendern der Daten in den Schieberegistern verwendet.
  • Daten im EEPROM werden nur überschrieben, wenn sich die Daten ändern. Die EEPROM-Zellen werden vor unnötigem Überschreiben geschützt.
  • Schaltplan für ein Display (Erweiterung für ein anderes 74HC595 in Kaskade)

    Schéma zapojenia pre Arduino + Ethernet, Shift register 74HC595 Formulár pre zápis hodnôt, spracovanie cez Arduino + Ethernet / W5100 vykreslenie na LED diódy - Shift register 74HC595

    Programm für den WebClient-Modus

    //WebClient - Shift Register 74HC595
    //Arduino + Ethernet Wiznet W5100
    //Autor: Martin Chlebovec (martinius96)
    //Web: https://arduino.php5.sk
    //Donate: https://paypal.me/chlebovec
    
    #include <SPI.h>
    #include <Ethernet.h>
    #include <EEPROM.h>
    #define pinData 6
    #define pinLatch 7
    #define pinClock 8
    
    unsigned long lastDebounceTime = 0;
    
    byte mac[] = { 0xAA, 0xBB, 0xCC, 0x81, 0x7B, 0x4A };
    const char * host = "www.arduino.php5.sk"; //PRIPADNE IP ADRESA websevera
    IPAddress ip(192, 168, 1, 50);
    
    EthernetClient client;
    
    void ledWrite() {
      String line  = read_String(10);
      String line2  = read_String(100);
      String line3  = read_String(200);
    
      String prve_cislo = line.substring(0, 1);
      String druhe_cislo = line.substring(1, 2);
      String tretie_cislo = line.substring(2, 3);
      String stvrte_cislo = line.substring(3, 4);
    
      String piate_cislo = line2.substring(0, 1);
      String sieste_cislo = line2.substring(1, 2);
      String siedme_cislo = line2.substring(2, 3);
      String osme_cislo = line2.substring(3, 4);
    
      String deviate_cislo = line3.substring(0, 1);
      String desiate_cislo = line3.substring(1, 2);
      String jedenaste_cislo = line3.substring(2, 3);
      String dvanaste_cislo = line3.substring(3, 4);
      int cislo_1;
      int cislo_2;
      int cislo_3;
      int cislo_4;
    
      int cislo_5;
      int cislo_6;
      int cislo_7;
      int cislo_8;
    
      int cislo_9;
      int cislo_10;
      int cislo_11;
      int cislo_12;
    
      if (prve_cislo == "0") {
        cislo_1 = 127;
      } else if (prve_cislo == "1") {
        cislo_1 = 48;
      } else if (prve_cislo == "2") {
        cislo_1 = 238;
      } else if (prve_cislo == "3") {
        cislo_1 = 250;
      } else if (prve_cislo == "4") {
        cislo_1 = 179;
      } else if (prve_cislo == "5") {
        cislo_1 = 219;
      } else if (prve_cislo == "6") {
        cislo_1 = 223;
      } else if (prve_cislo == "7") {
        cislo_1 = 112;
      } else if (prve_cislo == "8") {
        cislo_1 = 255;
      } else if (prve_cislo == "9") {
        cislo_1 = 251;
      }
    
      if (druhe_cislo == "0") {
        cislo_2 = 127;
      } else if (druhe_cislo == "1") {
        cislo_2 = 48;
      } else if (druhe_cislo == "2") {
        cislo_2 = 238;
      } else if (druhe_cislo == "3") {
        cislo_2 = 250;
      } else if (druhe_cislo == "4") {
        cislo_2 = 179;
      } else if (druhe_cislo == "5") {
        cislo_2 = 219;
      } else if (druhe_cislo == "6") {
        cislo_2 = 223;
      } else if (druhe_cislo == "7") {
        cislo_2 = 112;
      } else if (druhe_cislo == "8") {
        cislo_2 = 255;
      } else if (druhe_cislo == "9") {
        cislo_2 = 251;
      }
    
      if (tretie_cislo == "0") {
        cislo_3 = 127;
      } else if (tretie_cislo == "1") {
        cislo_3 = 48;
      } else if (tretie_cislo == "2") {
        cislo_3 = 238;
      } else if (tretie_cislo == "3") {
        cislo_3 = 250;
      } else if (tretie_cislo == "4") {
        cislo_3 = 179;
      } else if (tretie_cislo == "5") {
        cislo_3 = 219;
      } else if (tretie_cislo == "6") {
        cislo_3 = 223;
      } else if (tretie_cislo == "7") {
        cislo_3 = 112;
      } else if (tretie_cislo == "8") {
        cislo_3 = 255;
      } else if (tretie_cislo == "9") {
        cislo_3 = 251;
      }
    
      if (stvrte_cislo == "0") {
        cislo_4 = 127;
      } else if (stvrte_cislo == "1") {
        cislo_4 = 48;
      } else if (stvrte_cislo == "2") {
        cislo_4 = 238;
      } else if (stvrte_cislo == "3") {
        cislo_4 = 250;
      } else if (stvrte_cislo == "4") {
        cislo_4 = 179;
      } else if (stvrte_cislo == "5") {
        cislo_4 = 219;
      } else if (stvrte_cislo == "6") {
        cislo_4 = 223;
      } else if (stvrte_cislo == "7") {
        cislo_4 = 112;
      } else if (stvrte_cislo == "8") {
        cislo_4 = 255;
      } else if (stvrte_cislo == "9") {
        cislo_4 = 251;
      }
    
      if (piate_cislo == "0") {
        cislo_5 = 127;
      } else if (piate_cislo == "1") {
        cislo_5 = 48;
      } else if (piate_cislo == "2") {
        cislo_5 = 238;
      } else if (piate_cislo == "3") {
        cislo_5 = 250;
      } else if (piate_cislo == "4") {
        cislo_5 = 179;
      } else if (piate_cislo == "5") {
        cislo_5 = 219;
      } else if (piate_cislo == "6") {
        cislo_5 = 223;
      } else if (piate_cislo == "7") {
        cislo_5 = 112;
      } else if (piate_cislo == "8") {
        cislo_5 = 255;
      } else if (piate_cislo == "9") {
        cislo_5 = 251;
      }
    
      if (sieste_cislo == "0") {
        cislo_6 = 127;
      } else if (sieste_cislo == "1") {
        cislo_6 = 48;
      } else if (sieste_cislo == "2") {
        cislo_6 = 238;
      } else if (sieste_cislo == "3") {
        cislo_6 = 250;
      } else if (sieste_cislo == "4") {
        cislo_6 = 179;
      } else if (sieste_cislo == "5") {
        cislo_6 = 219;
      } else if (sieste_cislo == "6") {
        cislo_6 = 223;
      } else if (sieste_cislo == "7") {
        cislo_6 = 112;
      } else if (sieste_cislo == "8") {
        cislo_6 = 255;
      } else if (sieste_cislo == "9") {
        cislo_6 = 251;
      }
    
      if (siedme_cislo == "0") {
        cislo_7 = 127;
      } else if (siedme_cislo == "1") {
        cislo_7 = 48;
      } else if (siedme_cislo == "2") {
        cislo_7 = 238;
      } else if (siedme_cislo == "3") {
        cislo_7 = 250;
      } else if (siedme_cislo == "4") {
        cislo_7 = 179;
      } else if (siedme_cislo == "5") {
        cislo_7 = 219;
      } else if (siedme_cislo == "6") {
        cislo_7 = 223;
      } else if (siedme_cislo == "7") {
        cislo_7 = 112;
      } else if (siedme_cislo == "8") {
        cislo_7 = 255;
      } else if (siedme_cislo == "9") {
        cislo_7 = 251;
      }
    
      if (osme_cislo == "0") {
        cislo_8 = 127;
      } else if (osme_cislo == "1") {
        cislo_8 = 48;
      } else if (osme_cislo == "2") {
        cislo_8 = 238;
      } else if (osme_cislo == "3") {
        cislo_8 = 250;
      } else if (osme_cislo == "4") {
        cislo_8 = 179;
      } else if (osme_cislo == "5") {
        cislo_8 = 219;
      } else if (osme_cislo == "6") {
        cislo_8 = 223;
      } else if (osme_cislo == "7") {
        cislo_8 = 112;
      } else if (osme_cislo == "8") {
        cislo_8 = 255;
      } else if (osme_cislo == "9") {
        cislo_8 = 251;
      }
    
      if (deviate_cislo == "0") {
        cislo_9 = 127;
      } else if (deviate_cislo == "1") {
        cislo_9 = 48;
      } else if (deviate_cislo == "2") {
        cislo_9 = 238;
      } else if (deviate_cislo == "3") {
        cislo_9 = 250;
      } else if (deviate_cislo == "4") {
        cislo_9 = 179;
      } else if (deviate_cislo == "5") {
        cislo_9 = 219;
      } else if (deviate_cislo == "6") {
        cislo_9 = 223;
      } else if (deviate_cislo == "7") {
        cislo_9 = 112;
      } else if (deviate_cislo == "8") {
        cislo_9 = 255;
      } else if (deviate_cislo == "9") {
        cislo_9 = 251;
      }
    
      if (desiate_cislo == "0") {
        cislo_10 = 127;
      } else if (desiate_cislo == "1") {
        cislo_10 = 48;
      } else if (desiate_cislo == "2") {
        cislo_10 = 238;
      } else if (desiate_cislo == "3") {
        cislo_10 = 250;
      } else if (desiate_cislo == "4") {
        cislo_10 = 179;
      } else if (desiate_cislo == "5") {
        cislo_10 = 219;
      } else if (desiate_cislo == "6") {
        cislo_10 = 223;
      } else if (desiate_cislo == "7") {
        cislo_10 = 112;
      } else if (desiate_cislo == "8") {
        cislo_10 = 255;
      } else if (desiate_cislo == "9") {
        cislo_10 = 251;
      }
    
      if (jedenaste_cislo == "0") {
        cislo_11 = 127;
      } else if (jedenaste_cislo == "1") {
        cislo_11 = 48;
      } else if (jedenaste_cislo == "2") {
        cislo_11 = 238;
      } else if (jedenaste_cislo == "3") {
        cislo_11 = 250;
      } else if (jedenaste_cislo == "4") {
        cislo_11 = 179;
      } else if (jedenaste_cislo == "5") {
        cislo_11 = 219;
      } else if (jedenaste_cislo == "6") {
        cislo_11 = 223;
      } else if (jedenaste_cislo == "7") {
        cislo_11 = 112;
      } else if (jedenaste_cislo == "8") {
        cislo_11 = 255;
      } else if (jedenaste_cislo == "9") {
        cislo_11 = 251;
      }
    
      if (dvanaste_cislo == "0") {
        cislo_12 = 127;
      } else if (dvanaste_cislo == "1") {
        cislo_12 = 48;
      } else if (dvanaste_cislo == "2") {
        cislo_12 = 238;
      } else if (dvanaste_cislo == "3") {
        cislo_12 = 250;
      } else if (dvanaste_cislo == "4") {
        cislo_12 = 179;
      } else if (dvanaste_cislo == "5") {
        cislo_12 = 219;
      } else if (dvanaste_cislo == "6") {
        cislo_12 = 223;
      } else if (dvanaste_cislo == "7") {
        cislo_12 = 112;
      } else if (dvanaste_cislo == "8") {
        cislo_12 = 255;
      } else if (dvanaste_cislo == "9") {
        cislo_12 = 251;
      }
      shiftOut(pinData, pinClock, LSBFIRST, cislo_1);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_2);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_3);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_4);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_5);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_6);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_7);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_8);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_9);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_10);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_11);
      shiftOut(pinData, pinClock, LSBFIRST, cislo_12);
      digitalWrite(pinLatch, HIGH);
      digitalWrite(pinLatch, LOW);
    }
    void writeString(char add, String data)
    {
      int _size = data.length();
      int i;
      for (i = 0; i < _size; i++)
      {
        EEPROM.write(add + i, data[i]);
      }
      EEPROM.write(add + _size, '\0'); //Add termination null character for String Data
    }
    
    
    String read_String(char add)
    {
      int i;
      char data[100]; //Max 100 Bytes
      int len = 0;
      unsigned char k;
      k = EEPROM.read(add);
      while (k != '\0' && len < 500) //Read until null character
      {
        k = EEPROM.read(add + len);
        data[len] = k;
        len++;
      }
      data[len] = '\0';
      return String(data);
    }
    void setup() {
      Serial.begin(115200);
    
      pinMode(pinData, OUTPUT);
      pinMode(pinLatch, OUTPUT);
      pinMode(pinClock, OUTPUT);
      ledWrite();
      if (Ethernet.begin(mac) == 0) {
        // Ethernet.begin(mac); //DYNAMIC IP
        Ethernet.begin(mac, ip); //STATIC IP
      }
      Serial.print("  DHCP assigned IP ");
      Serial.println(Ethernet.localIP());
      Serial.println("Ready");
    }
    
    void loop() {
      if (Ethernet.begin(mac) == 0) {
        // Ethernet.begin(mac); //DYNAMIC IP
        Ethernet.begin(mac, ip); //STATIC IP
        Serial.print("  DHCP assigned IP ");
        Serial.println(Ethernet.localIP());
      }
      if ((millis() - lastDebounceTime) > 5000) {
        lastDebounceTime = millis();
        client.stop();
        String url = "/led/data.php";
        if (client.connect(host, 80)) {
          Serial.println("Pripojenie na webserver uspesne");
          client.print(String("GET ") + url + " HTTP/1.0\r\n" + "Host: " + host + "\r\n" + "User-Agent: WiznetW5100\r\n" + "Connection: close\r\n\r\n");
          while (client.connected()) {
            String line = client.readStringUntil('\n');
            if (line == "\r") {
              break;
            }
          }
          String line = client.readStringUntil('\n');
          line = line + String("\n");
          Serial.println(line);
          char str[line.length() + 1];
          line.toCharArray(str, line.length());
          const char terminator4[2] = "&";
          const char terminator5[2] = "=";
          char* hodnota1;
          char* hodnota2;
          char* hodnota3;
          hodnota1 = strtok(str, terminator4);
    
          hodnota2 = strtok(NULL, terminator4);
          hodnota3 = strtok(NULL, terminator4);
          Serial.println(hodnota1);
          Serial.println(hodnota2);
          Serial.println(hodnota3);
          char* H_1;
          char* H_2;
          char* H_3;
    
          strtok(hodnota1, terminator5);
          H_1 = strtok(NULL, terminator5);
    
          strtok(hodnota2, terminator5);
          H_2 = strtok(NULL, terminator5);
    
          strtok(hodnota3, terminator5);
          H_3 = strtok(NULL, terminator5);
          Serial.println(String(H_1));
          Serial.println(String(H_2));
          Serial.println(String(H_3));
          String line_1  = read_String(10);
          String line_2  = read_String(100);
          String line_3  = read_String(200);
          if (String(H_1) != line_1) {
            writeString(10, String(H_1));
          }
          if (String(H_2) != line_2) {
            writeString(100, String(H_2));
          }
          if (String(H_3) != line_3) {
            writeString(200, String(H_3));
          }
          ledWrite();
        } else {
          Serial.println("Spojenie s webserverom neuspesne");
        }
      }
    }