- Λοιπόν, ποιος είναι αυτός ο κωδικός QR;
- Δημιουργία του δικού σας κωδικού QR
- Μετατροπή του PNG σε μορφή BMP
- Μετατρέψτε την εικόνα BMP σε μια σειρά κωδικών HEX
- Διάγραμμα κυκλώματος
- Επεξήγηση κώδικα
Ο κωδικός "Γρήγορη απόκριση" ή συντομευμένος ως κωδικός QR έχει καταστεί ουσιαστικό μέρος της ψηφιακής μας ζωής, πιθανότατα να είστε ήδη υποσυνείδητα εξοικειωμένοι με αυτούς τώρα πιθανότατα να περιπλανηθείτε στο τοπικό μανάβικο ή ίσως να είστε διαβάζοντας το αγαπημένο σας βιβλίο, ή ακόμα και πιθανώς πραγματοποιείτε μια διαδικτυακή πληρωμή με το Google Pay, το PhonePe ή το Paytm, ή περιηγηθείτε στον ιστό κ.λπ. (Υποθέτω ότι θα μπορούσα να συνεχίσω με παραδείγματα ε;); πέρα από αυτό το περίεργο τετράγωνο πράγμα και σκέφτεστε, τι είναι αυτό το τετράγωνο ούτως ή άλλως και αν δεν το έχετε… καλά, μην ανησυχείτε ότι πρόκειται να συμβεί αργά ή γρήγορα, έτσι ώστε να κατανοήσουμε καλύτερα το θέμα διασκεδαστικό μικρό έργο με το Arduino και το OLED και απομυθοποιήστε τα ακόλουθα πράγματα:
- Βασική ιδέα του κώδικα QR.
- Πως δουλεύει.
- Πώς να φτιάξετε τον δικό σας κωδικό QR χρησιμοποιώντας το Arduino.
- Και τέλος, εμφανίστε το σε μια οθόνη OLED (SSD1306).
Λοιπόν, ποιος είναι αυτός ο κωδικός QR;
Ο κωδικός QR (κωδικός γρήγορης απόκρισης) είναι ένας κωδικός μήτρας 2D για την ανάγνωση δεδομένων σε υψηλή ταχύτητα, που αναπτύχθηκε από την DENSO WAVE το 1994 για την αυτοκινητοβιομηχανία της Ιαπωνίας. Ένας κωδικός QR συμπιέζει τα δεδομένα πολύ αποτελεσματικά σε σύγκριση με τον τυπικό γραμμικό κώδικα, για να το επιτύχει αυτό χρησιμοποιεί τέσσερις τυποποιημένες λειτουργίες κωδικοποίησης (αριθμητικός, αλφαριθμητικός, byte / binary και kanji), η τεχνολογία έγινε "ανοιχτού κώδικα" δηλαδή διαθέσιμη για όλους, έτσι κέρδισε δημοτικότητα πολύ γρήγορα. Σημαντικά πλεονεκτήματα των κωδικών QR έναντι των συμβατικών γραμμωτών κωδίκων είναι η μεγαλύτερη χωρητικότητα δεδομένων και η υψηλή ανοχή σφαλμάτων.
Πώς λειτουργεί ο κώδικας QR;
Οι κωδικοί QR (και άλλοι κωδικοί μήτρας δεδομένων) έχουν σχεδιαστεί για ανάγνωση από ειδικά εργαλεία, όχι από ανθρώπους, οπότε υπάρχει μόνο ένα συγκεκριμένο ποσό που μπορούμε να κατανοήσουμε μελετώντας οπτικά, αν και κάθε κώδικας είναι διαφορετικός με διάφορους τρόπους, αν και περιέχει μερικά ενδιαφέροντα κοινά χαρακτηριστικά παρατηρώντας τον κωδικό QR του circuitdigest.com θα μελετήσουμε μερικά από αυτά
- Μοτίβα Finder: Μεγάλα τετράγωνα κουτιά με ένα συμπαγές κουτί μέσα στις τρεις γωνίες του κώδικα καθιστούν εύκολο να επιβεβαιώσετε ότι πρόκειται για έναν κωδικό QR, καθώς υπάρχουν μόνο τρία από αυτά, οπότε είναι αρκετά προφανές ότι με τον τρόπο που προσανατολίζεται ο κώδικας.
- Πρότυπο ευθυγράμμισης: Αυτό καθιστά σίγουρο ότι ανεξάρτητα από τον προσανατολισμό του κώδικα μπορεί να είναι αναγνώσιμο.
- Χρονοδιάγραμμα: Αυτό λειτουργεί οριζόντια και κάθετα μεταξύ των τριών μοτίβων εύρεσης , χρησιμοποιώντας αυτές τις γραμμές ο αναγνώστης μπορεί να καθορίσει το μέγεθος του κώδικα.
- Πληροφορίες έκδοσης: Αυτή τη στιγμή υπάρχουν 40 διαφορετικές εκδόσεις του προτύπου κώδικα QR, αυτή η ενότητα του κώδικα καθορίζει την έκδοση κώδικα QR που χρησιμοποιείται, για την έκδοση 1-7 που χρησιμοποιείται κανονικά.
- Πληροφορίες μορφής: Οι συνεργάτες μορφής έχουν πληροφορίες σχετικά με την ανοχή σφαλμάτων και την απόκρυψη δεδομένων.
- Περιοχή δεδομένων: Αυτή η ενότητα του κώδικα περιέχει όλα τα στοιχεία δεδομένων και τον κώδικα διόρθωσης σφαλμάτων μαζί.
- Quit Zone: Η απόσταση σε κάθε κωδικό QR είναι υποχρεωτική για τη διαφοροποίηση του κώδικα από το περιβάλλον του.
Η παρακάτω εικόνα θα σας δώσει μια σαφή ιδέα για τον κώδικα
Άλλες ενότητες του κώδικα είναι ο κωδικός δεδομένων και ο πλεονασμός.
Υπάρχουν πολλές άλλες δυνατότητες και περίπλοκα θέματα που δεν θα συζητήσω σε αυτό το σεμινάριο, αν θέλετε να διαβάσετε περισσότερες λεπτομέρειες σχετικά με τον κωδικό QR, ακολουθήστε αυτό το σεμινάριο QR Code από τον Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008.
Η προδιαγραφή του κώδικα QR
Μέγεθος συμβόλου |
Ελάχ. 21x21 κελί - Μέγ. 177x177 κελί (με διάστημα 4 κελιών) |
|
Τύπος και όγκος πληροφοριών |
Αριθμητικοί χαρακτήρες |
7.089 χαρακτήρες το πολύ |
Αλφάβητα, σημάδια |
4.296 χαρακτήρες το πολύ |
|
Δυαδικό (8 bit) |
2.953 χαρακτήρες το πολύ |
|
Χαρακτήρες Kanji |
1.817 χαρακτήρες το πολύ |
|
Απόδοση μετατροπής |
Λειτουργία αριθμητικών χαρακτήρων |
3.3 κελιά / χαρακτήρας |
Λειτουργία αλφαριθμητικών / σημείων |
5.5 κελιά / χαρακτήρας |
|
Δυαδική (8 bit) Λειτουργία |
8 κελιά / χαρακτήρας |
|
Λειτουργία χαρακτήρων Kanji (13 bit) |
13 κελιά / χαρακτήρας |
|
Διόρθωση σφαλμάτων λειτουργικότητα |
Επίπεδο L |
Περίπου Το 7% της περιοχής συμβόλων αποκαταστάθηκε στο μέγιστο |
Επίπεδο Μ |
Περίπου Το 15% της περιοχής συμβόλων αποκαταστάθηκε στο μέγιστο |
|
Επίπεδο Q |
Περίπου Το 25% της περιοχής συμβόλων αποκαταστάθηκε στο μέγιστο |
|
Επίπεδο Η |
Περίπου Το 30% της περιοχής συμβόλων αποκαταστάθηκε στο μέγιστο |
|
Σύνδεση λειτουργικότητας |
Δυνατότητα διαίρεσης σε 16 σύμβολα το πολύ |
Δημιουργία του δικού σας κωδικού QR
Ακολουθήστε τα παρακάτω βήματα για να δημιουργήσετε τον δικό σας κωδικό QR, σε αυτό το παράδειγμα, θα δημιουργήσουμε έναν κωδικό QR του αγαπημένου μας ιστότοπου Circuit Digest
Για να δημιουργήσετε έναν κωδικό QR μεταβείτε σε αυτόν τον ιστότοπο και αν κοιτάξετε στην επάνω πλευρά του ιστότοπου μπορείτε να δείτε μια λίστα επιλογών, σε αυτό το σεμινάριο δημιουργούμε έναν κωδικό QR για μια διεύθυνση URL, οπότε πρόκειται να
- Κάντε κλικ στην καρτέλα URL και επικολλήστε τη διεύθυνση URL για το Circuit Digest στην ενότητα Enter URL.
- Κάντε κλικ στην αποθήκευση.
- Δώστε ένα όνομα αρχείου για το αρχείο εξόδου.
- Επιλέξτε PNG ως προτιμώμενη μορφή αρχείου.
- και κάντε κλικ στην αποθήκευση.
Η παρακάτω εικόνα θα σας δώσει μια σαφή ιδέα για τη διαδικασία
Ο αγαπητός μας μικροελεγκτής "Arduino" δεν είναι τόσο έξυπνος που θα μπορούσε απλώς να συντάξει την ακατέργαστη εικόνα PNG και να την εμφανίσει στην οθόνη OLED. Έτσι, για να εμφανιστεί ο κωδικός QR στο OLED πρέπει να ακολουθήσουμε μερικά απλά βήματα και να μετατρέψουμε την εικόνα PNG σε έναν πίνακα bitmap που μπορεί να διαβαστεί από τον Arduino. Αυτή η μετατροπή κάναμε στο παρελθόν κατά τη διασύνδεση SSD1306 OLED με το Arduino και τη διασύνδεση γραφικών LCD με το Arduino. Διασυνδέσαμε επίσης το SSD1306 OLED με Raspberry Pi, ESP32, NodeMCU και πολλούς άλλους μικροελεγκτές. Η μετατροπή του πίνακα bitmap μπορεί να γίνει με δύο παρακάτω βήματα:
- Μετατροπή του PNG σε μορφή BMP.
- Μετατρέψτε την εικόνα BMP σε μια σειρά κωδικών HEX.
Μετατροπή του PNG σε μορφή BMP
Για να μετατρέψετε την ληφθείσα εικόνα PNG σε εικόνα BMP, μεταβείτε σε αυτόν τον ιστότοπο και στην ενότητα μετατροπέα εικόνας και
- Κάντε κλικ στο αναπτυσσόμενο μενού και επιλέξτε
- Μετατροπή σε BMP
- Κάντε κλικ στο Μετάβαση
Η παρακάτω εικόνα θα σας δώσει μια σαφή ιδέα για τη διαδικασία:
Θα εμφανιστεί μια νέα σελίδα που μοιάζει με την παρακάτω εικόνα:
- Κάντε κλικ στην καρτέλα Επιλογή αρχείων και επιλέξτε τη ληφθείσα εικόνα
- Στις Προαιρετικές ρυθμίσεις, πληκτρολογήστε το επιθυμητό μέγεθος (χρησιμοποιούμε OLED 128x64)
- Κάντε κλικ στο κουμπί Έναρξη μετατροπής
Θα εμφανιστεί η ακόλουθη σελίδα και μετά από λίγα δευτερόλεπτα θα γίνει λήψη της εικόνας που έχετε μετατρέψει εάν η λήψη δεν ξεκινήσει αυτόματα κάντε κλικ στην επιλογή λήψης του αρχείου σας:
Μεγάλος! Τώρα πήραμε το αρχείο BMP το χρόνο του για να το μετατρέψουμε σε μια σειρά κωδικών HEX αναγνώσιμη από ένα Arduino.
Μετατρέψτε την εικόνα BMP σε μια σειρά κωδικών HEX
Για να μετατρέψετε την ληφθείσα εικόνα BMP σε πίνακα HEX, μεταβείτε σε αυτόν τον ιστότοπο και κάντε κλικ στο Εργαλεία -> image2cpp
Η παρακάτω εικόνα θα σας δώσει μια σαφή ιδέα για τη διαδικασία
Θα εμφανιστεί μια οθόνη με τέσσερις επιλογές και θα τις συζητήσουμε λεπτομερώς
- Επιλέξτε εικόνα
- Ρυθμίσεις εικόνας
- Προεπισκόπηση
- Παραγωγή
Επιλέξτε ενότητα εικόνας
Σε αυτήν την ενότητα θα επιλέξουμε την εικόνα που μόλις μετατρέψαμε σε BMP:
Ενότητα Ρυθμίσεις εικόνας
Σε αυτήν την ενότητα, θα ορίσουμε το μέγεθος του καμβά, το χρώμα φόντου, την κλίμακα και τις κεντρικές επιλογές στην απαιτούμενη τιμή μας.
- Μέγεθος καμβά (ορίσαμε 128x64 επειδή χρησιμοποιούμε OLED με πυκνότητα 128x64 pixel).
- Σε αυτήν την ενότητα, μπορούμε να ορίσουμε το χρώμα φόντου του OLED (το επιλέγουμε να είναι λευκό).
- Η κλιμάκωση έχει ρυθμιστεί στο αρχικό μέγεθος.
- Τέλος, στην κεντρική επιλογή κάντε κλικ στα οριζόντια και κάθετα πλαίσια ελέγχου, αυτό θα κάνει την εικόνα να εμφανίζεται στο κέντρο.
Η παρακάτω εικόνα θα σας δώσει μια σαφή ιδέα
Ενότητα προεπισκόπησης
Στην ενότητα προεπισκόπησης μπορούμε να δούμε μια σαφή προεπισκόπηση της εικόνας που θα εμφανίζεται στο OLED όπως φαίνεται παρακάτω:
Τμήμα εξόδου
Στην ενότητα εξόδου θα δημιουργήσουμε και θα αντιγράψουμε τον παραγόμενο κώδικα, ακολουθώντας τα παρακάτω βήματα:
- Μορφή εξόδου κώδικα (το ορίζουμε ως κωδικό Arduino επειδή χρησιμοποιούμε έναν).
- Αναγνωριστικό (αυτή η επιλογή ορίζει το όνομα του παραγόμενου πίνακα που το αφήνουμε ως προεπιλεγμένο ως έχει).
- Λειτουργία σχεδίασης (Ρυθμίζουμε την επιλογή τρόπου σχεδίασης σε οριζόντια).
- Και τέλος, κάνουμε κλικ στο κουμπί δημιουργία κώδικα, αυτό θα δημιουργήσει τον τελικό κωδικό εξόδου.
Η παρακάτω εικόνα θα σας δώσει μια σαφή ιδέα
Διάγραμμα κυκλώματος
Στην παρακάτω εικόνα παρουσιάζονται οι διασυνδέσεις μεταξύ Arduino Nano και SSD1306:
Arduino Nano Pin |
PIN OLED |
GND |
GND |
3.3V |
VCC |
Δ13 |
ΚΛΚ |
Δ11 |
MOSI |
Δ8 |
ΑΠΕ |
Δ9 |
SDC |
Δ10 |
CCS |
Επεξήγηση κώδικα
Για να δείξουμε την εικόνα στο OLED χρειαζόμαστε τη βοήθεια μιας βιβλιοθήκης Arduino, την οποία μπορείτε να κατεβάσετε από αυτό το αποθετήριο GitHub. Πραγματοποιήστε λήψη της έκδοσης U8glib-1.19.1.zip της βιβλιοθήκης και εισαγάγετέ την στο Arduino IDE. Εάν είστε νέοι στο Arduino, χρησιμοποιήστε αυτόν τον σύνδεσμο που περιγράφει τον τρόπο εισαγωγής βιβλιοθήκης Στην παρακάτω ενότητα θα τροποποιήσουμε τον κώδικα για να εμφανίσουμε τον πίνακα HEX που δημιουργήθηκε προηγουμένως στο OLED. Ο πλήρης κώδικας με ένα βίντεο εργασίας δίνεται στο τέλος αυτού του άρθρου. Η Λεπτομερής Επεξήγηση του κώδικα δίνεται παρακάτω.
Αρχικά, συμπεριλάβετε τη βιβλιοθήκη που έχετε κατεβάσει.
#include "U8glib.h" // συμπεριλαμβανομένης της βιβλιοθήκης U8glib
Στη συνέχεια, ορίστε όλες τις απαραίτητες καρφίτσες για 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: OC1 OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Αρχικοποιήστε τη βιβλιοθήκη u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Στη συνέχεια, Συμπεριλάβετε τον παραγόμενο πίνακα εικόνων.
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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1c 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0x 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0x8f, 0x8f, 0x8f 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, 0xff 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0x1, 0x8 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, …….. ………..
Η συνάρτηση Draw χρησιμοποιείται για τη σχεδίαση της εικόνας bitmap (κωδικός QR) στο OLED με τη βοήθεια της συνάρτησης u8g.drawBitmapP.
void draw (void) {// γραφικές εντολές για να σχεδιάσετε ξανά ολόκληρη την οθόνη θα πρέπει να τοποθετηθούν εδώ u8g.drawBitmapP (0, 0, 16, 64, circuitdigest). ….. ……
Τέλος, σε λειτουργία loop () , καλέστε όλες τις απαραίτητες διαδικασίες για να δημιουργήσετε την εικόνα στο OLED
void loop () {u8g.firstPage (); // Μια κλήση σε αυτήν τη διαδικασία, σηματοδοτεί την αρχή του βρόχου εικόνας. κάνετε {draw (); } ενώ (u8g.nextPage ()); // Μια κλήση σε αυτήν τη διαδικασία, σηματοδοτεί το τέλος του σώματος του βρόχου εικόνας. // ξαναχτίστε την εικόνα μετά από κάποια καθυστέρηση καθυστέρησης (1000). }
Αφού ολοκληρώσετε τον κωδικό, συνδέστε το Arduino στη θύρα USB του υπολογιστή σας, επιλέξτε τη θύρα COM και ανεβάστε τον κωδικό. Εάν έχετε κάνει τα πάντα σωστά, θα έχετε μια οθόνη εργασίας με έναν κωδικό QR στο OLED.
Ελπίζω να σας άρεσε αυτό το έργο και να σας άρεσε να μαθαίνετε κάτι νέο, να συνεχίσετε να διαβάζετε να μαθαίνετε και θα σας δω την επόμενη φορά.