- Co je to vlastně ten QR kód?
- Generování vlastního QR kódu
- Převod formátu PNG do formátu BMP
- Převeďte obrázek BMP na řadu kódů HEX
- Kruhový diagram
- Vysvětlení kódu
Kód „Quick Response“ nebo zkráceně QR kód se stal podstatnou součástí našich digitálních životů, je pravděpodobné, že jste s nimi již podvědomě obeznámeni, pravděpodobně jste se toulali po místním obchodu s potravinami, nebo možná jste přečtením své oblíbené knihy nebo dokonce provedete online platbu pomocí Google Pay, PhonePe nebo Paytm nebo procházíte web atd. (Předpokládám, že bych mohl pokračovat dál a dál s příklady, hm?) a náhodou jste přišli napříč touto podivně vypadající čtvercovou věcí a myšlenkou, co je to vlastně ta čtvercová věc, a pokud jste ne… no, nebojte se, že se to stane dříve či později, takže k lepšímu pochopení tématu uděláme zábavný malý projekt s Arduino a OLED a demystifikujte následující věci:
- Základní koncept QR kódu.
- Jak to funguje.
- Jak vytvořit svůj vlastní QR kód pomocí Arduina.
- A nakonec jej zobrazte na obrazovce OLED (SSD1306).
Co je to vlastně ten QR kód?
QR code (Quick Response code) je maticový 2D kód pro vysokorychlostní čtení dat vyvinutý společností DENSO WAVE v roce 1994 pro japonský automobilový průmysl. QR kód komprimuje data velmi efektivně ve srovnání se standardním čárovým kódem, k dosažení tohoto cíle využívá čtyři standardizované režimy kódování (numerické, alfanumerické, bajtové / binární a kanji), technologie byla „otevřená“, tj. Dostupná pro každého, takže získal popularitu velmi rychle. Významnými výhodami QR kódů oproti běžným čárovým kódům jsou větší kapacita dat a vysoká odolnost proti chybám.
Jak funguje QR kód?
QR kódy (a další kódy datové matice) jsou navrženy tak, aby je bylo možné číst speciálními nástroji, nikoli člověkem, takže existuje jen určité množství, kterému můžeme porozumět vizuálním studiem, i když každý kód je odlišný různými způsoby, i když obsahuje několik zajímavých sledováním QR kódu CircuitDigest.com některé z nich prostudujeme
- Vyhledávací vzory: Velké čtvercové rámečky s pevným rámečkem uvnitř ve třech rozích kódu usnadňují potvrzení, že se jedná o QR kód, protože existují pouze tři z nich, takže je docela zřejmé, jakým způsobem je kód orientován.
- Alignment Pattern: Tím je zajištěno, že bez ohledu na orientaci bude kód čitelný.
- Časový vzor: Toto probíhá vodorovně a svisle mezi třemi vyhledávacími vzory , pomocí těchto řádků může čtenář určit velikost kódu.
- Informace o verzi: V současné době existuje 40 různých verzí standardu QR kódu, tato část kódu určuje verzi QR kódu, která se používá, pro marketingovou verzi 1-7 používanou normálně.
- Informace o formátu: Partneři formátu mají informace o toleranci chyb a maskování dat.
- Datová oblast: Tato část kódu obsahuje všechny datové prvky a kód opravy chyb.
- Ukončit zónu: Mezery v každém QR kódu jsou povinné, aby se odlišil kód od jeho okolí.
Obrázek níže vám poskytne jasnou představu o kódu
Dalšími částmi kódu jsou data a redundantní kód.
Existuje řada dalších funkcí a komplikovaných témat, o kterých se v tomto tutoriálu nebudu bavit. Pokud si chcete přečíst více podrobností o QR kódu, postupujte podle tohoto tutoriálu QR kódu Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008.
Specifikace QR kódu
Velikost symbolu |
Min. 21x21 buněk - max. Buňka 177x177 (s 4článkovým intervalem) |
|
Typ a objem informací |
Číselné znaky |
Maximálně 7 089 znaků |
Abecedy, značky |
Maximálně 4 296 znaků |
|
Binární (8 bitů) |
Maximálně 2 953 znaků |
|
Kanji znaky |
Maximálně 1 817 znaků |
|
Účinnost převodu |
Režim numerických znaků |
3,3 buňky / znak |
Alfanumerický / Znakový režim |
5,5 buněk / znak |
|
Binární (8bitový) režim |
8 buněk / znak |
|
Režim znaků Kanji (13 bitů) |
13 buněk / znak |
|
Oprava chyb funkčnost |
Úroveň L |
Cca. Maximálně obnoveno 7% oblasti symbolu |
Úroveň M |
Cca. Maximálně obnoveno 15% oblasti symbolu |
|
Úroveň Q |
Cca. Maximálně obnoveno 25% oblasti symbolu |
|
Úroveň H |
Cca. Obnoveno maximálně 30% oblasti symbolu |
|
Funkce propojení |
Možné rozdělit maximálně na 16 symbolů |
Generování vlastního QR kódu
Postupujte podle níže uvedených kroků a vygenerujte si svůj vlastní QR kód, v tomto příkladu uděláme QR kód našeho milovaného webu Circuit Digest
Chcete-li vygenerovat QR kód, přejděte na tento web a pokud se podíváte na horní stranu webu, uvidíte seznam možností, v tomto tutoriálu generujeme QR kód pro URL, takže se chystáme
- Klikněte na kartu URL a vložte adresu URL pro Circuit Digest v části Zadat URL.
- Klikněte na Uložit.
- Zadejte název výstupního souboru.
- Jako preferovaný formát souboru vyberte PNG.
- a klikněte na Uložit.
Obrázek níže vám poskytne jasnou představu o procesu
Náš nejdražší mikrokontrolér „Arduino“ není natolik inteligentní, že by stačil zkompilovat surový obraz PNG a zobrazit jej na OLED displeji. Chcete-li tedy zobrazit QR kód na OLED, musíme postupovat podle několika jednoduchých kroků a převést obrázek PNG na bitmapové pole čitelné Arduino. Tuto konverzi jsme dříve provedli při propojení SSD1306 OLED s Arduino a při propojení grafického LCD s Arduino. Také jsme propojili SSD1306 OLED s Raspberry Pi, ESP32, NodeMCU a mnoha dalšími mikrokontroléry. Převod bitmapového pole lze provést v následujících dvou krocích:
- Převod formátu PNG do formátu BMP.
- Převeďte obrázek BMP na řadu kódů HEX.
Převod formátu PNG do formátu BMP
Chcete-li převést stažený obrázek PNG na obrázek BMP, přejděte na tento web a v části převaděče obrázků a
- Klikněte na rozevírací nabídku a vyberte
- Převést na BMP
- Klikněte na Přejít
Obrázek níže vám poskytne jasnou představu o procesu:
Zobrazí se nová stránka, která vypadá jako na následujícím obrázku:
- Klikněte na kartu Vybrat soubory a vyberte stažený obrázek
- Ve volitelných nastaveních zadejte panel požadovanou velikost (používáme OLED 128 x 64)
- Klikněte na tlačítko Zahájit převod
Zobrazí se vám následující stránka a po několika sekundách se váš převedený obrázek stáhne, pokud se stahování nespustí automaticky, klikněte na možnost stáhnout soubor:
Skvělý! Nyní máme náš soubor BMP čas převést jej na řadu HEX kódů čitelných Arduinem.
Převeďte obrázek BMP na řadu kódů HEX
Chcete-li převést stažený obrázek BMP na pole HEX, přejděte na tento web a klikněte na Nástroje -> image2cpp
Obrázek níže vám poskytne jasnou představu o procesu
Zobrazí se vám obrazovka, která má čtyři možnosti, a my je podrobně probereme
- Vyberte obrázek
- Nastavení obrazu
- Náhled
- Výstup
Vyberte sekci obrázku
V této části vybereme obrázek, který jsme právě převedli na BMP:
Sekce nastavení obrazu
V této části nastavíme velikost plátna, barvu pozadí, měřítko a možnosti středu na požadovanou hodnotu.
- Velikost plátna (nastavíme na 128x64, protože používáme OLED s hustotou pixelů 128x64).
- V této části můžeme nastavit barvu pozadí OLED (zvolíme bílou).
- Měřítko je nastaveno na původní velikost.
- Nakonec v možnosti uprostřed klikněte na horizontální a vertikální zaškrtávací políčka, čímž se obrázek zobrazí uprostřed.
Obrázek níže vám dá jasnou představu
Sekce náhledu
V sekci náhledu vidíme jasný náhled obrázku, který se zobrazí v OLED, jak je znázorněno níže:
Sekce výstupu
Ve výstupní části vygenerujeme a zkopírujeme vygenerovaný kód, postupujte takto:
- Výstupní formát kódu (nastavili jsme jej jako Arduino kód, protože ho používáme).
- Identifikátor (tato volba nastaví název vygenerovaného pole, ponecháme jej výchozí tak, jak je).
- Režim kreslení (Možnost režimu kreslení jsme nastavili na vodorovnou).
- A nakonec klikneme na tlačítko vygenerovat kód, čímž vygenerujeme konečný výstupní kód.
Obrázek níže vám dá jasnou představu
Kruhový diagram
Níže uvedený obrázek ukazuje propojení rozhraní mezi Arduino Nano a SSD1306:
Arduino Nano Pin |
OLED PIN |
GND |
GND |
3,3 V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Vysvětlení kódu
K zobrazení obrázku na OLED potřebujeme pomoc knihovny Arduino, kterou si můžete stáhnout z tohoto úložiště GitHub. Stáhněte si verzi knihovny U8glib-1.19.1.zip a importujte ji do IDE Arduino. Pokud jste v Arduinu noví, využijte tento odkaz, který popisuje, jak importovat knihovnu. V níže uvedené části upravíme kód tak, aby zobrazoval dříve generované HEX pole na OLED. Kompletní kód s fungujícím videem je uveden na konci tohoto článku. Níže je uvedeno podrobné vysvětlení kódu.
Nejprve zahrňte staženou knihovnu.
#include "U8glib.h" // včetně knihovny U8glib
Poté definujte všechny potřebné piny pro 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 knihovnu u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Pak zahrňte vygenerované pole obrazu.
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, 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, 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, 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, …….. ………..
Funkce Draw se používá k vykreslení bitmapového obrazu (QR kódu) na OLED pomocí funkce u8g.drawBitmapP.
void draw (void) {// grafické příkazy pro překreslení celé obrazovky by zde měly být umístěny u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Nakonec ve funkci loop () zavolejte všechny potřebné postupy k vytvoření obrazu na OLED
void loop () {u8g.firstPage (); // Volání tohoto postupu označuje začátek obrazové smyčky. do {draw (); } while (u8g.nextPage ()); // Volání tohoto postupu označí konec těla obrazové smyčky. // znovu sestavit obrázek po nějakém zpoždění (1000); }
Po dokončení kódu zapojte Arduino do USB portu vašeho počítače, vyberte svůj COM port a nahrajte kód. Pokud jste vše udělali správně, budete mít na OLED funkční displej s QR kódem.
Doufám, že se vám tento projekt líbil a bavilo vás učit se něco nového, čtěte dál, učte se a uvidíme se příště.