Сканирование QR-кодов с помощью ESP32-CAM

Сканирование QR-кодов с помощью ESP32-CAM

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

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

Готовы собрать свой собственный сканер QR-кодов? Давайте соберём необходимые компоненты и напишем код, чтобы это заработало.

Что вам понадобится

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

  • Модуль ESP32-CAM: Он будет «мозгом» вашего проекта.

  • Кабель micro USB: Для питания и программирования ESP32-CAM.

  • FTDI-адаптер или адаптер ESP32-CAM-MB (опционально): Если ваша ESP32-CAM не имеет встроенного USB-to-Serial конвертера, вам понадобится это для загрузки кода.

  • Компьютер с Arduino IDE: Вы будете использовать его для написания и загрузки кода на ESP32.

  • QR-код для сканирования: Вы можете сгенерировать его онлайн для тестирования.

При выборе платы ESP32-CAM для этого проекта важно подобрать правильный тип. Вам нужна плата, которую можно легко программировать с компьютера и запитать после этого.

ESP32-CAM с дочерней платой ESP32-CAM-MB или более новая ESP32-CAM-CH340 — хороший выбор, поскольку обе имеют USB-порт для программирования и питания. Лучше избегать «голой» платы ESP32-CAM, так как для неё нужен USB-to-Serial конвертер, которого у вас может не быть под рукой.

Подключение ESP32-CAM к компьютеру

Голый модуль ESP32-CAM, несмотря на свою мощность, не имеет встроенного USB-интерфейса для программирования и связи с компьютером. Это означает, что вам понадобится небольшая помощь для его запуска. Есть три основных варианта на выбор:

Вариант 1: ESP32-CAM + FTDI-адаптер

Если у вас есть голый модуль ESP32-CAM, вы можете использовать USB-to-serial адаптер (FTDI-адаптер) для подключения к компьютеру следующим образом:

Подключение ESP32-CAM к FTDI-адаптеру

Многие FTDI-адаптеры имеют перемычку, позволяющую выбирать между 3,3 В и 5 В. Поскольку мы запитываем ESP32-CAM от 5 В, убедитесь, что перемычка установлена на 5 В.

Обратите внимание, что вывод GPIO 0 подключён к земле. Это подключение необходимо только при программировании ESP32-CAM. После завершения программирования модуля вы должны отключить это подключение.

Запомните! Вам придётся выполнять это подключение каждый раз, когда вы хотите загрузить новый скетч.

Вариант 2: ESP32-CAM + адаптер ESP32-CAM-MB

Использование FTDI-адаптера для программирования ESP32-CAM — это немного хлопотно. Вот почему многие продавцы теперь продают плату ESP32-CAM вместе с маленькой дочерней платой под названием ESP32-CAM-MB.

Вы устанавливаете ESP32-CAM на дочернюю плату, подключаете кабель micro USB и нажимаете кнопку Upload для программирования платы. Всё так просто.

Обзор оборудования программатора ESP32-CAM-MB

Вариант 3: ESP32-CAM-CH340

Если у вас модуль ESP32-CAM-CH340, вам повезло! Этот вариант поставляется с чипом CH340 USB-to-serial прямо на плате, что исключает необходимость дополнительного оборудования. Просто подключите его к компьютеру через кабель micro USB — и вы готовы к работе.

ESP32-CAM-CH340

Имейте в виду, что вам всё равно нужно подключить вывод GPIO0 к GND при программировании, как и с FTDI-адаптером.

Настройка Arduino IDE

Независимо от выбранного варианта, настройка в Arduino IDE одинакова.

Установка платы ESP32

Для использования ESP32-CAM или любой ESP32 с Arduino IDE вы должны сначала установить плату ESP32 (также известную как ESP32 Arduino Core) через Arduino Board Manager.

Если вы ещё этого не сделали, следуйте этому руководству для установки платы ESP32:

Установка платы ESP32 в Arduino IDE

Выбор платы и порта

После установки ESP32 Arduino Core перезапустите Arduino IDE и нажмите «Select other board and port…» в верхнем выпадающем меню.

Меню выбора платы и порта в Arduino IDE 2

Появится новое окно. Найдите конкретный тип платы ESP32, который вы используете (в нашем случае это AI Thinker ESP32-CAM).

Далее выберите порт, соответствующий вашей плате ESP32-CAM. Обычно он обозначен как «/dev/ttyUSB0» (в Linux или macOS) или «COM6» (в Windows).

Выбор платы и порта ESP32-CAM в Arduino IDE 2

Вот и всё; Arduino IDE теперь настроена для ESP32-CAM!

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

Библиотека Alvaro Viebrantz — один из лучших вариантов для сканирования QR-кодов на ESP32-CAM. Она хороша тем, что автономна и работает полностью на ESP32-CAM. Но, к сожалению, библиотека отсутствует в менеджере библиотек Arduino, поэтому нам нужно установить её вручную.

Чтобы скачать библиотеку, просто нажмите на следующую ссылку:

ESP32QRCodeReader-master.zip

Теперь откройте Arduino IDE, перейдите в Sketch > Include Library > Add .ZIP library и выберите скачанный zip-файл.

Добавление ZIP-библиотеки в Arduino

Если всё прошло успешно, вы получите сообщение «Successfully installed library from ESP32QRCodeReader-master.zip archive».

Сообщение об успешной установке библиотеки ESP32QRCodeReader

Программирование ESP32-CAM

Библиотека ESP32QRCodeReader поставляется с двумя примерами. Чтобы открыть примеры скетчей, перейдите в File > Examples > ESP32QRCodeReader.

Базовый скетч библиотеки ESP32QRCodeReader

Давайте попробуем пример basic.

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

ESP32QRCodeReader reader(CAMERA_MODEL_AI_THINKER);

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

  while (true) {
    if (reader.receiveQrCode(&qrCodeData, 100)) {
      Serial.println("Found QRCode");
      if (qrCodeData.valid) {
        Serial.print("Payload: ");
        Serial.println((const char *)qrCodeData.payload);
      } else {
        Serial.print("Invalid: ");
        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-кодов

Когда будете готовы, нажмите кнопку «Upload» в Arduino IDE для передачи кода на ESP32-CAM. После завершения загрузки, если вы используете FTDI-адаптер или модуль ESP32-CAM-CH340, обязательно отключите вывод GPIO 0 от GND. Это важно для корректной работы ESP32-CAM в нормальном режиме.

Далее откройте Монитор порта в Arduino IDE и установите скорость передачи данных 115200. Чтобы ESP32-CAM начала выполнять только что загруженный код, быстро нажмите кнопку RST. Вы должны увидеть вывод, выглядящий примерно так:

Вывод сканера QR-кодов ESP32 — шаг 1

На этом этапе вы готовы сканировать QR-коды. Попробуйте этот QR-код (созданный с помощью the-qrcode-generator.com):

Образец QR-кода

Сначала вы можете увидеть сообщения типа «Found QRCode Invalid: ECC failure» в Мониторе порта. Не волнуйтесь, это нормально. Медленно перемещайте QR-код ближе к камере и дальше от неё, пока он не будет распознан правильно. Когда ESP32-CAM успешно декодирует QR-код, сообщение в Мониторе порта отобразит содержимое, закодированное в нём.

Вывод сканера QR-кодов ESP32 — шаг 2

Поздравляем, вы собрали свой собственный сканер QR-кодов!