- Torej, kaj sploh je ta QR koda?
- Ustvarjanje lastne QR kode
- Pretvorba PNG v BMP format
- Pretvorite sliko BMP v vrsto HEX kod
- Shema vezja
- Razlaga kode
Koda "Hitri odziv" ali okrajšana kot QR koda je postala bistveni del našega digitalnega življenja, verjetno jih že podzavestno poznate, verjetno ste že gostovali po vaši lokalni trgovini ali pa morda že prebirate svojo najljubšo knjigo ali celo morda plačujete prek spleta z Googlom Pay, PhonePe ali Paytm ali brskate po spletu itd. (mislim, da bi lahko našteval in nadaljeval primere, kaj?) in ste slučajno prišli čez to čudno videti kvadratno stvar in misel, kaj sploh je ta kvadratna stvar in če še niste… no, ne skrbite, to se bo zgodilo prej ali slej, zato bomo za boljše razumevanje teme naredili zabaven mali projekt z Arduinom in OLED ter demistificirajte naslednje stvari:
- Osnovni koncept QR kode.
- Kako deluje.
- Kako narediti svojo lastno QR kodo z uporabo Arduina.
- In na koncu ga prikažite na zaslonu OLED (SSD1306).
Torej, kaj sploh je ta QR koda?
QR koda (koda hitrega odziva) je matrična 2D koda za hitro branje podatkov, ki jo je DENSO WAVE razvil leta 1994 za japonsko avtomobilsko industrijo. QR koda stisne podatke zelo učinkovito v primerjavi s standardno črtno kodo, da bi to dosegla, uporablja štiri standardizirane načine kodiranja (numerično, alfanumerično, bajtno / binarno in kanji), tehnologija pa je postala "odprtokodna", torej na voljo vsem, zato je priljubljenost je postala zelo hitra. Pomembne prednosti QR kod pred običajnimi črtnimi kodami so večja podatkovna zmogljivost in visoka odpornost na napake.
Kako deluje QR koda?
Kode QR (in druge matrične kode) so namenjene branju s posebnimi orodji, ne z ljudmi, zato lahko z vizualnim preučevanjem razumemo le določeno količino, čeprav se vsaka koda na različne načine razlikuje, čeprav vsebuje nekaj zanimivih skupnih z opazovanjem QR kode circuitdigest.com bomo nekatere od njih preučili
- Vzorci iskalca: Velike kvadratne škatle s trdno škatlo v treh kotih kode omogočajo enostavno potrditev, da gre za QR kodo, saj so le tri, zato je precej očitno, na kakšen način je koda usmerjena.
- Vzorec poravnave: s tem je zagotovljeno, da je kodo mogoče prebrati ne glede na usmeritev.
- Časovni vzorec: ta poteka vodoravno in navpično med tremi vzorci iskalnika , s pomočjo katerih lahko bralec določi velikost kode.
- Informacije o različici: Trenutno obstaja 40 različnih različic standarda QR kode, ta odsek kode določa različico QR kode, ki se uporablja za tržno različico 1-7, ki se običajno uporablja.
- Informacije o obliki: partnerji za oblikovanje imajo informacije o dopuščanju napak in prikrivanju podatkov.
- Področje podatkov: Ta odsek kode vsebuje vse podatke in kode za odpravljanje napak.
- Zapri cono: Razmik v vsaki QR kodi je obvezen, da se koda razlikuje od okolice.
Spodnja slika vam bo dala jasno predstavo o kodi
Drugi odseki kode so podatki in odvečna koda.
Obstajajo številne druge funkcije in zapletene teme, o katerih v tej vadnici ne bom razpravljal, če želite prebrati več podrobnosti o kodi QR, sledite tej vadnici QR kode Tan Jin Soon, EPCglobal Singapore Singapore. Synthesis Journal, 2008.
Specifikacija kode QR
Velikost simbola |
Min. Celica 21x21 - maks. 177 x 177 celic (z intervalom 4 celice) |
|
Vrsta in obseg informacij |
Številski znaki |
Največ 7.089 znakov |
Abecede, znaki |
Največ 4296 znakov |
|
Binarno (8-bitno) |
Največ 2.953 znakov |
|
Kanji znaki |
Največ 1.817 znakov |
|
Učinkovitost pretvorbe |
Način številskih znakov |
3,3 celice / znak |
Alfanumerični / znakovni način |
5,5 celic / znak |
|
Binarni (8-bitni) način |
8 celic / znak |
|
Način Kanji Characters (13 bit) |
13 celic / znak |
|
Popravek napak funkcionalnost |
Stopnja L |
Pribl. 7% površine simbola obnovljeno na največ |
Raven M |
Pribl. 15% površine simbola obnovljeno na največ |
|
Stopnja Q |
Pribl. 25% površine simbola obnovljeno na največ |
|
Raven H |
Pribl. 30% površine simbola obnovljeno na največ |
|
Povezovanje funkcionalnosti |
Možno je razdeliti na največ 16 simbolov |
Ustvarjanje lastne QR kode
Sledite spodnjim korakom, da ustvarite svojo lastno kodo QR, v tem primeru bomo izdelali kodo QR našega priljubljenega spletnega mesta Circuit Digest
Če želite ustvariti kodo QR, pojdite na to spletno mesto in če pogledate zgornjo stran spletnega mesta, vidite seznam možnosti, v tej vadnici ustvarjamo kodo QR za URL, zato bomo
- Kliknite zavihek URL in v razdelek Enter URL prilepite URL za Circuit Digest.
- Kliknite shrani.
- Navedite ime datoteke za izhodno datoteko.
- Izberite PNG kot našo najprimernejšo obliko datoteke.
- in kliknite shrani.
Spodnja slika vam bo dala jasno predstavo o postopku
Naš najdražji mikrokrmilnik "Arduino" ni dovolj inteligenten, da bi lahko zgolj zbral surovo sliko PNG in jo prikazal na OLED zaslonu. Za prikaz QR kode na OLED moramo slediti nekaj preprostim korakom in sliko PNG pretvoriti v bitno sliko, ki jo bere Arduino. To pretvorbo smo že opravili med povezovanjem SSD1306 OLED z Arduino in povezovanjem grafičnega LCD-ja z Arduinom. SSD1306 OLED smo povezali tudi z Raspberry Pi, ESP32, NodeMCU in številnimi drugimi mikrokrmilniki. Pretvorbo bitne slike lahko izvedete v spodnjih dveh korakih:
- Pretvorba PNG v BMP format.
- Pretvorite sliko BMP v vrsto HEX kod.
Pretvorba PNG v BMP format
Če želite pretvorjeno sliko PNG pretvoriti v sliko BMP, pojdite na to spletno mesto in v razdelek za pretvornik slik in
- Kliknite spustni meni in izberite
- Pretvori v BMP
- Kliknite Pojdi
Spodnja slika vam bo dala jasno predstavo o postopku:
Predstavili vam bomo novo stran, ki izgleda kot spodnja slika:
- Kliknite jeziček Izberi datoteke in izberite preneseno sliko
- V neobveznih nastavitvah vnesite želeno velikost plošče (uporabljamo OLED 128 x 64)
- Kliknite gumb Začni pretvorbo
Predstavila se vam bo naslednja stran in po nekaj sekundah bo vaša pretvorjena slika prenesena, če se prenos ne začne samodejno, kliknite možnost prenosa datoteke:
Super! Zdaj imamo čas, da datoteko BMP pretvorimo v vrsto HEX kod, ki jih lahko bere Arduino.
Pretvorite sliko BMP v vrsto HEX kod
Če želite pretvorjeno sliko BMP pretvoriti v šestnajstiško matriko, pojdite na to spletno mesto in kliknite Orodja -> image2cpp
Spodnja slika vam bo dala jasno predstavo o postopku
Predstavili vam se bo zaslon s štirimi možnostmi in o njih bomo podrobno razpravljali
- Izberite sliko
- Nastavitve slike
- Predogled
- Izhod
Izberite razdelek slike
V tem razdelku bomo izbrali sliko, ki smo jo pravkar pretvorili v BMP:
Oddelek za nastavitve slike
V tem razdelku bomo nastavili velikost platna, barvo ozadja, skaliranje in središčne možnosti na našo zahtevano vrednost.
- Velikost platna (nastavili smo na 128 x 64, ker uporabljamo OLED z gostoto 128 x 64 slikovnih pik).
- V tem razdelku lahko nastavimo barvo ozadja OLED (izberemo jo, da je bela).
- Skaliranje je nastavljeno na prvotno velikost.
- Na koncu v sredinski možnosti kliknite potrditvena polja vodoravno in navpično, tako bo slika prikazana v sredini.
Spodnja slika vam bo dala jasno predstavo
Predogled
V razdelku za predogled lahko vidimo jasen predogled slike, ki bo prikazana v OLED, kot je prikazano spodaj:
Izhodni oddelek
V izhodnem razdelku bomo ustvarili in kopirali ustvarjeno kodo, tako da sledimo spodnjim korakom:
- Izhodna oblika kode (nastavimo jo kot kodo Arduino, ker jo uporabljamo).
- Identifikator (ta možnost nastavi ime za ustvarjeno matriko in jo pustimo privzeto, kakršno je).
- Način risanja (Možnost načina risanja smo nastavili na vodoravno).
- In na koncu kliknemo gumb za generiranje kode, s čimer bomo ustvarili končno izhodno kodo.
Spodnja slika vam bo dala jasno predstavo
Shema vezja
Spodnja slika prikazuje povezave med Arduino Nano in SSD1306:
Arduino Nano Pin |
OLED PIN |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
OVE |
D9 |
SDC |
D10 |
CCS |
Razlaga kode
Za prikaz slike na OLED potrebujemo pomoč knjižnice Arduino, ki jo lahko prenesete iz tega skladišča GitHub. Prenesite različico knjižnice U8glib-1.19.1.zip in jo uvozite v Arduino IDE. Če ste nov v Arduinu, poiščite pomoč na tej povezavi, ki opisuje, kako uvoziti knjižnico. V spodnjem razdelku bomo kodo spremenili tako, da bo OLED-ju prikazal prej ustvarjeno HEX matriko. Popolna koda z delujočim videoposnetkom je podana na koncu tega članka. Podrobna razlaga kode je podana spodaj.
Najprej vključite preneseno knjižnico.
#include "U8glib.h" // vključno s knjižnico U8glib
Nato določite vse potrebne nožice za 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 D9de: Arduino Digital Pin D9de OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Inicializirajte knjižnico u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Nato vključite ustvarjeno matriko slik.
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, 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, 0x1 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf, 0xff, 0xf, 0xf, 0xf, 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 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0xc, 0xc 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, …….. ………..
Funkcija risanja se uporablja za risanje bitne slike (QR kode) na OLED s pomočjo funkcije u8g.drawBitmapP.
void draw (void) {// grafični ukazi za prerisovanje celotnega zaslona naj bodo tukaj u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Na koncu v funkciji loop () pokličite vse potrebne postopke za izdelavo slike na OLED
void loop () {u8g.firstPage (); // Klic tega postopka pomeni začetek slikovne zanke. narediti {risanje (); } while (u8g.nextPage ()); // Klic tega postopka označuje konec telesa slikovne zanke. // obnovi sliko po zakasnitvi (1000); }
Po dokončanju kode priključite Arduino v vrata USB v računalniku, izberite vrata COM in naložite kodo. Če ste vse naredili pravilno, imate na OLED delujoč zaslon s kodo QR.
Upam, da vam je bil ta projekt všeč in ste uživali v učenju novega, nadaljujte z branjem, učite se in se vidimo naslednjič.