- Pa, što je uopće ovaj QR kod?
- Generiranje vlastitog QR koda
- Pretvaranje PNG-a u BMP format
- Pretvorite BMP sliku u niz HEX kodova
- Kružni dijagram
- Objašnjenje koda
Kôd "Brzi odgovor" ili skraćeno QR kôd postao je bitan dio našeg digitalnog života, velika je vjerojatnost da ste ih već podsvjesno poznavali, vjerojatno ste već lutali oko svoje lokalne trgovine ili možda jeste. čitajući svoju omiljenu knjigu, ili čak možda vršite internetsko plaćanje putem Google Paya, PhonePea ili Paytma, ili surfate webom itd. (pretpostavljam da bih mogao nastaviti i dalje s primjerima ha?), a slučajno ste došli preko ove čudne četvrtaste stvari i misli, što je uopće ta kvadratna stvar, a ako niste… dobro, ne brinite da će se to dogoditi prije ili kasnije, pa da bismo bolje razumjeli temu, napravit ćemo zabavan mali projekt s Arduinom i OLED-om i demistificirajte sljedeće stvari:
- Osnovni koncept QR koda.
- Kako radi.
- Kako izraditi vlastiti QR kod pomoću Arduina.
- I na kraju, prikažite ga na OLED (SSD1306) zaslonu.
Pa, što je uopće ovaj QR kod?
QR kôd (Quick Response code) matrični je 2D kôd za čitanje podataka velikom brzinom, koji je razvio DENSO WAVE 1994. godine za automobilsku industriju Japana. QR kod komprimira podatke vrlo učinkovito u usporedbi sa standardnim crtičnim kodom, da bi se to postiglo, koristi četiri standardizirana načina kodiranja (numerički, alfanumerički, bajt / binarni i kanji), a tehnologija je postala "otvoren izvor", tj. Dostupna svima, vrlo brzo stekao popularnost.Značajne prednosti QR kodova u odnosu na konvencionalne crtične kodove su veći kapacitet podataka i velika tolerancija kvarova.

Kako QR kod funkcionira?
QR kodovi (i ostali matrični kodovi) dizajnirani su da ih čitaju posebni alati, a ne ljudi, tako da postoji samo određena količina koju možemo razumjeti vizualnim proučavanjem, iako je svaki kod različit na razne načine, iako sadrži nekoliko zanimljivih zajedničkih značajke promatrajući circuitdigest.com QR kôd proučit ćemo neke od njih
- Obrasci za pronalaženje: Velike četvrtaste kutije s masivnim okvirom unutar tri kuta koda olakšavaju potvrdu da se radi o QR kodu, jer ih ima samo tri, pa je prilično očito da je na koji način kôd orijentiran.
- Uzorak poravnanja: To čini sigurnim da bez obzira na orijentaciju kôd može biti čitljiv.
- Vremenski obrazac: Pokreće se vodoravno i okomito između tri uzorka tražila , pomoću ovih redaka čitač može odrediti veličinu koda.
- Informacije o inačici: Trenutno postoji 40 različitih verzija standarda QR koda, ovaj odjeljak koda određuje verziju QR koda koja se koristi za marketinšku verziju 1-7 koja se normalno koristi.
- Informacije o formatu: Partneri u formatu imaju informacije o toleranciji pogrešaka i maskiranju podataka.
- Područje podataka: Ovaj odjeljak koda sadrži sve elemente podataka i kôd za ispravljanje pogrešaka.
- Zatvori zonu: Razmak u svakom QR kodu obvezan je kako bi se razlikovao kôd od njegove okoline.
Slika u nastavku dat će vam jasnu ideju o kodu

Ostali odjeljci koda su podaci i kôd viška.
Postoji niz drugih značajki i kompliciranih tema o kojima neću raspravljati u ovom vodiču, ako želite pročitati više detalja o QR kodu, slijedite ovaj tutorial QR koda Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008. (monografija).
Specifikacija QR koda
|
Veličina simbola |
Min. 21x21 ćelija - maks. 177x177 stanica (s intervalom od 4 stanice) |
|
|
Vrsta i volumen informacija |
Numerički znakovi |
Maksimalno 7.089 znakova |
|
Abecede, znakovi |
Maksimalno 4.296 znakova |
|
|
Binarni (8 bita) |
Najviše 2.953 znaka |
|
|
Kanji likovi |
Najviše 1.817 znakova |
|
|
Učinkovitost pretvorbe |
Način numeričkih znakova |
3,3 stanice / znak |
|
Alfanumerički / znakovni način |
5,5 stanica / znak |
|
|
Binarni (8-bitni) način |
8 stanica / znak |
|
|
Način Kanji znakova (13 bita) |
13 stanica / znak |
|
|
Ispravak pogreške funkcionalnost |
Razina L |
Cca. 7% površine simbola obnovljeno na maksimumu |
|
Razina M |
Cca. 15% površine simbola obnovljeno na maksimumu |
|
|
Razina Q |
Cca. 25% površine simbola obnovljeno na maksimumu |
|
|
Razina H |
Cca. 30% površine simbola obnovljeno na maksimumu |
|
|
Povezivanje funkcionalnosti |
Moguće je podijeliti u najviše 16 simbola |
Generiranje vlastitog QR koda
Slijedite dolje navedene korake za generiranje vašeg vlastitog QR koda, u ovom ćemo primjeru izraditi QR kôd naše omiljene web stranice Circuit Digest
Da biste generirali QR kôd, idite na ovu web stranicu i ako pogledate gornju stranu web stranice možete vidjeti popis opcija, u ovom uputstvu generiramo QR kôd za URL, pa ćemo ići na
- Kliknite karticu URL i zalijepite URL za Circuit Digest u odjeljak Enter URL.
- Kliknite Spremi.
- Dajte naziv datoteke izlaznoj datoteci.
- Odaberite PNG kao naš preferirani format datoteke.
- i kliknite Spremi.
Slika u nastavku dat će vam jasnu ideju o procesu

Naš najdraži mikrokontroler "Arduino" nije toliko inteligentan da bi mogao samo sastaviti sirovu PNG sliku i prikazati je na OLED zaslonu. Dakle, za prikaz QR koda na OLED moramo slijediti nekoliko jednostavnih koraka i pretvoriti PNG sliku u bitmap niz koji čita Arduino. Ovu smo konverziju prethodno izvršili prilikom povezivanja SSD1306 OLED s Arduinom i povezivanja grafičkog LCD-a s Arduinom. Također smo povezali SSD1306 OLED s Raspberry Pi, ESP32, NodeMCU i mnogim drugim mikrokontrolerima. Pretvorba bitmapskog niza može se izvršiti u dva koraka:
- Pretvaranje PNG-a u BMP format.
- Pretvorite BMP sliku u niz HEX kodova.
Pretvaranje PNG-a u BMP format
Da biste pretvorenu PNG sliku pretvorili u BMP sliku, idite na ovu web stranicu i u odjeljak za pretvorbu slika i
- Kliknite padajući izbornik i odaberite
- Pretvori u BMP
- Kliknite Idi
Slika u nastavku dat će vam jasnu ideju o procesu:

Prikazat će vam se nova stranica koja izgleda poput donje slike:

- Kliknite karticu Choose Files i odaberite preuzetu sliku
- U opcionalnim postavkama ploča unesite željenu veličinu (koristimo OLED 128x64)
- Kliknite gumb Start pretvorbe
Prikazat će vam se sljedeća stranica i nakon nekoliko sekundi vaša pretvorena slika će se preuzeti ako preuzimanje ne počne automatski kliknuti na opciju preuzmi datoteku:

Sjajno! Sad je došlo vrijeme da našu BMP datoteku pretvorimo u niz HEX kodova koji čita Arduino.
Pretvorite BMP sliku u niz HEX kodova
Da biste pretvorili preuzetu BMP sliku u HEX niz, idite na ovu web stranicu i kliknite Alati -> image2cpp
Slika u nastavku dat će vam jasnu ideju o procesu

Prikazat će vam se zaslon koji ima četiri mogućnosti, a mi ćemo o njima detaljno razgovarati
- Odaberite sliku
- Postavke slike
- Pregled
- Izlaz
Odaberite odjeljak slike
U ovom ćemo odjeljku odabrati sliku koju smo upravo pretvorili u BMP:

Odjeljak za postavke slike
U ovom ćemo odjeljku postaviti veličinu platna, boju pozadine, skaliranje i središte na željenu vrijednost.
- Veličina platna (postavili smo na 128x64 jer koristimo OLED s gustoćom piksela 128x64).
- U ovom odjeljku možemo postaviti boju pozadine OLED-a (biramo bijelu).
- Skaliranje je postavljeno na izvornu veličinu.
- Napokon, u središnjoj opciji kliknite vodoravni i okomiti potvrdni okvir, to će učiniti da se slika pojavi u središtu.
Slika u nastavku dat će vam jasnu ideju

Odjeljak za pregled
U odjeljku za pregled možemo vidjeti jasan pregled slike koja će biti prikazana u OLED-u, kao što je prikazano dolje:

Izlazni odjeljak
U izlaznom odjeljku generirat ćemo i kopirati generirani kôd da bismo to učinili, slijedite korake u nastavku:
- Izlazni format koda (postavljamo ga kao Arduino kôd jer ga koristimo).
- Identifikator (ova opcija postavlja naziv za generirani niz ostavljamo ga zadanim onakvim kakav jest).
- Način crtanja (Opciju crtanja postavili smo na vodoravno).
- I na kraju, kliknemo gumb za generiranje koda, to će generirati konačni izlazni kod.
Slika u nastavku dat će vam jasnu ideju

Kružni dijagram
Ispod slike prikazane su međusobne veze između Arduino Nano i SSD1306:

|
Arduino Nano pin |
OLED PIN |
|
GND |
GND |
|
3,3 V |
VCC |
|
D13 |
CLK |
|
D11 |
MOSI |
|
D8 |
OIE |
|
D9 |
SDC |
|
D10 |
CCS |
Objašnjenje koda
Da bismo prikazali sliku na OLED-u, potrebna nam je pomoć Arduino biblioteke, koja se može preuzeti s ovog GitHub spremišta. Preuzmite verziju knjižnice U8glib-1.19.1.zip i uvezite je u Arduino IDE. Ako ste novi u Arduinu, potražite pomoć ove veze koja opisuje kako uvesti knjižnicu. U odjeljku u nastavku izmijenit ćemo kôd tako da na OLED prikaže prethodno generirani HEX niz. Kompletni kod s radnim video zapisom nalazi se na kraju ovog članka. Detaljno objašnjenje koda dato je u nastavku.
Prvo uključite preuzetu biblioteku.
#include "U8glib.h" // uključujući biblioteku U8glib
Zatim definirajte sve potrebne igle 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: OduC OLED_CSS_PIN 8 // Arduino digitalni pin D13: ICP1
Inicijalizirajte knjižnicu u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Zatim uključite generirani niz slika.
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, 0xff, 0xff, 0xf0, 0x00, 0x1, 0x1, 0x1, 0x1, 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, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf, 0xf, 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, 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, 0x8 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 crtanja koristi se za crtanje bitmap slike (QR kod) na OLED-u uz pomoć funkcije u8g.drawBitmapP.
void draw (void) {// ovdje treba postaviti grafičke naredbe za precrtavanje cijelog zaslona u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Na kraju, u funkciji loop () pozovite sve potrebne postupke za izgradnju slike na OLED-u
petlja void () {u8g.firstPage (); // Poziv na ovaj postupak označava početak slikovne petlje. do {draw (); } while (u8g.nextPage ()); // Poziv na ovaj postupak označava kraj tijela petlje slike. // obnavljamo sliku nakon određenog kašnjenja (1000); }
Nakon dovršetka koda, priključite Arduino u USB priključak računala, odaberite COM priključak i prenesite kôd. Ako ste sve ispravno učinili, na OLED-u ćete imati radni zaslon s QR kodom.

Nadam se da vam se svidio ovaj projekt i da ste uživali naučiti nešto novo, nastavite čitati i dalje učite i vidimo se sljedeći put.
