Was sind QR-Codes?

QR steht für "Quick Response" (schnelle Antwort) und ist vergleichbar mit einem Barcode aus dem Supermarkt, jedoch können durch seinen 2D-Aufbau viel mehr Daten hinterlegt werden. Der QR-Code besteht aus einer quadratischen Matrix aus schwarzen und weißen Quadraten. Hier sind binär die Daten hinterlegt, die durch einen fehlerkorrigierenden Code erweitert werden, sodass sie auch noch entschlüsselt werden können, wenn 30% des QR-Codes nicht mehr vorhanden ist.

QR-Code-Scanner-Modul

In diesem Projekt wird das "DEBO BARC SCAN Entwicklerboard" verwendet. In der zugehörigen Bedienungsanleitung findest du alle wichtigen Informationen für die Konfiguration des Moduls.

QR_Code_Scanner

Schaltung

Den Schaltplan kannst du dir im Hauptmenü dieses Projektes herunterladen.

Konfiguration

Die Konfigurationsdatei ist ebenfalls im Hauptmenü enthalten. Die QR-Codes für die Konfiguration sind aus der Bedienungsanleitung entnommen worden. Es sind noch weitere Einstellungen möglich, jedoch sind dies die wichtigsten für dieses Projekt.

Programmierung

Als erstes muss für die serielle Übertragung der Daten die Bibliothek "SoftwareSerial.h" hinzugefügt werden. Diese findest du im Bibliotheksverwalter unter dem Namen "ESPSoftwareSerial".
Im Schaltplan haben wir die Pins 16 und 17 für "transmit" und "receive" gewählt. Diese werden in der zweiten Zeile der seriellen Schnittstelle (UART) zugeordnet. Die Schnittstelle ist jetzt unter dem Namen "QR_Port" erreichbar. Der Port kann auch anders benannt werden, jedoch solltest du den Namen immer so wählen, dass du weißt, was sich dahinter verbirgt. Zusätzlich erstellen wir einen String mit dem Namen "inhalt". Hier werden die Zeichen, die vom QR-Code_Scanner-Modul übermittelt werden, gespeichert. Außerdem wird die Variable zeit vom Datentyp long deklariert und mit der Zahl 0 initialisiert. Die Verwendung wird später in der loop-Funktion beschrieben.

#include <SoftwareSerial.h>     // Bibliothek SoftwareSerial.h
SoftwareSerial QR_Port(16,17);  // Rx, Tx
String inhalt = "";             // Variable für den Inhalt des QR-Codes nach dem Auslesen
long zeit = 0;                  // Variable zur Zwischenspeicherung der Programmlaufzeit

In der "setup-Methode" wird nun mit Hilfe des Befehls "begin()" die serielle Übertragung zum PC sowie zum QR-Code-Scanner-Modul gestartet. Die Baudrate wird bei beiden Schnittstellen auf 9600 eingestellt. Nun kann der ESP32 mit dem PC und dem QR-Code-Scanner-Modul kommunizieren.

void setup() {
  Serial.begin(9600);   // Verbindung zum PC
  QR_Port.begin(9600);  // Verbindung zum QR-Port-Scanner-Modul
}

In der "loop-Funktion" wird mit Hilfe der if-Bedingung überprüft, ob Daten durch das Einscannen eines QR-Codes vorhanden sind. Wird diese Bedingung erfüllt, so wird in die Variable die derzeitige Programmlaufzeit (Befehl millis()) geschrieben. In der "while-Schleife" wird nun eine halbe Sekunde auf Daten gewartet. Die übertragenen Daten werden durch die Typ-Konvertierung "(char)" in ASCII-Zeichen umgewandelt, die anschließend über den seriellen Monitor ausgegeben werden. Abschließend wird der Inhalt wieder gelöscht, sodass weitere QR-Codes eingescannt und deren Inhalt ausgegeben werden kann.

void loop() {
  if(QR_Port.available())                 // Abfrage, ob QR-Code-Daten vorhanden sind
  {
    zeit = millis();                      // Programmlaufzeit zwischenspeichern
    while(millis() <= (zeit+500))         // eine halbe Sekunde warten
    {
      if(QR_Port.available())             // Abfrage, ob QR-Code-Daten vorhanden sind
      {
        inhalt += (char)QR_Port.read();   // Daten in Variable inhalt speichern
      }
    }
    Serial.println(inhalt);               // Daten ausgeben
    inhalt = "";                          // Inhalt löschen für erneutes Einlesen
  }  
}
Zuletzt geändert: Freitag, 6. August 2021, 08:15