- Deci, ce este acest cod QR oricum?
- Generarea propriului cod QR
- Conversia PNG în format BMP
- Convertiți imaginea BMP într-o serie de coduri HEX
- Diagrama circuitului
- Explicarea codului
Codul „Răspuns rapid” sau prescurtat ca cod QR a devenit o parte esențială a vieții noastre digitale, este posibil să fiți deja inconștient familiarizați cu ei până acum probabil că vă plimbați în jurul magazinului dvs. local sau poate sunteți citind cartea preferată sau chiar dacă efectuați o plată online cu Google Pay, PhonePe sau Paytm, sau navigați pe web etc. (presupun că aș putea continua cu exemple nu?) și ați venit peste acest lucru pătrat ciudat și gândire, ce este acest lucru pătrat oricum și dacă nu ați făcut-o… ei bine, nu vă faceți griji, se va întâmpla mai devreme sau mai târziu, așa că pentru a înțelege mai bine tema vom face o mic proiect distractiv cu Arduino și OLED și demistifică următoarele lucruri:
- Conceptul de bază al codului QR.
- Cum functioneaza.
- Cum să vă creați propriul cod QR folosind Arduino.
- Și, în cele din urmă, afișați-l într-un ecran OLED (SSD1306).
Deci, ce este acest cod QR oricum?
Codul QR (Quick Response code) este un cod matricial 2D pentru citirea datelor la viteză mare, dezvoltat de DENSO WAVE în 1994 pentru industria auto din Japonia. Un cod QR comprimă datele foarte eficient în comparație cu codul de bare standard, pentru a realiza acest lucru folosește patru moduri de codificare standardizate (numeric, alfanumeric, octet / binar și kanji), tehnologia a fost făcută „open source”, adică disponibilă pentru toată lumea, așa că a câștigat popularitate foarte rapid. Avantajele semnificative ale codurilor QR față de codurile de bare convenționale sunt capacitatea de date mai mare și toleranța ridicată la erori.
Cum funcționează codul QR?
Codurile QR (și alte coduri matrice de date) sunt concepute pentru a fi citite de instrumente speciale, nu de oameni, deci există doar o cantitate specifică pe care o putem înțelege studiind vizual, deși fiecare cod este diferit în diferite moduri, deși conțin câteva elemente comune interesante caracteristici prin observarea codului QR circuitdigest.com vom studia unele dintre ele
- Modele de căutare: cutii mari pătrate cu o cutie solidă în interior în cele trei colțuri ale codului facilitează confirmarea faptului că este un cod QR, deoarece există doar trei dintre ele, deci este destul de evident că în ce mod este orientat codul.
- Model de aliniere: Acest lucru asigură faptul că oricare ar fi orientarea codului poate fi citită.
- Model de sincronizare: Acesta rulează orizontal și vertical între cele trei modele de căutare , folosind aceste linii cititorul poate determina dimensiunea codului.
- Informații despre versiune: Există în prezent 40 de versiuni diferite ale standardului codului QR, această secțiune a codului determină versiunea codului QR care este utilizată, pentru versiunea de marketing 1-7 utilizată în mod normal.
- Informații despre format: partenerii de format au informații despre toleranța la erori și mascarea datelor.
- Zona de date: Această secțiune a codului conține toate elementele de date și codul de corectare a erorilor.
- Ieșiți din zonă: spațiul din fiecare cod QR este obligatoriu pentru a diferenția codul de împrejurimile sale.
Imaginea de mai jos vă va oferi o idee clară despre cod
Alte secțiuni ale codului sunt datele și codul de redundanță.
Există o serie de alte caracteristici și subiecte complicate pe care nu le voi discuta în acest tutorial, dacă doriți să citiți mai multe detalii despre codul QR, vă rugăm să urmați acest tutorial despre codul QR de Tan Jin Soon, EPCglobal Singapore Council. Jurnal de sinteză, 2008.
Specificația codului QR
Dimensiunea simbolului |
Min. 21x21 celule - Max. 177x177 celule (cu interval de 4 celule) |
|
Tipul și volumul informațiilor |
Caracterele numerice |
7.089 caractere la maximum |
Alfabete, Semne |
4.296 caractere la maximum |
|
Binar (8 biți) |
2.953 caractere la maximum |
|
Personaje Kanji |
1.817 caractere la maximum |
|
Eficienta conversiei |
Mod caractere numerice |
3.3 celule / caracter |
Mod alfanumeric / Semne |
5,5 celule / caracter |
|
Mod binar (8 biți) |
8 celule / caracter |
|
Modul de caractere Kanji (13 biți) |
13 celule / caracter |
|
Corectarea erorii funcționalitate |
Nivelul L |
Aproximativ. 7% din suprafața simbolului restaurată la maxim |
Nivelul M |
Aproximativ. 15% din suprafața simbolului restaurată la maxim |
|
Nivelul Q |
Aproximativ. 25% din suprafața simbolului a fost restabilită la maximum |
|
Nivelul H |
Aproximativ. 30% din suprafața simbolului a fost restabilită la maximum |
|
Funcționalitate de conectare |
Poate fi împărțit în maximum 16 simboluri |
Generarea propriului cod QR
Urmați pașii menționați mai jos pentru a vă genera propriul cod QR, în acest exemplu, vom face un cod QR al iubitului nostru site Web Circuit Digest
Pentru a genera un cod QR, accesați acest site și, dacă vă uitați la partea de sus a site-ului, puteți vedea o listă de opțiuni, în acest tutorial generăm un cod QR pentru o adresă URL, așa că vom
- Faceți clic pe fila URL și lipiți URL-ul pentru Circuit Digest în secțiunea Enter URL.
- Faceți clic pe salvare.
- Dați un nume de fișier pentru fișierul de ieșire.
- Selectați PNG ca format de fișier preferat.
- și faceți clic pe Salvați.
Imaginea de mai jos vă va oferi o idee clară despre proces
Cel mai drag al nostru microcontroler „Arduino” nu este atât de inteligent încât să poată compila imaginea PNG brută și să o afișeze pe afișajul OLED. Deci, pentru a afișa codul QR pe OLED, trebuie să urmăm câțiva pași simpli și să convertim imaginea PNG într-o matrice de bitmap citită de Arduino. Această conversie am făcut-o anterior în timp ce interfațam SSD1306 OLED cu Arduino și interfața LCD grafic cu Arduino. De asemenea, am interfațat SSD1306 OLED cu Raspberry Pi, ESP32, NodeMCU și multe alte microcontrolere. Conversia matricei Bitmap se poate face în doi pași de mai jos:
- Conversia PNG în format BMP.
- Convertiți imaginea BMP într-o serie de coduri HEX.
Conversia PNG în format BMP
Pentru a converti imaginea PNG descărcată în imagine BMP, accesați acest site web și în secțiunea de conversie a imaginilor și
- Faceți clic pe meniul derulant și selectați
- Convertiți în BMP
- Faceți clic pe Go
Imaginea de mai jos vă va oferi o idee clară despre proces:
Vi se va prezenta o pagină nouă care arată ca imaginea de mai jos:
- Faceți clic pe fila Alegeți fișiere și selectați imaginea descărcată
- În setările opționale, tastați dimensiunea dorită (folosim un OLED de 128x64)
- Faceți clic pe butonul Start conversie
Vi se va prezenta următoarea pagină și după câteva secunde imaginea convertită va fi descărcată dacă descărcarea nu pornește automat, faceți clic pe opțiunea de descărcare a fișierului:
Grozav! Acum avem fișierul nostru BMP este timpul să îl convertim într-o serie de coduri HEX citibile de un Arduino.
Convertiți imaginea BMP într-o serie de coduri HEX
Pentru a converti imaginea BMP descărcată într-o matrice HEX, accesați acest site web și faceți clic pe Instrumente -> image2cpp
Imaginea de mai jos vă va oferi o idee clară despre proces
Vi se va prezenta un ecran care are patru opțiuni și le vom discuta în detalii
- Selectați imaginea
- Setări imagine
- previzualizare
- Ieșire
Selectați secțiunea imagine
În această secțiune vom selecta imaginea pe care tocmai am transformat-o în BMP:
Secțiunea Setări imagine
În această secțiune, vom seta dimensiunea pânzei, culoarea de fundal, scalarea și opțiunile de centru la valoarea dorită.
- Dimensiunea pânzei (ne-am setat la 128x64 deoarece folosim un OLED cu densitate de 128x64 pixeli).
- În această secțiune, putem seta culoarea de fundal a OLED (o alegem să fie albă).
- Scalarea este setată la dimensiunea originală.
- În cele din urmă, în opțiunea centrală faceți clic pe casetele de selectare orizontale și verticale, aceasta va face ca imaginea să apară în centru.
Imaginea de mai jos vă va oferi o idee clară
Secțiunea de previzualizare
În secțiunea de previzualizare putem vedea o previzualizare clară a imaginii care va fi afișată în OLED așa cum se arată mai jos:
Secțiunea de ieșire
În secțiunea de ieșire vom genera și copia codul generat, pentru a face acest lucru, urmați pașii de mai jos:
- Format de ieșire a codului (l-am setat ca cod Arduino deoarece folosim unul).
- Identificator (această opțiune setează numele pentru matricea generată, lăsându-l implicit așa cum este).
- Mod desen (Am setat opțiunea mod desen pe orizontală).
- Și, în cele din urmă, facem clic pe butonul de generare a codului, acesta va genera codul final de ieșire.
Imaginea de mai jos vă va oferi o idee clară
Diagrama circuitului
Imaginea de mai jos arată conexiunile de interfață între Arduino Nano și SSD1306:
Pinul Arduino Nano |
PIN OLED |
GND |
GND |
3,3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Explicarea codului
Pentru a afișa imaginea pe OLED avem nevoie de ajutorul unei biblioteci Arduino, care poate fi descărcată din acest depozit GitHub. Descărcați versiunea U8glib-1.19.1.zip a bibliotecii și importați-o în IDE Arduino. Dacă sunteți nou în Arduino, luați ajutorul acestui link care descrie cum să importați o bibliotecă. În secțiunea de mai jos vom modifica codul pentru a afișa matricea HEX generată anterior pe OLED. Codul complet cu un videoclip funcțional este dat la sfârșitul acestui articol. Explicația detaliată a codului este dată mai jos.
În primul rând, includeți biblioteca descărcată.
#includeți "U8glib.h" // inclusiv biblioteca U8glib
Apoi definiți toți pinii necesari pentru 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 // Pin digital Arduino D13: ICP1
Inițializați biblioteca u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Apoi includeți matricea de imagine generată.
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, 0xf0, 0x0, 0x1, 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, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0x8f, 0x 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, 0x8x, 0x8x, 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, …….. ………..
Funcția Draw este utilizată pentru a desena imaginea bitmap (cod QR) pe OLED cu ajutorul funcției u8g.drawBitmapP.
draw nul (nul) {// comenzile grafice pentru a redesena ecranul complet ar trebui plasate aici u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
În cele din urmă, în funcția loop () , apelați toate procedurile necesare pentru a construi imaginea pe OLED
void loop () {u8g.firstPage (); // Un apel la această procedură, marchează începutul buclei de imagine. {draw (); } while (u8g.nextPage ()); // Un apel la această procedură, marchează sfârșitul corpului buclei de imagine. // reconstruiți imaginea după o întârziere de întârziere (1000); }
După finalizarea codului, conectați Arduino în portul USB al computerului, selectați portul COM și încărcați codul. Dacă ați făcut totul corect, veți avea un afișaj funcțional cu un cod QR pe OLED.
Sper că ți-a plăcut acest proiect și ți-a plăcut să înveți ceva nou, continuă să citești continuă să înveți și te vom vedea data viitoare.