Membuat Pembaca (Scanner) Kode QR Menggunakan ESP32-CAM dan Arduino IDE

ESP32-CAM merupakan salah satu papan mikrokontroler berbasis ESP32 yang telah dilengkapi dengan kamera. Selain dapat digunakan untuk mengambil gambar dan melakukan streaming video, modul ini juga mampu melakukan pemrosesan citra sederhana, salah satunya adalah membaca atau memindai kode QR (QR Code). Pada tutorial ini, Anda akan mempelajari cara membuat sistem pemindai kode QR menggunakan ESP32-CAM yang diprogram melalui Arduino IDE. Kamera pada ESP32-CAM akan bekerja secara terus-menerus untuk mendeteksi kode QR yang berada di depannya. Ketika kode QR berhasil dikenali, data yang tersimpan di dalamnya akan ditampilkan pada Serial Monitor. Proyek ini memanfaatkan library ESP32QRCodeReader yang telah dimodifikasi agar dapat bekerja dengan baik pada modul ESP32-CAM.

Instalasi Library ESP32QRCodeReader

Sebelum memulai pemrograman, langkah pertama yang harus dilakukan adalah menginstal library ESP32QRCodeReader. Library ini dikembangkan oleh Alvarowolfx dan dirancang khusus untuk mempermudah proses pembacaan kode QR menggunakan ESP32-CAM. Unduh library tersebut terlebih dahulu, kemudian lakukan instalasi melalui Arduino IDE dengan langkah berikut:

Sketch → Include Library → Add .ZIP Library

Selanjutnya, pilih file ZIP library yang telah diunduh dan tunggu hingga proses instalasi selesai.

Program Pemindai Kode QR ESP32-CAM

Salin dan unggah kode berikut ke Arduino IDE.

 

#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);

}


Cara Kerja Program

1. Menambahkan Library yang Dibutuhkan

Program diawali dengan menyertakan library yang diperlukan untuk menjalankan fungsi pembacaan kode QR pada ESP32-CAM.

 

#include <Arduino.h>

#include <ESP32QRCodeReader.h>


Library Arduino.h digunakan untuk menyediakan fungsi dasar Arduino, sedangkan ESP32QRCodeReader.h digunakan untuk mengakses fitur pemindaian kode QR.


2. Membuat Objek Pembaca QR Code

Selanjutnya dibuat sebuah objek bernama reader yang akan menangani seluruh proses pengambilan gambar dan deteksi kode QR.

 

ESP32QRCodeReader reader(CAMERA_MODEL_AI_THINKER);


Pada contoh ini digunakan modul AI-Thinker ESP32-CAM. Jika menggunakan jenis ESP32-CAM lain, sesuaikan parameter model kamera yang digunakan.

Board yang Didukung

Program ini memerlukan modul ESP32-CAM yang telah dilengkapi PSRAM (Pseudo Static RAM) karena proses pemrosesan gambar membutuhkan memori tambahan.

Fungsi setup()

Fungsi setup() dijalankan satu kali saat ESP32-CAM pertama kali dinyalakan atau setelah tombol reset ditekan.

1. Inisialisasi Serial Monitor

Baris berikut digunakan untuk memulai komunikasi serial dengan baud rate 115200.

 

Serial.begin(115200);


Serial Monitor akan digunakan untuk menampilkan hasil pemindaian kode QR serta pesan debugging selama program berjalan.

2. Inisialisasi Kamera

Perintah berikut digunakan untuk mengaktifkan kamera dan mengonfigurasi parameter dasar yang diperlukan oleh library.

 

reader.setup();


Jika proses berhasil, pesan berikut akan muncul pada Serial Monitor "Setup QRCode Reader"

Menjalankan Pemindai pada Core 1

ESP32 memiliki dua inti prosesor (dual-core), yaitu Core 0 dan Core 1. Pada program ini, proses pembacaan kamera dijalankan pada Core 1 menggunakan perintah berikut:

 

reader.beginOnCore(1);


Dengan cara ini, proses pemindaian dapat berjalan lebih stabil tanpa mengganggu tugas lain yang dijalankan oleh mikrokontroler.

Membuat Task FreeRTOS

ESP32 menggunakan sistem operasi ringan bernama FreeRTOS yang memungkinkan beberapa tugas berjalan secara bersamaan. Task untuk membaca kode QR dibuat menggunakan fungsi berikut:

 

xTaskCreate(

  onQrCodeTask,

  "onQrCode",

  4 * 1024,

  NULL,

  4,

  NULL

);


Task ini akan terus berjalan di latar belakang dan memeriksa keberadaan kode QR secara berulang.

Fungsi onQrCodeTask()

Fungsi ini merupakan bagian utama yang bertanggung jawab untuk melakukan proses pemindaian.

 

void onQrCodeTask(void *pvParameters)


Pertama, dibuat sebuah struktur data untuk menyimpan hasil pembacaan QR Code.

 

struct QRCodeData qrCodeData;


Kemudian program menjalankan perulangan tanpa henti menggunakan:

 

while (true)


Di dalam perulangan tersebut, ESP32-CAM akan terus menangkap gambar dan memeriksa apakah terdapat kode QR yang dapat dikenali.

 

reader.receiveQrCode(&qrCodeData, 100)


Apabila kode QR berhasil dideteksi, program akan menampilkan pesan "Scanned new QRCode".


Memeriksa Validitas QR Code

Setelah kode QR ditemukan, program akan memeriksa apakah data yang dibaca valid atau tidak.

 

if (qrCodeData.valid)


Jika valid, data yang tersimpan di dalam QR Code akan ditampilkan ke Serial Monitor.

 

Serial.print("Valid payload: ");

Serial.println((const char *)qrCodeData.payload);


Sebaliknya, apabila terjadi kesalahan pembacaan, program akan menampilkan informasi bahwa payload tidak valid.

 

Serial.print("Invalid payload: ");

Serial.println((const char *)qrCodeData.payload);


Mengurangi Beban Prosesor

Pada akhir perulangan terdapat fungsi:

 

vTaskDelay(100 / portTICK_PERIOD_MS);


Perintah ini memberikan jeda selama 100 ms sebelum proses pemindaian berikutnya dilakukan. Tujuannya adalah mengurangi penggunaan CPU secara berlebihan dan menjaga kestabilan sistem.

Mengunggah Program ke ESP32-CAM

Untuk mengunggah program, gunakan modul programmer ESP32-CAM-MB atau USB-to-TTL yang kompatibel.

1. Pasang ESP32-CAM pada programmer, kemudian hubungkan ke komputer menggunakan kabel USB.

2. Selanjutnya buka Arduino IDE dan pilih board Tools → Board → AI Thinker ESP32-CAM.

 


3. Kemudian pilih port COM yang sesuai melalui menu Tools → Port.

4. Jika Port Tidak Muncul

Apabila port tidak muncul pada Arduino IDE, kemungkinan driver USB belum terinstal.

Sebagian besar programmer ESP32-CAM menggunakan chip USB-to-Serial CH340C, sehingga Anda perlu menginstal driver CH340C sesuai dengan sistem operasi yang digunakan.

Mengunggah Program

Setelah konfigurasi selesai, klik tombol Upload pada Arduino IDE.



Tunggu hingga proses kompilasi dan pengunggahan selesai tanpa error.

Pengujian Sistem Pemindai QR Code

1. Setelah program berhasil diunggah, buka Serial Monitor dan atur baud rate menjadi 115200.

2. Tekan tombol RST (Reset) pada ESP32-CAM.

3. Jika proses inisialisasi berhasil, Serial Monitor akan menampilkan pesan status bahwa sistem pembaca QR Code telah aktif.

Mencoba Memindai QR Code

1. Arahkan kamera ESP32-CAM ke sebuah kode QR.

2. Apabila kode QR berhasil dikenali, isi data yang tersimpan di dalam QR Code akan ditampilkan pada Serial Monitor.

Mengatasi QR Code yang Sulit Terbaca

Dalam beberapa kondisi, ESP32-CAM mungkin mengalami kesulitan membaca kode QR. Hal ini biasanya disebabkan oleh beberapa faktor, seperti ukuran QR Code terlalu besar atau terlalu kecil, kamera bergerak saat proses pemindaian, jarak kamera terlalu dekat atau terlalu jauh, kondisi pencahayaan kurang memadai, dan permukaan QR Code tidak rata atau buram. Agar proses pemindaian lebih akurat, pastikan kamera menghadap langsung ke QR Code, posisi kamera stabil dan tidak bergetar, pencahayaan cukup serta tidak terlalu terang, QR Code tercetak dengan kualitas yang baik, dan jarak kamera terhadap QR Code berada dalam fokus kamera. Karena keterbatasan resolusi dan kemampuan pemrosesan gambar pada ESP32-CAM, kondisi pencahayaan dan kestabilan kamera sangat berpengaruh terhadap keberhasilan pembacaan QR Code.

Posting Komentar

0 Komentar