- Què és, de totes maneres, aquest codi QR?
- Generant el vostre propi codi QR
- Conversió del PNG a format BMP
- Convertiu la imatge BMP en una matriu de codis HEX
- Esquema de connexions
- Explicació del codi
El codi de "resposta ràpida" o abreujat com a codi QR s'ha convertit en una part essencial de les nostres vides digitals; és probable que ja estigueu familiaritzat amb ells inconscientment i que probablement hàgiu passat per la vostra botiga de queviures local, o llegint el vostre llibre preferit, o fins i tot si esteu realitzant un pagament en línia amb Google Pay, PhonePe o Paytm, o navegant per la web, etc. (suposo que podria continuar amb exemples, eh?) i heu vingut per casualitat a través d’aquest aspecte i pensament estrany de quadrats, què és això de totes maneres i si no ho heu fet… bé, no us preocupeu, segur que passarà tard o d’hora, així que per entendre millor el tema farem un divertit petit projecte amb Arduino i OLED i desmitifica les següents coses:
- Concepte bàsic del codi QR.
- Com funciona.
- Com fer el vostre propi codi QR amb Arduino.
- I, finalment, mostreu-lo en una pantalla OLED (SSD1306).
Què és, de totes maneres, aquest codi QR?
El codi QR (codi de resposta ràpida) és un codi matricial 2D per llegir dades a alta velocitat, desenvolupat per DENSO WAVE el 1994 per a la indústria automobilística del Japó. Un codi QR comprimeix les dades de manera molt eficient en comparació amb el codi de barres estàndard, per aconseguir-ho utilitza quatre modes de codificació estandarditzats (numèric, alfanumèric, byte / binari i kanji), la tecnologia es va fer "de codi obert", és a dir, disponible per a tothom. va guanyar popularitat molt ràpidament. Els avantatges significatius dels codis QR respecte als codis de barres convencionals són la capacitat de dades més gran i la tolerància a fallades.

Com funciona el codi QR?
Els codis QR (i altres codis de matriu de dades) estan dissenyats per ser llegits per eines especials, no per humans, de manera que només hi ha una quantitat específica que podem entendre estudiant visualment, tot i que cada codi és diferent de diverses maneres, tot i que contenen alguns aspectes comuns interessants. característiques observant el codi QR de circuitdigest.com estudiarem algunes d’elles
- Patrons de cerca: les caixes quadrades grans amb una caixa sòlida a l'interior a les tres cantonades del codi fan que sigui fàcil confirmar que es tracta d'un codi QR, ja que només n'hi ha tres, de manera que és bastant evident que de quina manera s'orienta el codi.
- Patró d'alineació: fa que sigui segur que sigui quina sigui l'orientació del codi que es pugui llegir.
- Patró de sincronització: s'executa horitzontalment i verticalment entre els tres patrons de cercador , mitjançant aquestes línies el lector pot determinar la mida del codi.
- Informació de la versió: actualment hi ha 40 versions diferents de l’estàndard del codi QR, aquesta secció del codi determina la versió del codi QR que s’utilitza, per a la versió de comercialització 1-7 que s’utilitza normalment.
- Informació de format: els socis de format tenen informació sobre la tolerància a errors i l’emmascarament de dades.
- Àrea de dades: aquesta secció del codi conté tots els elements de dades i el codi de correcció d'errors.
- Sortir de la zona: l’espai entre tots els codis QR és obligatori per diferenciar el codi del seu entorn.
La imatge següent us donarà una idea clara sobre el codi

Altres seccions del codi són les dades i el codi de redundància.
Hi ha una sèrie d’altres funcions i temes complicats que no tractaré en aquest tutorial, si voleu llegir més detalls sobre el codi QR, seguiu aquest tutorial de codi QR de Tan Jin Soon, EPCglobal Singapore Council. Revista de síntesi, 2008.
L'especificació del codi QR
|
Mida del símbol |
Mín. Cel·la 21x21: màx. 177x177 cel·les (amb un interval de 4 cel·les) |
|
|
Tipus d'informació i volum |
Caràcters numèrics |
7.089 caràcters com a màxim |
|
Alfabets, signes |
4.296 caràcters com a màxim |
|
|
Binari (8 bits) |
2.953 caràcters com a màxim |
|
|
Personatges Kanji |
1.817 caràcters com a màxim |
|
|
Eficiència de conversió |
Mode de caràcters numèrics |
3,3 cel·les / caràcter |
|
Mode alfanumèric / signes |
5,5 cel·les / caràcter |
|
|
Mode binari (8 bits) |
8 cel·les / caràcter |
|
|
Mode de caràcters Kanji (13 bits) |
13 cel·les / caràcter |
|
|
Correcció d'errors funcionalitat |
Nivell L |
Aprox. El 7% de l'àrea de símbols s'ha restaurat com a màxim |
|
Nivell M |
Aprox. 15% de l'àrea de símbols restaurada com a màxim |
|
|
Nivell Q |
Aprox. S'ha restaurat el 25% de l'àrea de símbols com a màxim |
|
|
Nivell H. |
Aprox. El 30% de l'àrea de símbols es restaura com a màxim |
|
|
Funcionalitat d'enllaç |
Es pot dividir en 16 símbols com a màxim |
Generant el vostre propi codi QR
Seguiu els passos esmentats a continuació per generar el vostre propi codi QR; en aquest exemple, farem un codi QR del nostre estimat lloc web Circuit Digest
Per generar un codi QR, aneu a aquest lloc web i si mireu la part superior del lloc web podeu veure una llista d’opcions, en aquest tutorial estem generant un codi QR per a una URL, així que anem a
- Feu clic a la pestanya URL i enganxeu l'URL del Circuit Digest a la secció Introduïu URL.
- Feu clic a Desa.
- Indiqueu un nom de fitxer per al fitxer de sortida.
- Seleccioneu PNG com a format de fitxer preferit.
- i feu clic a Desa.
La imatge següent us donarà una idea clara del procés

El nostre microcontrolador més estimat "Arduino" no és prou intel·ligent perquè només pugui compilar la imatge PNG bruta i mostrar-la a la pantalla OLED. Per tant, per mostrar el codi QR a l’OLED hem de seguir alguns passos senzills i convertir la imatge PNG en una matriu de mapa de bits llegible per Arduino. Aquesta conversió la hem fet prèviament mentre interfacàvem el SSD1306 OLED amb Arduino i la interfície LCD gràfica amb Arduino. També hem interfaçat SSD1306 OLED amb Raspberry Pi, ESP32, NodeMCU i molts altres microcontroladors. La conversió de matriu de mapes de bits es pot fer en dos passos següents:
- Conversió del PNG a format BMP.
- Convertiu la imatge BMP en una matriu de codis HEX.
Conversió del PNG a format BMP
Per convertir la imatge PNG descarregada en imatge BMP, aneu a aquest lloc web i a la secció de conversió d'imatges i
- Feu clic al menú desplegable i seleccioneu
- Converteix a BMP
- Feu clic a Vés
La imatge següent us donarà una idea clara del procés:

Se us presentarà una nova pàgina que s'assembla a la imatge següent:

- Feu clic a la pestanya Tria fitxers i seleccioneu la imatge descarregada
- A la configuració opcional, escriviu el tauler de la mida desitjada (utilitzem un OLED de 128x64)
- Feu clic al botó Inicia la conversió
Se us mostrarà la pàgina següent i, al cap d’uns segons, es descarregarà la imatge convertida si la descàrrega no s’inicia automàticament, feu clic a l’opció de baixada del fitxer:

Genial! Ara hem arribat el moment del nostre fitxer BMP per convertir-lo en una matriu de codis HEX llegibles per un Arduino.
Convertiu la imatge BMP en una matriu de codis HEX
Per convertir la imatge BMP descarregada a una matriu HEX, aneu a aquest lloc web i feu clic a Eines -> image2cpp
La imatge següent us donarà una idea clara del procés

Se us presentarà una pantalla que té quatre opcions i en parlarem detalladament
- Selecciona la imatge
- Configuració de la imatge
- Vista prèvia
- Sortida
Seleccioneu la secció de la imatge
En aquesta secció seleccionarem la imatge que acabem de convertir a BMP:

Secció de configuració de la imatge
En aquesta secció, establirem la mida del llenç, el color de fons, l’escala i les opcions centrals al valor requerit.
- Mida del llenç (el configurem a 128x64 perquè estem utilitzant un OLED amb densitat de píxels de 128x64).
- En aquesta secció, podem establir el color de fons de l’OLED (l’escollim perquè sigui blanc).
- L'escala es defineix a la mida original.
- Finalment, a l’opció central feu clic a les caselles de selecció horitzontals i verticals, la imatge apareixerà al centre.
La imatge següent us donarà una idea clara

Secció de vista prèvia
A la secció de previsualització podem veure una vista prèvia clara de la imatge que es mostrarà a l’OLED com es mostra a continuació:

Secció de sortida
A la secció de sortida generarem i copiarem el codi generat, per fer-ho, seguiu els passos següents:
- Format de sortida de codi (el configurem com a codi Arduino perquè en fem servir un).
- Identificador (aquesta opció estableix el nom de la matriu generada, la deixem per defecte tal com és).
- Mode de dibuix (configurem l’opció de mode de dibuix a horitzontal).
- I, finalment, fem clic al botó de generar codi per generar el codi de sortida final.
La imatge següent us donarà una idea clara

Esquema de connexions
A la imatge següent es mostren les connexions d'interfície entre Arduino Nano i SSD1306:

|
Pin Arduino Nano |
PIN OLED |
|
GND |
GND |
|
3,3V |
VCC |
|
D13 |
CLK |
|
D11 |
MOSI |
|
D8 |
RES |
|
D9 |
SDC |
|
D10 |
CCS |
Explicació del codi
Per mostrar la imatge a l’OLED necessitem l’ajuda d’una biblioteca Arduino, que es pot descarregar des d’aquest dipòsit de GitHub. Baixeu- vos la versió U8glib-1.19.1.zip de la biblioteca i importeu-la a l'IDE Arduino. Si no coneixeu Arduino, feu servir aquest enllaç per descriure com importar una biblioteca. A la secció següent modificarem el codi per mostrar la matriu HEX generada prèviament a l’OLED. Al final d’aquest article es dóna un codi complet amb un vídeo de treball. A continuació es mostra l'explicació detallada del codi.
Primer, incloeu la biblioteca descarregada.
#include "U8glib.h" // inclosa la biblioteca U8glib
A continuació, definiu tots els pins necessaris per a OLED.
#define OLED_CLK_PIN 13 // Pin digital Arduino D13: SCK #define OLED_MOSI_PIN 11 // Pin digital Arduino D11: MOSI #define OLED_RES_PIN 10 // Pin digital Arduino D10: SS #define OLED_SDC_PIN 9 // Pin digital Arduino D9: OC1A #define OLED_CSS_PIN 8 // Pin digital Arduino D13: ICP1
Inicialitzeu la biblioteca u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
A continuació, incloeu la matriu d'imatges generada.
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, 0xf0, 0x00, 0x1c, 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, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8x, f 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, 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, 0xff, …….. ………..
La funció de dibuix s’utilitza per dibuixar la imatge de mapa de bits (codi QR) a OLED amb l’ajut de la funció u8g.drawBitmapP.
void draw (void) {// les ordres gràfiques per tornar a dibuixar la pantalla completa s'han de col·locar aquí u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Finalment, a la funció loop () , crideu a tots els procediments necessaris per crear la imatge en OLED
bucle buit () {u8g.firstPage (); // Una trucada a aquest procediment marca l'inici del bucle d'imatge. fer {draw (); } while (u8g.nextPage ()); // Una trucada a aquest procediment marca el final del cos del bucle d'imatge. // reconstrueix la imatge després d'un cert retard (1000); }
Després d’haver completat el codi, connecteu l’Arduino al port USB de l’ordinador, seleccioneu el port COM i pengeu el codi. Si ho heu fet tot correctament, tindreu una pantalla de treball amb un codi QR a OLED.

Espero que aquest projecte us hagi agradat i us hagi agradat aprendre alguna cosa nova, seguiu llegint, seguiu aprenent i us veuré la propera vegada.
