- Čo je vlastne tento QR kód?
- Generuje sa váš vlastný QR kód
- Konverzia formátu PNG do formátu BMP
- Preveďte obrázok BMP na rad HEX kódov
- Schéma zapojenia
- Vysvetlenie kódu
Kód „Quick Response“ alebo skrátene QR kód sa stal nevyhnutnou súčasťou nášho digitálneho života. Je pravdepodobné, že ste ich už podvedome poznali, pravdepodobne ste sa už potulovali po miestnom obchode s potravinami, alebo možno ste čítaním svojej obľúbenej knihy alebo dokonca možno uskutočňujete online platby pomocou Google Pay, PhonePe alebo Paytm, alebo surfujete na webe atď. (Myslím, že by som mohol pokračovať dokola s príkladmi, hm?) a náhodou ste prišli naprieč touto čudne vyzerajúcou hranatou vecou a myšlienkou, čo je to vlastne hranatá vec a ak ste tak neurobili… nebojte sa, skôr či neskôr sa to musí stať, aby sme tejto téme lepšie porozumeli, urobíme zábavný malý projekt s Arduino a OLED a demystifikujte nasledujúce veci:
- Základná koncepcia QR kódu.
- Ako to funguje.
- Ako si vyrobiť vlastný QR kód pomocou Arduina.
- A nakoniec ho zobrazte na obrazovke OLED (SSD1306).
Čo je vlastne tento QR kód?
QR code (Quick Response code) je maticový 2D kód na čítanie dát vysokou rýchlosťou, vyvinutý spoločnosťou DENSO WAVE v roku 1994 pre japonský automobilový priemysel. QR kód komprimuje dáta veľmi efektívne v porovnaní so štandardným čiarovým kódom. Na dosiahnutie tohto cieľa využíva štyri štandardizované režimy kódovania (numerické, alfanumerické, bajtové / binárne a kanji). Technológia bola „otvorená“, tj. Dostupná pre každého, takže si popularitu získali veľmi rýchlo. Významnými výhodami kódov QR oproti bežným čiarovým kódom sú väčšia kapacita dát a vysoká odolnosť proti chybám.
Ako funguje QR kód?
QR kódy (a ďalšie kódy dátových matíc) sú určené na čítanie špeciálnymi nástrojmi, nie ľuďmi, takže vizuálnym štúdiom dokážeme porozumieť iba určitému množstvu, ktoré môžeme pochopiť, aj keď každý kód je rôznymi spôsobmi odlišný, aj keď obsahuje niekoľko zaujímavých spoločných sledovaním QR kódu CircuitDigest.com si niektoré z nich preštudujeme
- Vyhľadávacie vzory: Veľké štvorcové polia s pevným rámčekom vo vnútri v troch rohoch kódu uľahčujú potvrdenie, že ide o kód QR, pretože sú iba tri, takže je zrejmé, akým spôsobom je kód orientovaný.
- Zarovnávací vzor: Toto zaisťuje, že je možné čitateľný kód bez ohľadu na jeho orientáciu.
- Časový vzor: Tento proces prebieha horizontálne a vertikálne medzi tromi vyhľadávacími vzormi . Pomocou týchto riadkov môže čitateľ určiť veľkosť kódu.
- Informácie o verzii: V súčasnosti existuje 40 rôznych verzií štandardu QR kódu, táto časť kódu určuje verziu QR kódu, ktorá sa používa, pre marketingovú verziu 1-7 používanú bežne.
- Informácie o formáte: Partneri vo formáte majú informácie o tolerancii voči chybám a maskovaní údajov.
- Dátová oblasť: Táto časť kódu obsahuje všetky dátové prvky a kód na opravu chýb.
- Ukončiť zónu: Medzery v každom QR kóde sú povinné, aby sa odlišil kód od jeho okolia.
Obrázok nižšie vám poskytne jasnú predstavu o kóde
Ďalšou časťou kódu sú dáta a redundančný kód.
Existuje niekoľko ďalších funkcií a komplikovaných tém, ktorým sa v tomto výučbe nebudem venovať. Ak si chcete prečítať viac podrobností o QR kóde, postupujte podľa tohto výukového programu QR Code, ktorého autorom je Tan Jin Soon, singapurská rada EPCglobal. Synthesis Journal, 2008.
Špecifikácia QR kódu
Veľkosť symbolu |
Min. 21 x 21 buniek - max. 177 x 177 buniek (s 4-bunkovým intervalom) |
|
Typ a objem informácií |
Číselné znaky |
Maximálne 7 089 znakov |
Abecedy, znamenia |
Maximálne 4 296 znakov |
|
Binárne (8 bitov) |
Maximálne 2 953 znakov |
|
Kanji znaky |
Maximálne 1 817 znakov |
|
Účinnosť premeny |
Režim číselných znakov |
3,3 bunky / znak |
Alfanumerický režim / režim znakov |
5,5 bunky / znak |
|
Binárny (8 bitový) režim |
8 buniek / znak |
|
Režim znakov Kanji (13 bitov) |
13 buniek / znak |
|
Oprava chyby funkčnosť |
Úroveň L |
Približne. Maximálne obnovených 7% oblasti symbolov |
Úroveň M |
Približne. Maximálne obnovených 15% oblasti symbolov |
|
Úroveň Q |
Približne. Maximálne je obnovených 25% oblasti so symbolmi |
|
Úroveň H |
Približne. Maximálne je obnovených 30% oblasti so symbolmi |
|
Funkčnosť prepojenia |
Možné rozdeliť maximálne do 16 symbolov |
Generuje sa váš vlastný QR kód
Postupujte podľa krokov uvedených nižšie a vygenerujte si svoj vlastný QR kód, v tomto príklade urobíme QR kód našej milovanej webovej stránky Circuit Digest
Ak chcete vygenerovať QR kód, choďte na tento web. Ak sa pozriete na hornú časť tohto webu, uvidíte zoznam možností. V tomto návode generujeme QR kód pre adresu URL, takže ideme na
- Kliknite na kartu URL a prilepte adresu URL pre výpis okruhu v sekcii Zadajte adresu URL.
- Kliknite na uložiť.
- Zadajte názov výstupného súboru.
- Ako preferovaný formát súboru vyberte formát PNG.
- a kliknite na tlačidlo Uložiť.
Obrázok nižšie vám poskytne jasnú predstavu o postupe
Náš najdrahší mikrokontrolér „Arduino“ nie je natoľko inteligentný, že by stačil zostaviť surový obraz PNG a zobraziť ho na OLED displeji. Aby sme teda mohli zobraziť QR kód na OLED, musíme postupovať podľa niekoľkých jednoduchých krokov a previesť obrázok PNG do bitmapového poľa čitateľného pre Arduino. Túto konverziu sme predtým vykonali pri prepojení SSD1306 OLED s Arduino a pri prepojení grafického LCD s Arduino. Tiež sme prepojili SSD1306 OLED s Raspberry Pi, ESP32, NodeMCU a mnohými ďalšími mikrokontrolérmi. Konverziu bitmapového poľa je možné vykonať v nasledujúcich dvoch krokoch:
- Konverzia formátu PNG do formátu BMP.
- Preveďte obrázok BMP na rad HEX kódov.
Konverzia formátu PNG do formátu BMP
Ak chcete previesť stiahnutý obrázok PNG na obrázok BMP, prejdite na tento web a v sekcii prevádzača obrázkov a
- Kliknite na rozbaľovaciu ponuku a vyberte
- Konvertovať na BMP
- Kliknite na tlačidlo Prejsť
Obrázok nižšie vám poskytne jasnú predstavu o postupe:
Zobrazí sa vám nová stránka, ktorá vyzerá ako na nasledujúcom obrázku:
- Kliknite na kartu Vybrať súbory a vyberte stiahnutý obrázok
- V časti Voliteľné nastavenia zadajte požadovaný panel (používame OLED 128 x 64)
- Kliknite na tlačidlo Spustiť prevod
Zobrazí sa vám nasledujúca stránka a po niekoľkých sekundách sa prevedený obrázok stiahne, ak sa sťahovanie nespustí automaticky, kliknite na možnosť stiahnuť súbor:
Skvelé! Teraz máme náš súbor BMP čas previesť ho na pole HEX kódov čitateľných pre Arduino.
Preveďte obrázok BMP na rad HEX kódov
Ak chcete previesť stiahnutý obrázok BMP na pole HEX, choďte na tento web a kliknite na Nástroje -> image2cpp
Obrázok nižšie vám poskytne jasnú predstavu o postupe
Zobrazí sa vám obrazovka, ktorá má štyri možnosti a podrobne ich rozoberieme
- Vyberte obrázok
- Nastavenia obrázka
- Náhľad
- Výkon
Vyberte sekciu s obrázkom
V tejto časti vyberieme obrázok, ktorý sme práve previedli na BMP:
Sekcia nastavenia obrázka
V tejto časti nastavíme veľkosť plátna, farbu pozadia, zmenu mierky a možnosti stredu na požadovanú hodnotu.
- Veľkosť plátna (nastavíme na 128 x 64, pretože používame OLED s hustotou pixelov 128 x 64).
- V tejto časti môžeme nastaviť farbu pozadia OLED (zvolíme ho ako bielu).
- Zmena mierky je nastavená na pôvodnú veľkosť.
- Nakoniec v možnosti stredu kliknite na vodorovné a zvislé začiarkavacie políčka, čím sa obrázok zobrazí v strede.
Obrázok nižšie vám poskytne jasnú predstavu
Sekcia ukážky
V sekcii ukážky vidíme jasný náhľad obrázka, ktorý sa zobrazí v OLED, ako je zobrazené nižšie:
Výstupná časť
Vo výstupnej časti vygenerujeme a skopírujeme vygenerovaný kód. Postupujte takto:
- Výstupný formát kódu (nastavili sme ho ako kód Arduino, pretože ho používame).
- Identifikátor (táto možnosť nastaví názov vygenerovaného poľa, ponecháme ho predvolený tak, ako je).
- Režim kreslenia (Nastavili sme možnosť režimu kreslenia na vodorovnú).
- A nakoniec klikneme na tlačidlo vygenerovať kód, ktorý vygeneruje konečný výstupný kód.
Obrázok nižšie vám poskytne jasnú predstavu
Schéma zapojenia
Nasledujúci obrázok zobrazuje prepojovacie spojenia medzi Arduino Nano a SSD1306:
Arduino Nano Pin |
OLED PIN |
GND |
GND |
3,3 V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
OZE |
D9 |
SDC |
D10 |
CCS |
Vysvetlenie kódu
Na zobrazenie obrazu na OLED potrebujeme pomoc knižnice Arduino, ktorú je možné stiahnuť z tohto úložiska GitHub. Stiahnite si verziu knižnice U8glib-1.19.1.zip a importujte ju do IDE Arduino. Ak ste v Arduine nováčikom, využite tento odkaz, ktorý popisuje, ako importovať knižnicu. V nasledujúcej časti upravíme kód tak, aby zobrazoval predtým vygenerované HEX pole na OLED. Kompletný kód s funkčným videom je uvedený na konci tohto článku. Podrobné vysvetlenie kódu je uvedené nižšie.
Najskôr zahrňte stiahnutú knižnicu.
#include "U8glib.h" // vrátane knižnice U8glib
Potom definujte všetky potrebné piny pre 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
Inicializujte knižnicu u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Potom zahrňte vygenerované pole obrázka.
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, 0xf0, 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, 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, 0x8, 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, 0xc1, 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, …….. ………..
Funkcia Draw sa používa na nakreslenie bitmapového obrázka (QR kód) na OLED pomocou funkcie u8g.drawBitmapP.
void draw (void) {// grafické príkazy na prekreslenie celej obrazovky by sa mali umiestniť sem u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Nakoniec vo funkcii loop () zavolajte všetky potrebné postupy na vytvorenie obrazu na OLED
void loop () {u8g.firstPage (); // Výzva na tento postup označuje začiatok obrazovej slučky. do {draw (); } while (u8g.nextPage ()); // Volanie tohto postupu označí koniec tela obrazovej slučky. // znovu zostaviť obrázok po nejakom oneskorení (1000); }
Po dokončení kódu zapojte Arduino do USB portu vášho počítača, vyberte váš COM port a nahrajte kód. Ak ste urobili všetko správne, budete mať na OLED funkčný displej s QR kódom.
Dúfam, že sa vám tento projekt páčil a bavilo vás učiť sa niečo nové, pokračujte v čítaní, učte sa ďalej a uvidíme sa nabudúce.