- Entonces, ¿qué es este código QR de todos modos?
- Generando su propio código QR
- Conversión del formato PNG a BMP
- Convierta la imagen BMP en una matriz de códigos HEX
- Diagrama de circuito
- Explicación del código
El código de "Respuesta rápida" o abreviado como código QR se ha convertido en una parte esencial de nuestra vida digital, lo más probable es que ya esté inconscientemente familiarizado con ellos. Probablemente ya haya estado deambulando por su supermercado local, o tal vez leyendo su libro favorito, o incluso posiblemente esté haciendo un pago en línea con Google Pay, PhonePe o Paytm, o navegando por la web, etc. (supongo que podría seguir y seguir con ejemplos, ¿eh?) y resultó que ha venido a través de esta cosa cuadrada de aspecto extraño y pensó, ¿qué es esta cosa cuadrada de todos modos y si no lo ha hecho… bueno, no se preocupe, es probable que suceda tarde o temprano, así que para comprender mejor el tema vamos a hacer un pequeño proyecto divertido con Arduino y OLED y desmitificar las siguientes cosas:
- Concepto básico del código QR.
- Cómo funciona.
- Cómo hacer tu propio código QR usando Arduino.
- Y finalmente, muéstrelo en una pantalla OLED (SSD1306).
Entonces, ¿qué es este código QR de todos modos?
El código QR (código de respuesta rápida) es un código 2D de matriz para leer datos a alta velocidad, desarrollado por DENSO WAVE en 1994 para la industria automotriz de Japón. Un código QR comprime los datos de manera muy eficiente en comparación con el código de barras estándar, para lograr esto utiliza cuatro modos de codificación estandarizados (numérico, alfanumérico, byte / binario y kanji), la tecnología se hizo de "código abierto", es decir, disponible para todos, por lo que ganó popularidad muy rápidamente.Las ventajas significativas de los códigos QR sobre los códigos de barras convencionales son una mayor capacidad de datos y una alta tolerancia a fallas.
¿Cómo funciona el código QR?
Los códigos QR (y otros códigos de matriz de datos) están diseñados para ser leídos por herramientas especiales, no por humanos, por lo que solo hay una cantidad específica que podemos entender al estudiar visualmente, aunque cada código es diferente de varias maneras, aunque contienen algunos elementos comunes interesantes. características observando el código QR de circuitdigest.com estudiaremos algunas de ellas
- Patrones del buscador: los cuadros cuadrados grandes con un cuadro sólido en el interior en las tres esquinas del código facilitan la confirmación de que se trata de un código QR, ya que solo hay tres de ellos, por lo que es bastante obvio de qué manera está orientado el código.
- Patrón de alineación: esto asegura que cualquiera que sea la orientación, el código puede ser legible.
- Patrón de tiempo: esto se ejecuta horizontal y verticalmente entre los tres patrones del buscador , usando estas líneas el lector puede determinar el tamaño del código.
- Información de la versión: Actualmente hay 40 versiones diferentes del código QR estándar, esta sección del código determina la versión del código QR que se está utilizando, para la versión de marketing 1-7 que se usa normalmente.
- Información de formato: los socios de formato tienen información sobre la tolerancia a errores y el enmascaramiento de datos.
- Área de datos: esta sección del código contiene todos los elementos de datos y el código de corrección de errores.
- Zona de salida: el espacio en cada código QR es obligatorio para diferenciar el código de su entorno.
La imagen a continuación le dará una idea clara sobre el código.
Otras secciones del código son datos y código de redundancia.
Hay una serie de otras características y temas complicados que no discutiré en este tutorial. Si desea leer más detalles sobre el código QR, siga este tutorial de código QR de Tan Jin Soon, EPCglobal Singapore Council. Revista de síntesis, 2008.
La especificación del código QR
Tamaño del símbolo |
Min. Celda 21x21 - Máx. 177x177 celdas (con intervalo de 4 celdas) |
|
Tipo y volumen de información |
Caracteres numéricos |
7.089 caracteres como máximo |
Alfabetos, Signos |
4.296 caracteres como máximo |
|
Binario (8 bits) |
2.953 caracteres como máximo |
|
Caracteres Kanji |
1.817 caracteres como máximo |
|
Eficiencia de conversión |
Modo de caracteres numéricos |
3.3 celdas / carácter |
Modo alfanumérico / signos |
5.5 celdas / carácter |
|
Modo binario (8 bits) |
8 celdas / carácter |
|
Modo de caracteres kanji (13 bits) |
13 celdas / carácter |
|
Error de corrección funcionalidad |
Nivel L |
Aprox. 7% del área del símbolo restaurada al máximo |
Nivel M |
Aprox. 15% del área del símbolo restaurada al máximo |
|
Nivel Q |
Aprox. 25% del área del símbolo restaurada al máximo |
|
Nivel H |
Aprox. 30% del área del símbolo restaurada al máximo |
|
Vinculación de funcionalidad |
Posible dividir en 16 símbolos como máximo |
Generando su propio código QR
Siga los pasos que se mencionan a continuación para generar su propio código QR, en este ejemplo, vamos a hacer un código QR de nuestro querido sitio web Circuit Digest
Para generar un código QR ve a este sitio web y si miras la parte superior del sitio web puedes ver una lista de opciones, en este tutorial estamos generando un código QR para una URL, así que vamos a
- Haga clic en la pestaña URL y pegue la URL del resumen del circuito en la sección Ingresar URL.
- Haga clic en guardar.
- Dé un nombre de archivo para el archivo de salida.
- Seleccione PNG como nuestro formato de archivo preferido.
- y haga clic en guardar.
La imagen a continuación le dará una idea clara sobre el proceso.
Nuestro microcontrolador más querido, "Arduino", no es lo suficientemente inteligente como para simplemente compilar la imagen PNG sin procesar y mostrarla en la pantalla OLED. Entonces, para mostrar el código QR al OLED, debemos seguir algunos pasos simples y convertir la imagen PNG en una matriz de mapa de bits legible por Arduino. Esta conversión la hemos realizado anteriormente al interconectar SSD1306 OLED con Arduino y al interconectar LCD gráfico con Arduino. También conectamos SSD1306 OLED con Raspberry Pi, ESP32, NodeMCU y muchos otros microcontroladores. La conversión de matriz de mapa de bits se puede realizar en dos pasos a continuación:
- Conversión del formato PNG a BMP.
- Convierta la imagen BMP en una matriz de códigos HEX.
Conversión del formato PNG a BMP
Para convertir la imagen PNG descargada a una imagen BMP, vaya a este sitio web y en la sección de conversión de imágenes y
- Haga clic en el menú desplegable y seleccione
- Convierta a BMP
- Haga clic en Ir
La imagen a continuación le dará una idea clara sobre el proceso:
Se le presentará una nueva página que se parece a la siguiente imagen:
- Haga clic en la pestaña Elegir archivos y seleccione la imagen descargada
- En la configuración opcional, escriba el tamaño deseado en el panel (estamos usando un OLED de 128x64)
- Haga clic en el botón Iniciar conversión
Se le presentará la siguiente página y, después de unos segundos, su imagen convertida se descargará si la descarga no se inicia automáticamente, haga clic en la opción de descargar su archivo:
¡Excelente! Ahora tenemos nuestro archivo BMP, es hora de convertirlo en una matriz de códigos HEX legibles por un Arduino.
Convierta la imagen BMP en una matriz de códigos HEX
Para convertir la imagen BMP descargada en una matriz HEX, vaya a este sitio web y haga clic en Herramientas -> image2cpp
La imagen a continuación le dará una idea clara sobre el proceso.
Se le presentará una pantalla que tiene cuatro opciones y las discutiremos en detalle
- Seleccionar imagen
- Configuración de imagen
- Avance
- Salida
Seleccionar sección de imagen
En esta sección seleccionaremos la imagen que acabamos de convertir a BMP:
Sección de configuración de imagen
En esta sección, estableceremos el tamaño del lienzo, el color de fondo, la escala y las opciones de centro a nuestro valor requerido.
- Tamaño del lienzo (lo configuramos en 128x64 porque estamos usando un OLED con una densidad de píxeles de 128x64).
- En esta sección, podemos configurar el color de fondo del OLED (lo elegimos para que sea blanco).
- La escala se establece en el tamaño original.
- Finalmente, en la opción del centro haga clic en las casillas de verificación horizontal y vertical, esto hará que la imagen aparezca en el centro.
La imagen de abajo te dará una idea clara.
Sección de vista previa
En la sección de vista previa podemos ver una vista previa clara de la imagen que se mostrará en el OLED como se muestra a continuación:
Sección de salida
En la sección de salida generaremos y copiaremos el código generado, para ello sigue los siguientes pasos:
- Formato de salida del código (lo configuramos como código Arduino porque estamos usando uno).
- Identificador (esta opción establece el nombre de la matriz generada, lo dejamos por defecto como está).
- Modo de dibujo (establecemos la opción de modo de dibujo en horizontal).
- Y finalmente, hacemos clic en el botón generar código, esto generará el código de salida final.
La imagen de abajo te dará una idea clara.
Diagrama de circuito
La siguiente imagen muestra las conexiones de interfaz entre Arduino Nano y SSD1306:
Pin Nano Arduino |
PIN OLED |
GND |
GND |
3,3 V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Explicación del código
Para mostrar la imagen en el OLED necesitamos la ayuda de una biblioteca Arduino, que se puede descargar desde este repositorio de GitHub. Descargue la versión U8glib-1.19.1.zip de la biblioteca e impórtela en el IDE de Arduino. Si eres nuevo en Arduino, usa la ayuda de este enlace que describe cómo importar una biblioteca. En la siguiente sección modificaremos el código para mostrar la matriz HEX generada previamente en el OLED. El código completo con un video funcional se encuentra al final de este artículo. La explicación detallada del código se proporciona a continuación.
Primero, incluya la biblioteca descargada.
#include "U8glib.h" // incluida la biblioteca U8glib
Luego defina todos los pines necesarios para 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: OLED_CSS_PIN 8 // Pin digital Arduino D13: ICP1
Inicialice la biblioteca u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Luego incluye la matriz de imágenes 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, 0xffx, 0xff, 0xff, 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, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xf, 0x8x, 0xf3, 0xff, 0xf08x33, 0xff 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, 0xcff, 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, 0x1x33, 0x98 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, …….. ………..
La función de dibujo se utiliza para dibujar la imagen de mapa de bits (código QR) en OLED con la ayuda de la función u8g.drawBitmapP.
void draw (void) {// Los comandos gráficos para volver a dibujar la pantalla completa deben colocarse aquí u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Finalmente, en la función loop () , llame a todos los procedimientos necesarios para construir la imagen en OLED
bucle vacío () {u8g.firstPage (); // Una llamada a este procedimiento, marca el comienzo del ciclo de imagen. hacer {dibujar (); } while (u8g.nextPage ()); // Una llamada a este procedimiento, marca el final del cuerpo del bucle de imagen. // reconstruir la imagen después de algún retraso delay (1000); }
Después de completar el código, conecte el Arduino en el puerto USB de su computadora, seleccione su puerto COM y cargue el código. Si ha hecho todo correctamente, tendrá una pantalla de trabajo con un código QR en OLED.
Espero que te haya gustado este proyecto y hayas disfrutado aprendiendo algo nuevo, sigue leyendo sigue aprendiendo y nos vemos la próxima vez.