Utilize o ESP32-CAM como leitor de QR Code Deixe um comentário

Neste tutorial você verá como é possível utilizar o ESP32-CAM como leitor de QR Code.

Todos os dias nós observamos ao nosso redor diversas trocas de informações entre os dispositivos e o meio físico auxiliando o homem no dia-a-dia. Um exemplo disso é o código de barras que é utilizado nos supermercados, onde o operador de caixa não precisa digitar qual produto a pessoa levará, ela apenas escaneia o código de barras que denomina aquele produto. 

Figura 1 – ESP32 CAM e Conversor USB

Além do código de barras existem também o QR Code que permite uma ampla possibilidade de uso, concedendo mais informações do que o código de barras. Através deste tutorial poderá utilizar o ESP32-CAM para realizar leituras de QR Code dando a possibilidade de você utilizá-lo para aprimorar seus projetos.

Se interessou? Então continue lendo!

Material necessário

O que é o QR Code?

Basicamente o QR Code é uma evolução do código de barras. Ele é formado por meio de um gráfico 2D, diferente do código de barras que é utiliza apenas a horizontal o QR Code por sua vez, utiliza a horizontal e vertical no qual lhe dá a possibilidade de entregar mais informações.

Funcionamento do Circuito

O circuito é composto pelo ESP32 CAM juntamente com o Conversor USB TTL. O conversor USB será utilizado apenas para fazer a gravação no ESP32 CAM. Após carregar o código para a placa é possível utilizar uma fonte externa para alimentação do ESP respeitando a tensão contínua de 5V.

Depois de carregado o código no módulo, o ESP32 CAM aguardará que você aproxime um QR Code na frente da câmera. Após aproximar o código, as informações contidas neste serão apresentadas no monitor serial da IDE do Arduino.

Figura 2 – Lendo QR Code

 Montagem do circuito

Com todos os componentes em mãos vamos à montagem do circuito. Abaixo temos o esquemático eletrônico montado em uma protoboard.

Figura 3 – Esquemático eletrônico

Obs.: o pino IO0 deve ser conectado ao GND apenas para carregar o código no ESP32 CAM.

Utilizando o ESP32 CAM com a Arduino IDE

Obs.: Caso você já tenha instalado o ESP32 na IDE do Arduino, pule esta etapa.

Na Arduino IDE vá em Arquivos > Preferências e adicione o link abaixo em “URLs Adicionais para Gerenciadores de Placas” e clique em OK.

https://dl.espressif.com/dl/package_esp32_index.json

Depois vá em Ferramentas > Placas > Gerenciador de Placas… e pesquise ESP32 e clique em instalar.

Gerenciador de placas
Figura 4 – Gerenciador de Placas Arduino

Após instalado a placa vá em Ferramentas > Placa e selecione a placa AI Thinker ESP32-CAM.

Selecionando placa para o projeto ESP32-CAM como QR Code
Figura 5 – Selecionando placa

Código

Antes de tudo, precisamos fazer a instalação de uma biblioteca para o funcionamento do código. Será necessário utilizar a biblioteca ESPIno32CAM.

Após o download descompacte os arquivos e cole na pasta de Bibliotecas do Arduino no endereço C:/Arquivos de Programas (x86)/Arduino/libraries

Com a biblioteca instalada vamos a parte do código que será carregado no ESP32.

//Bibliotecas utilizadas
#include "ESPino32CAM.h"
#include "ESPino32CAM_QRCode.h"

ESPino32CAM cam;   //Objeto para captura de imagem
ESPino32QRCode qr; //Objeto para decoficação da imagem

//Define os pinos da câmera
#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27
#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22
#define flash 4


//Variável para limitar o print no monitor serial se caso o QR Code ainda estiver na frente da câmera
int trava;

void setup() {
  
  Serial.begin(115200);
  Serial.println("Leitor de QR Code");
  //Define pino do flash
  pinMode(flash,OUTPUT);
  digitalWrite(flash,LOW);//Desliga o flash
    
  //Configura os pinos da câmera
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  config.frame_size = FRAMESIZE_VGA;  
  config.jpeg_quality = 4;
  config.fb_count = 1;
  
  esp_err_t err = esp_camera_init(&config); //Inicialização da câmera
  
  if (err != ESP_OK) {
    
    Serial.printf("O início da câmera falhou com erro 0x%x", err);//Informa erro se a câmera não for iniciada corretamente
    delay(1000);
    ESP.restart();//Reinicia o ESP
    
  }

  //Inicializa o objeto de decodificação
  qr.init(&cam);
  sensor_t *s = cam.sensor();
  s->set_framesize(s, FRAMESIZE_CIF);
  s->set_whitebal(s, true);
  
  Serial.println();
  Serial.println("Aguardando código"); 

}

void loop()
{
  unsigned long pv_time  = millis();
  camera_fb_t *fb = cam.capture(); //Captura a imagem
  if (!fb)
  {
    Serial.println("Falha na captura da imagem");
    return;
  }
  dl_matrix3du_t *rgb888, *rgb565;
  if (cam.jpg2rgb(fb, &rgb888))
  {
    rgb565 = cam.rgb565(rgb888);
  }
  cam.clearMemory(rgb888);
  cam.clearMemory(rgb565);
  dl_matrix3du_t *image_rgb;
  if (cam.jpg2rgb(fb, &image_rgb))
  {
    cam.clearMemory(fb);
        
    qrResoult res = qr.recognition(image_rgb); //Faz decodificação da imagem contendo os dados
    
    if (res.status) //Se conseguir decodificar a imagem mostra os dados na tela
    { 
      
      if(trava == 0){
       trava = 1;
       String leitura = "Código QR Lido: " + res.payload;//Variável para mostrar os dados contidos no QR Code
       Serial.println();
       Serial.println(leitura);  //Mostra os dados no monitor serial
      }
       
    }
    else{ //Se não aguarda receber código 
       
       trava = 0;
       Serial.println();
       Serial.println("Aguardando código"); 
     }
           
    }
    
  cam.clearMemory(image_rgb); //Apaga imagem para receber uma nova imagem
}

Carregando o código no ESP32 CAM

Para carregar o código no ESP32-CAM certifique-se que o pino IO0 está conectado ao GND. Então conecte o cabo do conversor no computador e selecione a porta COM que aparecerá na IDE do arduino em Ferramentas > Porta.

Após isso faça o upload do código e quando aparecer “Connecting…” aperte o botão RST que se encontra embaixo do ESP32-CAM.

Carregando código do ESP32-CAM como QR Code
Figura 6 – carregando código

Se aparecer esta imagem significa que o código foi carregado com sucesso.

Código do ESP32-CAM como QR Code carregado
Figura 7 – código carregado

Depois de carregado o código desconecte o pino IO0 do GND e aperte o botão RST novamente. Isso fará com que seu código comece a rodar no ESP32-CAM.

Abra o monitor serial e observe que aparecerá aguardando código. Aproxime um QR Code na frente da câmera e aguarde as informações aparecerem na tela.

Obs.: Você pode utilizar um site para gerar os códigos QR neste link ou um aplicativo para smartphone Android ou IOS.

Conclusão

Agora que você viu como é fácil utilizar o ESP32-CAM como leitor de QR Code, você pode usar isso ao seu favor em seus projetos, como por exemplo usar o Leitor para acionar um relé que esteja conectado a alguma carga.

Gostou de como utilizar o ESP32-CAM como leitor de QR Code? Deixe seu comentário logo abaixo. Para saber mais sobre o mundo maker, arduino entre outros dispositivos acesse o blog

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *