ESP32-CAM: Считыватель/Сканер QR-кодов (Arduino IDE)

Узнайте, как создать считыватель/сканер QR-кодов с помощью платы ESP32-CAM, программируемой в Arduino IDE. ESP32-CAM постоянно использует свою камеру для сканирования новых QR-кодов с помощью библиотеки ESP32QRCodeReader и модифицированной версии библиотеки quirc. Когда обнаруживается валидный QR-код, данные выводятся в Serial Monitor.

ESP32-CAM Считыватель/Сканер QR-кодов Arduino IDE

Обзор проекта

Вот краткий обзор того, как работает проект.

Обзор проекта сканера QR-кодов ESP32-CAM
  • ESP32-CAM постоянно сканирует новые QR-коды

  • Когда обнаруживается валидный QR-код, его данные выводятся в Arduino IDE Serial Monitor

Этот проект можно использовать для системы учёта посещений по билетам, для отслеживания продукции, в качестве системы доступа — проверка QR-кодов для разблокировки дверей или шкафчиков, и для многих других применений.

Необходимые компоненты

Мы будем использовать плату ESP32-CAM с маркировкой AI-Thinker, но другие модули тоже должны работать при правильном назначении пинов в коде. Другой пример — Freenove ESP32-Wrover CAM Board.

Плата ESP32-CAM — это устройство стоимостью около $9 (или дешевле), которое объединяет чип ESP32-S, камеру OV2640, слот для microSD-карты и несколько GPIO-пинов.

Плата ESP32-CAM с камерой OV2640, слотом для microSD и GPIO-пинами

Для выполнения этого урока вам понадобятся следующие компоненты:

Для знакомства с ESP32-CAM вы можете пройти следующие уроки:

Подготовка Arduino IDE

Мы будем программировать плату ESP32 с помощью Arduino IDE. Поэтому вам нужна установленная Arduino IDE, а также дополнение для ESP32. Вы можете следовать следующему руководству для установки дополнения ESP32, если вы ещё этого не сделали:

Установка библиотеки ESP32QRCodeReader

Для этого урока мы будем использовать библиотеку ESP32QRCodeReader от Alvarowolfx, которая упрощает чтение QR-кодов с помощью платы ESP32-CAM.

Затем в Arduino IDE перейдите в Sketch > Include Library > Add .ZIP library и установите библиотеку, которую вы только что скачали по предыдущей ссылке.

Arduino установка библиотеки через Sketch Include Library Add ZIP library

Код — ESP32-CAM считыватель/сканер QR-кодов

Скопируйте код сканера QR-кодов в вашу Arduino IDE.

/*********
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-qr-code-reader-scanner-arduino/
*********/

#include <Arduino.h>
#include <ESP32QRCodeReader.h>

// FOR THIS PROJECT, YOUR ESP32-CAM NEEDS TO HAVE PSRAM.
// Some of the compatible boards: CAMERA_MODEL_AI_THINKER | CAMERA_MODEL_WROVER_KIT | CAMERA_MODEL_ESP_EYE
// CAMERA_MODEL_M5STACK_PSRAM | CAMERA_MODEL_M5STACK_V2_PSRAM | CAMERA_MODEL_M5STACK_WIDE
ESP32QRCodeReader reader(CAMERA_MODEL_AI_THINKER);

void onQrCodeTask(void *pvParameters) {
  struct QRCodeData qrCodeData;

  while (true) {
    if (reader.receiveQrCode(&qrCodeData, 100)) {
      Serial.println("Scanned new QRCode");
      if (qrCodeData.valid) {
        Serial.print("Valid payload: ");
        Serial.println((const char *)qrCodeData.payload);
      }
      else {
        Serial.print("Invalid payload: ");
        Serial.println((const char *)qrCodeData.payload);
      }
    }
    vTaskDelay(100 / portTICK_PERIOD_MS);
  }
}

void setup() {
  Serial.begin(115200);
  Serial.println();

  reader.setup();
  Serial.println("Setup QRCode Reader");

  reader.beginOnCore(1);
  Serial.println("Begin on Core 1");

  xTaskCreate(onQrCodeTask, "onQrCode", 4 * 1024, NULL, 4, NULL);
}

void loop() {
  delay(100);
}

Просмотреть исходный код

Как работает код

Код начинается с подключения необходимых библиотек для выполнения сканирования QR-кодов с помощью платы ESP32-CAM:

#include <Arduino.h>
#include <ESP32QRCodeReader.h>

Затем создаётся объект с именем reader для сканера QR-кодов. В этом руководстве мы используем модель AI-Thinker ESP32-CAM.

// FOR THIS PROJECT, YOUR ESP32-CAM NEEDS TO HAVE PSRAM.
// Some of the compatible boards: CAMERA_MODEL_AI_THINKER | CAMERA_MODEL_WROVER_KIT | CAMERA_MODEL_ESP_EYE
// CAMERA_MODEL_M5STACK_PSRAM | CAMERA_MODEL_M5STACK_V2_PSRAM | CAMERA_MODEL_M5STACK_WIDE

ESP32QRCodeReader reader(CAMERA_MODEL_AI_THINKER);

Примечание: ваша плата должна иметь PSRAM. Этот код был протестирован и должен быть совместим со следующими версиями плат ESP32-CAM:

  • CAMERA_MODEL_AI_THINKER

  • CAMERA_MODEL_WROVER_KIT

  • CAMERA_MODEL_ESP_EYE

  • CAMERA_MODEL_M5STACK_PSRAM

  • CAMERA_MODEL_M5STACK_V2_PSRAM

  • CAMERA_MODEL_M5STACK_WIDE

setup()

В функции setup() начинаем с инициализации последовательной связи на скорости 115200 бод для отладки.

void setup() {
  Serial.begin(115200);
  Serial.println();

Функция reader.setup() запускает оборудование камеры с использованием настроек по умолчанию библиотеки для платы AI-Thinker или другой платы, которую вы выбрали.

reader.setup();
Serial.println("Setup QRCode Reader");

Считыватель камеры будет работать на ядре CPU 1 (у чипа ESP32 два ядра).

reader.beginOnCore(1);
Serial.println("Begin on Core 1");

Наконец, создаём задачу FreeRTOS для запуска функции onQrCodeTask. Это позволяет продолжить работу сканера QR-кодов в фоновом режиме.

xTaskCreate(onQrCodeTask, "onQrCode", 4 * 1024, NULL, 4, NULL);

onQrCodeTask()

В функции onQrCodeTask она постоянно сканирует новые QR-коды с помощью while (true) и когда обнаруживает валидный QR-код, выводит данные в Serial Monitor.

void onQrCodeTask(void *pvParameters) {
  struct QRCodeData qrCodeData;

  while (true) {
    if (reader.receiveQrCode(&qrCodeData, 100)) {
      Serial.println("Scanned new QRCode");
      if (qrCodeData.valid) {
        Serial.print("Valid payload: ");
        Serial.println((const char *)qrCodeData.payload);
      }
      else {
        Serial.print("Invalid payload: ");
        Serial.println((const char *)qrCodeData.payload);
      }
    }
    vTaskDelay(100 / portTICK_PERIOD_MS);
  }
}

Загрузка кода в ESP32-CAM AI-Thinker с помощью ESP32-CAM-MB USB Programmer

Чтобы загрузить код в плату ESP32-CAM, подключите ESP32-CAM-MB micro USB programmer к вашей плате (вы можете узнать, как это работает, прочитав это руководство).

ESP32-CAM-MB Micro USB Programmer CH340G Serial Chip OV2640 Camera

Затем подключите плату к компьютеру с помощью USB-кабеля.

После этого в Arduino IDE перейдите в Tools > Board и выберите AI-Thinker ESP32-CAM. Или найдите эту плату в верхней строке поиска. У вас должно быть установлено дополнение ESP32. В противном случае эта плата не появится в меню Boards.

Выбор AI-Thinker ESP32-CAM в Arduino IDE

Перейдите в Tools > Port и выберите COM-порт, к которому подключена ESP32-CAM.

Примечание: если плата не отображается, это означает, что у вас, вероятно, не установлены драйверы CH340C. Поищите в Google «CH340C drivers» вместе с названием вашей операционной системы и установите драйверы.

Наконец, нажмите кнопку Upload в Arduino IDE.

Загрузка программы в ESP32-CAM через Arduino IDE

Вот и всё! Ваш код сканера QR-кодов должен работать на ESP32-CAM.

Демонстрация

После загрузки кода откройте Serial Monitor на скорости 115200 бод. Нажмите кнопку сброса ESP32-CAM. Должна произойти инициализация сканера QR-кодов. Проверьте окно Serial Monitor Arduino IDE, чтобы убедиться, что всё работает как ожидается.

ESP32-CAM сканер QR-кодов — успешный старт в Arduino IDE

Наведите ESP32-CAM на QR-код. Вот пример QR-кода с данными https://randomnerdtutorials.com/.

Пример QR-кода RandomNerdTutorials.com Тестирование сканера QR-кодов ESP32-CAM

Данные полезной нагрузки (payload) должны быть выведены в Serial Monitor Arduino IDE:

Демонстрация сканера QR-кодов ESP32-CAM в Serial Monitor

Если в Serial Monitor Arduino IDE вы постоянно получаете сообщение:

Invalid payload: ECC failure

Вам может потребоваться использовать QR-код меньшего размера, стабилизировать камеру и направить её непосредственно на QR-код при лучших условиях освещения.

ESP32-CAM имеет некоторые ограничения по разрешению и плохо справляется с движением, поэтому необходимо стабильно направлять камеру на QR-код. Кроме того, распознавание QR-кодов может быть затруднено при плохих условиях освещения — как при слишком ярком, так и при слишком тёмном свете.

Устранение неполадок и советы

Как мы уже упоминали ранее, этот сканер QR-кодов использует много памяти, поэтому ваша ESP32-CAM должна иметь PSRAM. Вот некоторые платы, которые были протестированы и должны работать с этим примером:

  • CAMERA_MODEL_AI_THINKER

  • CAMERA_MODEL_WROVER_KIT

  • CAMERA_MODEL_ESP_EYE

  • CAMERA_MODEL_M5STACK_PSRAM

  • CAMERA_MODEL_M5STACK_V2_PSRAM

  • CAMERA_MODEL_M5STACK_WIDE

Если вы получаете какие-либо из следующих ошибок, прочитайте наше руководство ESP32-CAM Troubleshooting Guide: Most Common Problems Fixed:

  • Failed to connect to ESP32: Timed out waiting for packet header

  • Camera init failed with error 0x20001 или аналогичная

  • Brownout detector или Guru meditation error

  • Sketch too big error — Wrong partition scheme selected

  • Board at COMX is not available — COM Port Not Selected

  • Psram error: GPIO isr service is not installed

Заключение

Мы надеемся, что вы нашли этот урок полезным и сможете использовать его в своих проектах. Если у вас нет платы ESP32-CAM, вы можете нажать здесь, чтобы приобрести.

Как уже упоминалось, у нас есть другие уроки с ESP32-CAM, которые могут вам понравиться: