- Så hvad er denne QR-kode alligevel?
- Generering af din helt egen QR-kode
- Konvertering af PNG til BMP-format
- Konverter BMP-billedet til en række HEX-koder
- Kredsløbsdiagram
- Kode Forklaring
"Quick Response" -koden eller forkortet som QR-kode er blevet en vigtig del af vores digitale liv, chancerne er, at du allerede ubevidst er fortrolig med dem, nu har du sandsynligvis roaming rundt i din lokale købmand, eller måske er du læser gennem din yndlingsbog, eller endda muligvis foretager du en online betaling med Google Pay, PhonePe eller Paytm, eller surfer på nettet osv. (Jeg formoder, at jeg kunne fortsætte og fortsætte med eksempler, ikke?), og du er tilfældigvis kommet på tværs af denne underlige udseende firkantede ting og tanke, hvad er denne firkantede ting alligevel, og hvis du ikke har… godt, skal du ikke bekymre dig, det kommer til at ske før eller senere, så for at forstå emnet bedre vil vi gøre en sjovt lille projekt med Arduino og OLED og afmystificer følgende ting:
- Grundlæggende koncept for QR-koden.
- Hvordan det virker.
- Sådan laver du din helt egen QR-kode ved hjælp af Arduino.
- Og endelig skal du vise det på en OLED-skærm (SSD1306).
Så hvad er denne QR-kode alligevel?
QR-kode (Quick Response code) er en matrix 2D-kode til læsning af data i høj hastighed, udviklet af DENSO WAVE i 1994 til bilindustrien i Japan. En QR-kode komprimerer data meget effektivt sammenlignet med standard stregkoden. For at opnå dette bruger den fire standardiserede kodningstilstande (numerisk, alfanumerisk, byte / binær og kanji), teknologien blev gjort "open source" dvs. tilgængelig for alle, så det opnået popularitet meget hurtigt. Væsentlige fordele ved QR-koder i forhold til konventionelle stregkoder er større datakapacitet og høj fejltolerance.
Hvordan fungerer QR-kode?
QR-koder (og andre datamatrixkoder) er designet til at blive læst af specialværktøjer, ikke af mennesker, så der er kun en bestemt mængde, vi kan forstå ved at studere visuelt, selvom hver kode er forskellig på forskellige måder, selvom de indeholder et par interessante fælles funktioner ved at observere circuitdigest.com QR-koden vil vi studere nogle af dem
- Finder-mønstre: Store firkantede kasser med en solid kasse inde i de tre hjørner af koden gør det let at bekræfte, at det er en QR-kode, da der kun er tre af dem, så det er ret indlysende, på hvilken måde koden er orienteret.
- Justeringsmønster: Dette gør det sikkert, at uanset hvilken retning koden kan læses.
- Timingsmønster: Dette løber vandret og lodret mellem de tre findermønstre , ved hjælp af disse linjer kan læseren bestemme størrelsen på koden.
- Versionoplysninger: Der er i øjeblikket 40 forskellige versioner af QR-kodestandarden, dette afsnit af koden bestemmer den QR-kodeversion, der bruges, til markedsføring af version 1-7, der bruges normalt.
- Formatinformation: Formatpartnerne har oplysninger om fejltolerance og datamaskering.
- Dataområde: Dette afsnit af koden indeholder alle dataelementerne og fejlkorrektionskoden sammen.
- Afslut zone: Afstanden i hver QR-kode er obligatorisk for at differentiere koden fra dens omgivelser.
Billedet nedenfor giver dig en klar idé om koden
Andre dele af koden er data og redundanskode.
Der er en række andre funktioner og komplicerede emner, som jeg ikke vil diskutere i denne vejledning. Hvis du gerne vil læse flere detaljer om QR-koden, skal du følge denne QR-kodevejledning af Tan Jin Soon, EPCglobal Singapore Council. Syntesejournal, 2008.
Specifikationen af QR-koden
Symbolstørrelse |
Min. 21x21 celle - maks. 177x177 celle (med 4-cellers interval) |
|
Informationstype og lydstyrke |
Numeriske tegn |
7.089 tegn maksimalt |
Alfabet, tegn |
4.296 tegn maksimalt |
|
Binær (8 bit) |
2.953 tegn maksimalt |
|
Kanji-tegn |
1.817 tegn maksimalt |
|
Konverteringseffektivitet |
Numeriske tegntilstand |
3.3 celler / tegn |
Alfanumerisk / tegntilstand |
5,5 celler / tegn |
|
Binær (8 bit) tilstand |
8 celler / tegn |
|
Kanji-tegntilstand (13 bit) |
13 celler / tegn |
|
Fejlretning funktionalitet |
Niveau L |
Ca. 7% af symbolområdet er maksimalt gendannet |
Niveau M |
Ca. 15% af symbolområdet er maksimalt gendannet |
|
Niveau Q |
Ca. 25% af symbolområdet gendannes maksimalt |
|
Niveau H |
Ca. 30% af symbolområdet gendannes maksimalt |
|
Sammenkædningsfunktionalitet |
Muligt at opdele i 16 symboler maksimalt |
Generering af din helt egen QR-kode
Følg nedenstående trin for at generere din helt egen QR-kode. I dette eksempel skal vi lave en QR-kode af vores elskede Circuit Digest- websted
For at generere en QR-kode skal du gå til dette websted, og hvis du ser øverst på siden, kan du se en liste over muligheder, i denne vejledning genererer vi en QR-kode til en URL, så vi skal
- Klik på URL-fanen, og indsæt URL'en til Circuit Digest i Enter URL-sektionen.
- Klik på Gem.
- Giv et filnavn til outputfilen.
- Vælg PNG som vores foretrukne filformat.
- og klik på Gem.
Billedet nedenfor giver dig en klar idé om processen
Vores kære mikrokontroller “Arduino” er ikke så intelligent nok, at den bare kunne kompilere det rå PNG-billede og vise det i OLED-skærmen. Så for at vise QR-koden til OLED er vi nødt til at følge nogle enkle trin og konvertere PNG-billedet til et bitmap-array, der kan læses af Arduino. Denne konvertering har vi tidligere gjort, mens vi interfacede SSD1306 OLED med Arduino og interfacede Grafisk LCD med Arduino. Vi interfacede også SSD1306 OLED med Raspberry Pi, ESP32, NodeMCU og mange andre mikrokontrollere. Bitmap-arraykonvertering kan udføres i nedenstående to trin:
- Konvertering af PNG til BMP-format.
- Konverter BMP-billedet til en række HEX-koder.
Konvertering af PNG til BMP-format
For at konvertere det downloadede PNG-billede til BMP-billede skal du gå til dette websted og i billedkonverteringsafsnittet og
- Klik på rullemenuen, og vælg
- Konverter til BMP
- Klik på Start
Billedet nedenfor giver dig en klar idé om processen:
Du får en ny side, der ser ud som nedenstående billede:
- Klik på fanen Vælg filer, og vælg det downloadede billede
- I valgfrie indstillinger skal du indtaste panelet den ønskede størrelse (vi bruger en 128x64 OLED)
- Klik på knappen Start konvertering
Du får den følgende side, og efter et par sekunder downloades dit konverterede billede, hvis downloadet ikke starter automatisk, klik på download din filindstilling:
Store! Nu fik vi vores BMP-fil, det er tid til at konvertere den til en række HEX-koder, der kan læses af en Arduino.
Konverter BMP-billedet til en række HEX-koder
For at konvertere det downloadede BMP-billede til et HEX-array skal du gå til dette websted og klikke på Værktøjer -> image2cpp
Billedet nedenfor giver dig en klar idé om processen
Du vil blive præsenteret for en skærm, der har fire muligheder, og vi vil diskutere dem detaljeret
- Vælg billede
- Billedindstillinger
- Eksempel
- Produktion
Vælg billedsektion
I dette afsnit vælger vi det billede, som vi netop har konverteret til BMP:
Billedindstillinger
I dette afsnit indstiller vi lærredstørrelse, baggrundsfarve, skalering og centerindstillinger til vores krævede værdi.
- Lærredstørrelse (vi indstiller til 128x64, fordi vi bruger en OLED med 128x64 pixeltæthed).
- I dette afsnit kan vi indstille baggrundsfarven på OLED (vi vælger at være hvid).
- Skalering er indstillet til den oprindelige størrelse.
- Endelig skal du i centerindstillingen klikke på de vandrette og lodrette afkrydsningsfelter, hvilket får billedet til at vises i midten.
Billedet nedenfor giver dig en klar idé
Eksempel på sektion
I preview-sektionen kan vi se en klar forhåndsvisning af billedet, der vises i OLED som vist nedenfor:
Output sektion
I output sektionen vil vi generere og kopiere den genererede kode, og følg nedenstående trin for at gøre det:
- Kodeoutputformat (vi indstiller det som Arduino-kode, fordi vi bruger et).
- Identifier (denne indstilling angiver navnet på det genererede array, vi lader det være som standard).
- Tegnefunktion (vi indstiller trækfunktionen til vandret).
- Og til sidst klikker vi på knappen generer kode, dette genererer den endelige outputkode.
Billedet nedenfor giver dig en klar idé
Kredsløbsdiagram
Billedet nedenfor viser grænsefladeforbindelserne mellem Arduino Nano og SSD1306:
Arduino Nano Pin |
OLED PIN-kode |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Kode Forklaring
For at vise billedet på OLED har vi brug for hjælp fra et Arduino-bibliotek, som kan downloades fra dette GitHub-lager. Download U8glib-1.19.1.zip- versionen af biblioteket, og importer det i Arduino IDE. Hvis du er ny på Arduino, skal du tage hjælp fra dette link, der beskriver, hvordan du importerer et bibliotek. I nedenstående afsnit vil vi ændre koden for at vise det tidligere genererede HEX-array til OLED. Komplet kode med en fungerende video findes i slutningen af denne artikel. Detaljeret forklaring af koden er angivet nedenfor.
Inkluder først det downloadede bibliotek.
# inkluderer "U8glib.h" // inklusive U8glib-biblioteket
Definer derefter alle de nødvendige ben til 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: Dine: OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Initialiser u8glib-biblioteket.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Inkluder derefter det genererede billedarray.
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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0xff, 0xf, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, …….. …..0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
Tegnefunktion bruges til at tegne bitmapbillede (QR-kode) på OLED ved hjælp af u8g.drawBitmapP-funktionen.
void draw (void) {// grafiske kommandoer til at tegne hele skærmen skal placeres her u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Endelig kalder du i loop () -funktionen alle de nødvendige procedurer for at bygge billedet på OLED
ugyldig sløjfe () {u8g.firstPage (); // Et kald til denne procedure markerer begyndelsen på billedsløjfen. gør {draw (); } mens (u8g.nextPage ()); // Et kald til denne procedure markerer slutningen af billedsløjfens krop. // genopbygge billedet efter en vis forsinkelse (1000); }
Når du har udført koden, skal du tilslutte Arduino i USB-porten på din computer, vælge din COM-port og uploade koden. Hvis du har gjort alt korrekt, har du et fungerende display med en QR-kode på OLED.
Jeg håber, du kunne lide dette projekt og nød at lære noget nyt, bliv ved med at læse, fortsæt med at lære, og jeg vil se dig næste gang.