- Also, was ist dieser QR-Code überhaupt?
- Generieren Sie Ihren eigenen QR-Code
- Konvertieren des PNG in das BMP-Format
- Konvertieren Sie das BMP-Bild in ein Array von HEX-Codes
- Schaltplan
- Code Erklärung
Der "Quick Response" -Code oder abgekürzt als QR-Code ist zu einem wesentlichen Bestandteil unseres digitalen Lebens geworden. Es besteht die Möglichkeit, dass Sie bereits unbewusst mit ihnen vertraut sind, obwohl Sie wahrscheinlich in Ihrem örtlichen Lebensmittelgeschäft herumgelaufen sind, oder vielleicht auch Lesen Sie Ihr Lieblingsbuch durch, oder Sie tätigen möglicherweise eine Online-Zahlung mit Google Pay, PhonePe oder Paytm oder surfen im Internet usw. (Ich nehme an, ich könnte mit Beispielen weitermachen, oder?), und Sie sind zufällig gekommen über diese seltsam aussehende quadratische Sache und dachte, was ist diese quadratische Sache überhaupt und wenn Sie nicht… nun, keine Sorge, es wird früher oder später passieren, um das Thema besser zu verstehen, werden wir eine machen lustiges kleines Projekt mit Arduino und OLED und entmystifizieren die folgenden Dinge:
- Grundkonzept des QR-Codes.
- Wie es funktioniert.
- So erstellen Sie mit Arduino Ihren eigenen QR-Code.
- Zeigen Sie es schließlich auf einem OLED-Bildschirm (SSD1306) an.
Also, was ist dieser QR-Code überhaupt?
QR-Code (Quick Response Code) ist ein Matrix-2D-Code zum Lesen von Daten mit hoher Geschwindigkeit, der 1994 von DENSO WAVE für die japanische Automobilindustrie entwickelt wurde. Ein QR-Code komprimiert Daten im Vergleich zum Standard-Barcode sehr effizient. Um dies zu erreichen, werden vier standardisierte Codierungsmodi (numerisch, alphanumerisch, Byte / Binär und Kanji) verwendet. Die Technologie wurde "Open Source" bereitgestellt, dh für alle verfügbar Sehr schnell an Popularität gewonnen. Wesentliche Vorteile von QR-Codes gegenüber herkömmlichen Barcodes sind eine größere Datenkapazität und eine hohe Fehlertoleranz.
Wie funktioniert der QR-Code?
QR-Codes (und andere Datenmatrix-Codes) können von Spezialwerkzeugen und nicht von Menschen gelesen werden. Daher können wir nur eine bestimmte Menge verstehen, wenn wir sie visuell untersuchen, obwohl jeder Code auf verschiedene Weise unterschiedlich ist, obwohl er einige interessante Gemeinsamkeiten enthält Funktionen unter Beachtung des QR-Codes von Circuitdigest.com werden wir einige davon untersuchen
- Finder-Muster: Große quadratische Kästchen mit einem durchgezogenen Kästchen in den drei Ecken des Codes erleichtern die Bestätigung, dass es sich um einen QR-Code handelt, da es nur drei davon gibt. Daher ist es ziemlich offensichtlich, auf welche Weise der Code ausgerichtet ist.
- Ausrichtungsmuster: Dies stellt sicher, dass der Code unabhängig von der Ausrichtung lesbar ist.
- Timing-Muster: Dieses Muster verläuft horizontal und vertikal zwischen den drei Suchermustern . Mithilfe dieser Zeilen kann der Leser die Größe des Codes bestimmen.
- Versionsinformationen: Derzeit gibt es 40 verschiedene Versionen des QR-Code-Standards. In diesem Abschnitt des Codes wird die verwendete QR-Code-Version für die normalerweise verwendete Marketing-Version 1-7 festgelegt.
- Formatinformationen: Die Formatpartner verfügen über Informationen zur Fehlertoleranz und Datenmaskierung.
- Datenbereich: Dieser Abschnitt des Codes enthält alle Datenelemente und den Fehlerkorrekturcode.
- Beendigungszone: Der Abstand in jedem QR-Code ist obligatorisch, um den Code von seiner Umgebung zu unterscheiden.
Das Bild unten gibt Ihnen eine klare Vorstellung vom Code
Andere Abschnitte des Codes sind Daten- und Redundanzcode.
Es gibt eine Reihe weiterer Funktionen und komplizierter Themen, die ich in diesem Tutorial nicht behandeln werde. Wenn Sie weitere Informationen zum QR-Code lesen möchten, folgen Sie bitte diesem QR-Code-Tutorial von Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008.
Die Spezifikation des QR-Codes
Symbolgröße |
Mindest. 21x21 Zelle - max. 177x177-Zelle (mit 4-Zellen-Intervall) |
|
Informationstyp und -volumen |
Numerische Zeichen |
Maximal 7.089 Zeichen |
Alphabete, Zeichen |
Maximal 4.296 Zeichen |
|
Binär (8 Bit) |
Maximal 2.953 Zeichen |
|
Kanji-Charaktere |
Maximal 1.817 Zeichen |
|
Umwandlungseffizienz |
Modus für numerische Zeichen |
3.3 Zellen / Zeichen |
Alphanumerischer Modus / Zeichenmodus |
5,5 Zellen / Zeichen |
|
Binärmodus (8 Bit) |
8 Zellen / Zeichen |
|
Kanji-Charakter-Modus (13 Bit) |
13 Zellen / Zeichen |
|
Fehler Korrektur Funktionalität |
Stufe L. |
Ca. Maximal 7% der Symbolfläche wiederhergestellt |
Stufe M. |
Ca. Maximal 15% der Symbolfläche wiederhergestellt |
|
Stufe Q. |
Ca. Maximal 25% der Symbolfläche wiederhergestellt |
|
Stufe H. |
Ca. Maximal 30% der Symbolfläche wiederhergestellt |
|
Verknüpfungsfunktionalität |
Kann maximal in 16 Symbole unterteilt werden |
Generieren Sie Ihren eigenen QR-Code
Befolgen Sie die unten aufgeführten Schritte, um Ihren eigenen QR-Code zu generieren. In diesem Beispiel erstellen wir einen QR-Code für unsere beliebte Circuit Digest- Website
Um einen QR-Code zu generieren, gehen Sie zu dieser Website. Wenn Sie sich die Oberseite der Website ansehen, sehen Sie eine Liste mit Optionen. In diesem Tutorial generieren wir einen QR-Code für eine URL
- Klicken Sie auf die Registerkarte URL und fügen Sie die URL für den Circuit Digest in den Abschnitt URL eingeben ein.
- Klicken Sie auf Speichern.
- Geben Sie einen Dateinamen für die Ausgabedatei an.
- Wählen Sie PNG als unser bevorzugtes Dateiformat.
- und klicken Sie auf Speichern.
Das Bild unten gibt Ihnen eine klare Vorstellung von dem Prozess
Unser liebster Mikrocontroller „Arduino“ ist nicht so intelligent, dass er nur das PNG-Rohbild kompilieren und im OLED-Display anzeigen kann. Um den QR-Code der OLED anzuzeigen, müssen wir einige einfache Schritte ausführen und das PNG-Bild in ein von Arduino lesbares Bitmap-Array konvertieren. Diese Konvertierung haben wir zuvor durchgeführt, während wir SSD1306 OLED mit Arduino und Graphical LCD mit Arduino verbunden haben. Wir haben auch SSD1306 OLED mit Raspberry Pi, ESP32, NodeMCU und vielen anderen Mikrocontrollern verbunden. Die Konvertierung von Bitmap-Arrays kann in den folgenden zwei Schritten erfolgen:
- Konvertieren des PNG in das BMP-Format.
- Konvertieren Sie das BMP-Bild in ein Array von HEX-Codes.
Konvertieren des PNG in das BMP-Format
Um das heruntergeladene PNG-Bild in ein BMP-Bild zu konvertieren, besuchen Sie diese Website und den Abschnitt Bildkonverter und
- Klicken Sie auf das Dropdown-Menü und wählen Sie
- In BMP konvertieren
- Klicken Sie auf Los
Das Bild unten gibt Ihnen eine klare Vorstellung von dem Prozess:
Ihnen wird eine neue Seite angezeigt, die wie folgt aussieht:
- Klicken Sie auf die Registerkarte Dateien auswählen und wählen Sie das heruntergeladene Bild aus
- Geben Sie in den optionalen Einstellungen die gewünschte Größe ein (wir verwenden eine 128x64-OLED).
- Klicken Sie auf die Schaltfläche Konvertierung starten
Die folgende Seite wird angezeigt. Nach einigen Sekunden wird Ihr konvertiertes Bild heruntergeladen, wenn der Download nicht automatisch startet. Klicken Sie auf die Option zum Herunterladen Ihrer Datei:
Großartig! Jetzt haben wir unsere BMP-Datei dazu gebracht, sie in ein Array von HEX-Codes zu konvertieren, die von einem Arduino gelesen werden können.
Konvertieren Sie das BMP-Bild in ein Array von HEX-Codes
Um das heruntergeladene BMP-Image in ein HEX-Array zu konvertieren, gehen Sie zu dieser Website und klicken Sie auf Extras -> image2cpp
Das Bild unten gibt Ihnen eine klare Vorstellung von dem Prozess
Sie erhalten einen Bildschirm mit vier Optionen, auf den wir ausführlich eingehen
- Bild auswählen
- Bildeinstellungen
- Vorschau
- Ausgabe
Bildabschnitt auswählen
In diesem Abschnitt wählen wir das Bild aus, das wir gerade in BMP konvertiert haben:
Abschnitt Bildeinstellungen
In diesem Abschnitt legen wir die Optionen für Leinwandgröße, Hintergrundfarbe, Skalierung und Mitte auf den erforderlichen Wert fest.
- Canvas-Größe (wir stellen 128 x 64 ein, da wir eine OLED mit einer Pixeldichte von 128 x 64 verwenden).
- In diesem Abschnitt können wir die Hintergrundfarbe der OLED einstellen (wir wählen sie als weiß).
- Die Skalierung wird auf die Originalgröße eingestellt.
- Wenn Sie in der mittleren Option auf die horizontalen und vertikalen Kontrollkästchen klicken, wird das Bild in der Mitte angezeigt.
Das Bild unten gibt Ihnen eine klare Vorstellung
Vorschau-Abschnitt
Im Vorschaubereich sehen wir eine klare Vorschau des Bildes, die in der OLED wie unten gezeigt angezeigt wird:
Ausgabeabschnitt
Im Ausgabeabschnitt generieren und kopieren wir den generierten Code. Führen Sie dazu die folgenden Schritte aus:
- Code-Ausgabeformat (wir setzen es als Arduino-Code, weil wir einen verwenden).
- Bezeichner (diese Option legt den Namen für das generierte Array fest, wir belassen es als Standard).
- Zeichenmodus (Wir setzen die Option Zeichenmodus auf horizontal).
- Und schließlich klicken wir auf die Schaltfläche Code generieren, um den endgültigen Ausgabecode zu generieren.
Das Bild unten gibt Ihnen eine klare Vorstellung
Schaltplan
Das folgende Bild zeigt die Schnittstellenverbindungen zwischen Arduino Nano und SSD1306:
Arduino Nano Pin |
OLED PIN |
GND |
GND |
3,3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
DEZA |
D10 |
CCS |
Code Erklärung
Um das Bild auf der OLED anzuzeigen, benötigen wir die Hilfe einer Arduino-Bibliothek, die von diesem GitHub-Repository heruntergeladen werden kann. Laden Sie die U8glib-1.19.1.zip- Version der Bibliothek herunter und importieren Sie sie in die Arduino IDE. Wenn Sie Arduino noch nicht kennen, können Sie mithilfe dieses Links beschreiben, wie eine Bibliothek importiert wird. Im folgenden Abschnitt ändern wir den Code, um das zuvor generierte HEX-Array für die OLED anzuzeigen. Der vollständige Code mit einem Arbeitsvideo finden Sie am Ende dieses Artikels. Die detaillierte Erklärung des Codes ist unten angegeben.
Fügen Sie zunächst die heruntergeladene Bibliothek hinzu.
#include "U8glib.h" // einschließlich der U8glib-Bibliothek
Definieren Sie dann alle erforderlichen Pins für OLED.
#define OLED_CLK_PIN 13 // Arduino Digital Pin D13: SCK #define OLED_MOSI_PIN 11 // Arduino Digital Pin D11: MOSI #define OLED_RES_PIN 10 // Arduino Digital Pin D10: SS #define OLED_SDC_PIN 9 // Arduino Digital Pin D9: OC1A #define OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Initialisieren Sie die u8glib-Bibliothek.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Fügen Sie dann das generierte Bildarray hinzu.
const uint8_t Circuitdigest PROGMEM = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf, 0xf 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x81, 0x8f, 0x31,0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0x31, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0xf, 0xf3 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, …….. …..0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
Mit der Draw-Funktion wird das Bitmap-Bild (QR-Code) mit Hilfe der Funktion u8g.drawBitmapP auf OLED gezeichnet.
void draw (void) {// Grafikbefehle zum Neuzeichnen des gesamten Bildschirms sollten hier platziert werden. u8g.drawBitmapP (0, 0, 16, 64, Circuitdigest); ….. ……
Rufen Sie schließlich in der Funktion loop () alle erforderlichen Prozeduren auf, um das Image auf OLED zu erstellen
void loop () {u8g.firstPage (); // Ein Aufruf dieser Prozedur markiert den Beginn der Bildschleife. do {draw (); } while (u8g.nextPage ()); // Ein Aufruf dieser Prozedur markiert das Ende des Hauptteils der Bildschleife. // das Bild nach einer Verzögerung (1000) neu erstellen; }}
Schließen Sie nach Abschluss des Codes das Arduino an den USB-Anschluss Ihres Computers an, wählen Sie Ihren COM-Anschluss aus und laden Sie den Code hoch. Wenn Sie alles richtig gemacht haben, haben Sie ein funktionierendes Display mit einem QR-Code auf OLED.
Ich hoffe, Ihnen hat dieses Projekt gefallen und Sie haben es genossen, etwas Neues zu lernen. Lesen Sie weiter, lernen Sie weiter und wir sehen uns beim nächsten Mal.