- Så, hva er denne QR-koden uansett?
- Genererer din helt egen QR-kode
- Konvertering av PNG til BMP-format
- Konverter BMP-bildet til en rekke HEX-koder
- Kretsdiagram
- Kode Forklaring
"Quick Response" -koden eller forkortet som QR-kode har blitt en viktig del av våre digitale liv, sjansene er at du allerede ubevisst er kjent med dem nå, og du har sannsynligvis streifet rundt i din lokale matbutikk, eller kanskje du er lese gjennom favorittboken din, eller til og med muligens at du betaler online med Google Pay, PhonePe eller Paytm, eller surfer på nettet osv. (Jeg antar at jeg kunne fortsette og fortsette med eksempler, ikke sant?), og du har tilfeldigvis kommet på tvers av denne merkelige firkantede tingen og tanken, hva er denne firkantede tingen uansett, og hvis du ikke har… vel, ikke bekymre deg, det kommer til å skje før eller senere, så for å forstå temaet bedre skal vi gjøre en morsomt lite prosjekt med Arduino og OLED og avmystifiser følgende ting:
- Grunnleggende konsept for QR-koden.
- Hvordan det fungerer.
- Hvordan lage din helt egen QR-kode ved hjelp av Arduino.
- Og til slutt, vis den på en OLED-skjerm (SSD1306).
Så, hva er denne QR-koden uansett?
QR-kode (Quick Response code) er en matrise 2D-kode for lesing av data i høy hastighet, utviklet av DENSO WAVE i 1994 for bilindustrien i Japan. En QR-kode komprimerer data veldig effektivt sammenlignet med standard strekkode, for å oppnå dette bruker den fire standardiserte kodingsmoduser (numerisk, alfanumerisk, byte / binær og kanji), teknologien ble gjort "åpen kildekode" dvs. tilgjengelig for alle, så det fikk popularitet veldig raskt. Betydelige fordeler med QR-koder i forhold til konvensjonelle strekkoder er større datakapasitet og høy feiltoleranse.
Hvordan fungerer QR-koden?
QR-koder (og andre datamatrikskoder) er designet for å bli lest av spesialverktøy, ikke av mennesker, så det er bare en bestemt mengde vi kan forstå ved å studere visuelt, selv om hver kode er forskjellig på forskjellige måter, selv om de inneholder noen få interessante vanlige funksjoner ved å observere circuitdigest.com QR-koden vil vi studere noen av dem
- Finder-mønstre: Store firkantede bokser med en solid boks inne i kodenes tre hjørner gjør det enkelt å bekrefte at det er en QR-kode siden det bare er tre av dem, så det er ganske åpenbart at på hvilken måte koden er orientert.
- Justeringsmønster: Dette gjør det sikkert at uansett hvilken retning koden kan være lesbar.
- Timingsmønster: Dette går horisontalt og vertikalt mellom de tre finnemønstrene . Ved hjelp av disse linjene kan leseren bestemme størrelsen på koden.
- Versjonsinformasjon: Det er for tiden 40 forskjellige versjoner av QR-kodestandarden. Denne delen av koden bestemmer QR-kodeversjonen som brukes, for markedsføring av versjon 1-7 som brukes normalt.
- Formatinformasjon: Formatpartnerne har informasjon om feiltoleranse og datamaskering.
- Dataområde: Denne delen av koden inneholder alle dataelementene og feilrettingskoden sammen.
- Avslutt sone: Avstanden i hver QR-kode er obligatorisk for å skille koden fra omgivelsene.
Bildet nedenfor gir deg en klar ide om koden
Andre deler av koden er data- og redundanskode.
Det er en rekke andre funksjoner og kompliserte emner som jeg ikke vil diskutere i denne opplæringen. Hvis du vil lese mer om QR-koden, kan du følge denne QR-kodeopplæringen av Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008.
Spesifikasjonen av QR-koden
Symbolstørrelse |
Min. 21x21 celle - Maks. 177x177 celle (med 4-cellers intervall) |
|
Informasjonstype og volum |
Numeriske tegn |
Maksimalt 7089 tegn |
Alfabet, tegn |
4.296 tegn maksimalt |
|
Binær (8 bit) |
2.953 tegn maksimalt |
|
Kanji-tegn |
1817 tegn maksimalt |
|
Konverteringseffektivitet |
Numeriske tegnmodus |
3,3 celler / karakter |
Alfanumerisk / tegnmodus |
5,5 celler / tegn |
|
Binær (8 bit) modus |
8 celler / karakter |
|
Kanji Characters Mode (13 bit) |
13 celler / karakter |
|
Feilretting funksjonalitet |
Nivå L |
Ca. 7% av symbolområdet gjenopprettet maksimalt |
Nivå M |
Ca. 15% av symbolområdet gjenopprettes maksimalt |
|
Nivå Q |
Ca. 25% av symbolområdet gjenopprettes maksimalt |
|
Nivå H |
Ca. 30% av symbolområdet gjenopprettet maksimalt |
|
Koblingsfunksjonalitet |
Mulig å bli delt inn i 16 symboler maksimalt |
Genererer din helt egen QR-kode
Følg trinnene som er nevnt nedenfor for å generere din helt egen QR-kode, i dette eksemplet skal vi lage en QR-kode av vårt elskede Circuit Digest- nettsted
For å generere en QR-kode, gå til dette nettstedet, og hvis du ser på toppen av nettstedet kan du se en liste over alternativer. I denne veiledningen genererer vi en QR-kode for en URL, så vi skal
- Klikk på URL-fanen og lim inn URL-en for Circuit Digest i Enter URL-delen.
- Klikk på lagre.
- Gi et filnavn for utdatafilen.
- Velg PNG som vårt foretrukne filformat.
- og klikk på lagre.
Bildet nedenfor gir deg en klar ide om prosessen
Vår kjæreste mikrokontroller “Arduino” er ikke så intelligent at den bare kan kompilere det rå PNG-bildet og vise det i OLED-skjermen. Så, for å vise QR-koden til OLED, må vi følge noen enkle trinn og konvertere PNG-bildet til et bitmap-utvalg som kan leses av Arduino. Denne konverteringen har vi tidligere gjort mens vi grensesnitt SSD1306 OLED med Arduino og grensesnitt Grafisk LCD med Arduino. Vi grensesnittet også SSD1306 OLED med Raspberry Pi, ESP32, NodeMCU og mange andre mikrokontrollere. Bitmap-arraykonvertering kan gjøres i to trinn:
- Konvertering av PNG til BMP-format.
- Konverter BMP-bildet til en rekke HEX-koder.
Konvertering av PNG til BMP-format
For å konvertere det nedlastede PNG-bildet til BMP-bildet, gå til dette nettstedet og i bildekonverteringsseksjonen og
- Klikk på rullegardinmenyen og velg
- Konverter til BMP
- Klikk Gå
Bildet nedenfor gir deg en klar ide om prosessen:
Du vil bli presentert for en ny side som ser ut som bildet nedenfor:
- Klikk på kategorien Velg filer og velg det nedlastede bildet
- I valgfrie innstillinger, skriv inn ønsket størrelse (vi bruker en 128x64 OLED)
- Klikk på Start konverteringsknappen
Du vil bli presentert for den følgende siden, og etter noen sekunder vil det konverterte bildet bli lastet ned hvis nedlastingen ikke starter automatisk, klikk på nedlastingsfilen:
Flott! Nå har vi fått BMP-filen sin på tide å konvertere den til en rekke HEX-koder som kan leses av en Arduino.
Konverter BMP-bildet til en rekke HEX-koder
For å konvertere det nedlastede BMP-bildet til et HEX-utvalg, gå til dette nettstedet og klikk på Verktøy -> image2cpp
Bildet nedenfor gir deg en klar ide om prosessen
Du vil bli presentert for et skjermbilde som har fire alternativer, og vi vil diskutere dem i detalj
- Velg bilde
- Bildeinnstillinger
- Forhåndsvisning
- Produksjon
Velg bildeseksjon
I denne delen vil vi velge bildet som vi nettopp har konvertert til BMP:
Avsnitt for bildeinnstillinger
I denne delen vil vi sette lerretets størrelse, bakgrunnsfarge, skalering og senteralternativer til ønsket verdi.
- Lerretsstørrelse (vi setter til 128x64 fordi vi bruker en OLED med 128x64 pikseltetthet).
- I denne delen kan vi stille bakgrunnsfargen til OLED (vi velger at den skal være hvit).
- Skalering er satt til originalstørrelsen.
- Til slutt, i midtalternativet, klikker du på de horisontale og vertikale avmerkingsboksene, dette får bildet til å vises i midten.
Bildet nedenfor gir deg en klar ide
Forhåndsvisning
I forhåndsvisningsdelen kan vi se en klar forhåndsvisning av bildet som vil vises i OLED som vist nedenfor:
Utgangsseksjon
I utgangsseksjonen vil vi generere og kopiere den genererte koden, og følg trinnene nedenfor:
- Kodeutdataformat (vi setter den som Arduino-kode fordi vi bruker en).
- Identifier (dette alternativet angir navnet på den genererte matrisen, vi lar den være som den er).
- Tegnemodus (vi setter alternativet for tegnemodus til vannrett).
- Og til slutt klikker vi på generer kodeknappen, dette genererer den endelige utgangskoden.
Bildet nedenfor gir deg en klar ide
Kretsdiagram
Bildet nedenfor viser grensesnittforbindelsene mellom Arduino Nano og SSD1306:
Arduino Nano Pin |
OLED PIN |
GND |
GND |
3,3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Kode Forklaring
For å vise bildet på OLED trenger vi hjelp fra et Arduino-bibliotek, som kan lastes ned fra dette GitHub-depotet. Last ned U8glib-1.19.1.zip- versjonen av biblioteket og importer den i Arduino IDE. Hvis du ikke er kjent med Arduino, kan du ta hjelp av denne lenken som beskriver hvordan du importerer et bibliotek. I delen nedenfor vil vi endre koden for å vise den tidligere genererte HEX-matrisen til OLED. Komplett kode med en arbeidsvideo er gitt på slutten av denne artikkelen. Detaljerte forklaringer på koden er gitt nedenfor.
Først må du inkludere det nedlastede biblioteket.
# inkluderer "U8glib.h" // inkludert U8glib-biblioteket
Definer deretter alle nødvendige pinner for 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: OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Initier u8glib-biblioteket.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Inkluder deretter det genererte bildearrayet.
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, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf, 0xf, 0x0f, 0xff, 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, 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, …….. ………..
Tegnfunksjon brukes til å tegne bitmapbildet (QR-kode) på OLED ved hjelp av u8g.drawBitmapP-funksjonen.
void draw (void) {// grafiske kommandoer for å tegne hele skjermen skal plasseres her u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Til slutt, i loop () -funksjonen, ring alle nødvendige prosedyrer for å bygge bildet på OLED
ugyldig sløyfe () {u8g.firstPage (); // Et kall til denne prosedyren markerer begynnelsen på bildesløyfen. gjør {draw (); } mens (u8g.nextPage ()); // Et kall til denne prosedyren, markerer slutten på kroppen til bildesløyfen. // gjenoppbygge bildet etter noen forsinkelsesforsinkelser (1000); }
Når du har fullført koden, kobler du til Arduino i USB-porten på datamaskinen, velger COM-port og laster opp koden. Hvis du har gjort alt riktig, vil du ha en fungerende skjerm med en QR-kode på OLED.
Jeg håper du likte dette prosjektet og likte å lære noe nytt, fortsett å lese, fortsett å lære, og jeg ser deg neste gang.