Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Esp32 cam QR code decoding failed error #124

Open
shaaahan opened this issue Jun 23, 2022 · 0 comments
Open

Esp32 cam QR code decoding failed error #124

shaaahan opened this issue Jun 23, 2022 · 0 comments

Comments

@shaaahan
Copy link

shaaahan commented Jun 23, 2022

Hey! I am using this library with my own sketch and everything seemed to work well the first few times but now it always shows a "Decoding Failed" error every time I try to decode a Qr code. As I am not a pro in Arduino, can someone direct me to where my mistake is?

Note: I once tried to establish a com between Esp32 and the cam module does that happen to be a problem? Also, the cam module once fell from my hand. But the camera is working pretty fine.

This is my code ----

`
/* ======================================== Including the libraries. /
#include "esp_camera.h"
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "quirc.h"
/
======================================== */

// creating a task handle
TaskHandle_t QRCodeReader_Task;

/* ======================================== Select camera model */

#define CAMERA_MODEL_AI_THINKER

/* ======================================== */

/* ======================================== GPIO of camera models */

#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

/* ======================================== Variables declaration */
struct QRCodeData
{
bool valid;
int dataType;
uint8_t payload[1024];
int payloadLen;
};

struct quirc *q = NULL;
uint8_t image = NULL;
camera_fb_t * fb = NULL;
struct quirc_code code;
struct quirc_data data;
quirc_decode_error_t err;
struct QRCodeData qrCodeData;
String QRCodeResult = "";
/
======================================== */

/* ________________________________________________________________________________ VOID SETTUP() */
void setup() {

// Disable brownout detector.
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

/* ---------------------------------------- Init serial communication speed (baud rate). /
Serial.begin(112500);
Serial.setDebugOutput(true);
Serial.println();
/
---------------------------------------- */

/* ---------------------------------------- Camera configuration. */
Serial.println("Start configuring and initializing the camera...");
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 = 10000000;
config.pixel_format = PIXFORMAT_GRAYSCALE;
config.frame_size = FRAMESIZE_QVGA;
config.jpeg_quality = 15;
config.fb_count = 1;

#if defined(CAMERA_MODEL_ESP_EYE)
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#endif

esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
ESP.restart();
}

sensor_t * s = esp_camera_sensor_get();
s->set_framesize(s, FRAMESIZE_QVGA);

Serial.println("Configure and initialize the camera successfully.");
Serial.println();
/* ---------------------------------------- */

/* ---------------------------------------- create "QRCodeReader_Task" using the xTaskCreatePinnedToCore() function /
xTaskCreatePinnedToCore(
QRCodeReader, /
Task function. /
"QRCodeReader_Task", /
name of task. /
10000, /
Stack size of task /
NULL, /
parameter of the task /
1, /
priority of the task /
&QRCodeReader_Task, /
Task handle to keep track of created task /
0); /
pin task to core 0 /
/
---------------------------------------- /
}
/
________________________________________________________________________________ /
void loop() {
delay(100);
}
/
________________________________________________________________________________ */

/* ________________________________________________________________________________ The function to be executed by "QRCodeReader_Task" /
// This function is to instruct the camera to take or capture a QR Code image, then it is processed and translated into text.
void QRCodeReader( void * pvParameters ){
/
---------------------------------------- /
Serial.println("QRCodeReader is ready.");
Serial.print("QRCodeReader running on core ");
Serial.println(xPortGetCoreID());
Serial.println();
/
---------------------------------------- */

/* ---------------------------------------- Loop to read QR Code in real time. */
while(1){
q = quirc_new();
if (q == NULL){
Serial.print("can't create quirc object\r\n");
continue;
}

  fb = esp_camera_fb_get();
  if (!fb)
  {
    Serial.println("Camera capture failed");
    continue;
  }   
  
  quirc_resize(q, fb->width, fb->height);
  image = quirc_begin(q, NULL, NULL);
  memcpy(image, fb->buf, fb->len);
  quirc_end(q);
  
  int count = quirc_count(q);
  if (count > 0) {
    quirc_extract(q, 0, &code);
    err = quirc_decode(&code, &data);

    if (err){
      Serial.println("Decoding FAILED");
      QRCodeResult = "Decoding FAILED";
    } else {
      Serial.printf("Decoding successful:\n");
      dumpData(&data);
    } 
    Serial.println();
  } 
  
  esp_camera_fb_return(fb);
  fb = NULL;
  image = NULL;  
  quirc_destroy(q);

}
/* ---------------------------------------- /
}
/
________________________________________________________________________________ */

/* ________________________________________________________________________________ Function to display the results of reading the QR Code on the serial monitor. */
void dumpData(const struct quirc_data *data)
{
Serial.printf("Version: %d\n", data->version);
Serial.printf("ECC level: %c\n", "MLHQ"[data->ecc_level]);
Serial.printf("Mask: %d\n", data->mask);
Serial.printf("Length: %d\n", data->payload_len);
Serial.printf("Payload: %s\n", data->payload);

QRCodeResult = (const char *)data->payload;
}
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant