- Jadi, Apa Kod QR ini?
- Menjana kod QR anda sendiri
- Menukar PNG ke format BMP
- Tukarkan gambar BMP kepada pelbagai kod HEX
- Rajah Litar
- Penjelasan Kod
Kod "Tindak Balas Pantas" atau disingkat sebagai kod QR telah menjadi bahagian penting dalam kehidupan digital kami, kemungkinan anda sudah tidak sedar dengan mereka sekarang anda mungkin berkeliaran di kedai runcit tempatan anda, atau mungkin anda membaca buku kegemaran anda, atau mungkin anda membuat pembayaran dalam talian dengan Google Pay, PhonePe atau Paytm, atau melayari laman web, dll. (Saya rasa saya boleh teruskan dengan contoh ya?) dan anda kebetulan datang di seberang perkara dan pemikiran persegi yang pelik ini, apakah benda persegi ini dan jika anda belum… baik, jangan bimbang ia akan berlaku cepat atau lambat, jadi untuk memahami topik ini dengan lebih baik, kami akan melakukan projek kecil yang menyeronokkan dengan Arduino dan OLED dan nyatakan perkara berikut:
- Konsep Asas kod QR.
- Bagaimana ia berfungsi.
- Cara membuat kod QR anda sendiri menggunakan Arduino.
- Dan akhirnya, paparkannya di skrin OLED (SSD1306).
Jadi, Apa Kod QR ini?
Kod QR (Quick Response code) adalah kod matriks 2D untuk membaca data dengan kelajuan tinggi, yang dikembangkan oleh DENSO WAVE pada tahun 1994 untuk industri automotif Jepun. Kod QR memampatkan data dengan sangat cekap berbanding dengan kod bar standard, untuk mencapainya menggunakan empat mod pengekodan piawai (numerik, alfanumerik, bait / binari, dan kanji), teknologi itu dibuat "sumber terbuka" iaitu tersedia untuk semua orang jadi mendapat populariti dengan sangat cepat.Kelebihan ketara Kod QR berbanding kod bar konvensional adalah kapasiti data yang lebih besar dan toleransi kesalahan tinggi.
Bagaimana Kod QR Berfungsi?
Kod QR (dan kod matriks data lain) direka untuk dibaca oleh alat khas, bukan oleh manusia, jadi hanya ada jumlah tertentu yang dapat kita fahami dengan belajar secara visual, walaupun setiap kod berbeza dalam pelbagai cara walaupun mengandung beberapa umum yang menarik ciri dengan memerhatikan kod QR circuitdigest.com kami akan mengkaji beberapa daripadanya
- Corak Pencari: Kotak persegi besar dengan kotak padat di dalam tiga penjuru kod memudahkan untuk mengesahkan bahawa ia adalah kod QR kerana hanya ada tiga daripadanya, jadi sangat jelas bahawa cara kod itu berorientasi.
- Pola Penjajaran: Ini memastikan bahawa apa sahaja orientasi kod dapat dibaca.
- Pola Masa: Ini berjalan secara mendatar dan menegak antara tiga corak pencari , dengan menggunakan garis ini pembaca dapat menentukan ukuran kod.
- Maklumat Versi: Pada masa ini terdapat 40 versi standard kod QR yang berbeza, bahagian kod ini menentukan versi kod QR yang sedang digunakan, untuk versi pemasaran 1-7 digunakan secara normal.
- Maklumat Format: Rakan format mempunyai maklumat mengenai toleransi ralat dan penyamaran data.
- Kawasan Data: Bahagian kod ini mengandungi semua elemen data dan kod pembetulan ralat.
- Quit Zone: Jarak dalam setiap kod QR adalah wajib untuk membezakan kod dari persekitarannya.
Gambar di bawah akan memberi anda idea yang jelas mengenai kod tersebut
Bahagian lain kod adalah kod data dan redundansi.
Terdapat sebilangan besar ciri dan topik rumit yang tidak akan saya bincangkan dalam tutorial ini, jika anda ingin membaca dengan lebih terperinci mengenai kod QR, sila ikuti tutorial Kod QR ini oleh Tan Jin Soon, Majlis EPCglobal Singapura. Jurnal Sintesis, 2008.
Spesifikasi Kod QR
Saiz Simbol |
Min. Sel 21x21 - Maks. 177x177 sel (dengan selang 4 sel) |
|
Jenis dan Isipadu Maklumat |
Watak Berangka |
Maksimum 7,089 aksara |
Huruf, Tanda |
Maksimum 4,296 aksara |
|
Perduaan (8 bit) |
Maksimum 2,953 aksara |
|
Watak Kanji |
Maksimum 1,817 aksara |
|
Kecekapan penukaran |
Mod Watak Numerik |
3.3 sel / watak |
Mod Alphanumerik / Tanda |
5.5 sel / watak |
|
Mod Perduaan (8 bit) |
8 sel / watak |
|
Mod Karakter Kanji (13 bit) |
13 sel / watak |
|
Pembetulan kesilapan kefungsian |
Tingkat L |
Lebih kurang 7% kawasan simbol dipulihkan secara maksimum |
Tingkat M |
Lebih kurang 15% kawasan simbol dipulihkan secara maksimum |
|
Tahap Q |
Lebih kurang 25% kawasan simbol dipulihkan secara maksimum |
|
Aras H |
Lebih kurang 30% kawasan simbol dipulihkan secara maksimum |
|
Menghubungkan fungsi |
Kemungkinan dibahagikan kepada 16 simbol maksimum |
Menjana kod QR anda sendiri
Ikuti langkah-langkah yang dinyatakan di bawah untuk menghasilkan kod QR anda sendiri, dalam contoh ini, kami akan membuat kod QR dari laman web Circuit Digest yang kami sayangi
Untuk menghasilkan kod QR, pergi ke laman web ini dan jika anda melihat bahagian atas laman web, anda dapat melihat senarai pilihan, dalam tutorial ini kami menghasilkan kod QR untuk URL, jadi kami akan
- Klik pada tab URL dan tampal URL untuk Circuit Digest di bahagian Enter URL.
- Klik simpan.
- Beri nama fail untuk fail output.
- Pilih PNG sebagai format fail pilihan kami.
- dan klik simpan.
Gambar di bawah akan memberi anda idea yang jelas mengenai prosesnya
Mikrokontroler tersayang kami "Arduino" tidak begitu pintar sehingga hanya dapat menyusun gambar PNG mentah dan memaparkannya di paparan OLED. Jadi, untuk memaparkan kod QR ke OLED, kita perlu mengikuti beberapa langkah mudah dan menukar gambar PNG ke array bitmap yang dapat dibaca oleh Arduino. Penukaran ini telah kita lakukan sebelum ini semasa menginterface SSD1306 OLED dengan Arduino dan menghubungkan LCD Grafik dengan Arduino. Kami juga menghubungkan SSD1306 OLED dengan Raspberry Pi, ESP32, NodeMCU, dan banyak mikrokontroler lain. Penukaran array bitmap dapat dilakukan dalam dua langkah di bawah:
- Menukar PNG ke format BMP.
- Tukarkan gambar BMP kepada pelbagai kod HEX.
Menukar PNG ke format BMP
Untuk menukar gambar PNG yang dimuat ke imej BMP, pergi ke laman web ini dan di bahagian penukar gambar dan
- Klik pada menu lungsur dan pilih
- Tukarkan ke BMP
- Klik Pergi
Gambar di bawah akan memberi anda idea yang jelas mengenai prosesnya:
Anda akan disajikan dengan halaman baru seperti gambar di bawah:
- Klik pada tab Pilih Fail dan pilih gambar yang dimuat turun
- Dalam tetapan Pilihan, panel ketik ukuran yang anda inginkan (kami menggunakan OLED 128x64)
- Klik pada butang Mula penukaran
Anda akan disajikan dengan halaman berikut dan setelah beberapa saat, gambar yang anda ubah akan dimuat jika unduhan tidak bermula secara automatik, klik pada pilihan muat turun fail anda:
Hebat! Kini kami mendapat fail BMP kami untuk menukarnya menjadi pelbagai kod HEX yang dapat dibaca oleh Arduino.
Tukarkan gambar BMP kepada pelbagai kod HEX
Untuk menukar gambar BMP yang dimuat turun ke array HEX, pergi ke laman web ini dan klik pada Tools -> image2cpp
Gambar di bawah akan memberi anda idea yang jelas mengenai prosesnya
Anda akan disajikan dengan layar yang mempunyai empat pilihan dan kami akan membincangkannya secara terperinci
- Pilih gambar
- Tetapan Imej
- Pratonton
- Pengeluaran
Pilih bahagian gambar
Di bahagian ini kita akan memilih gambar yang baru saja kita ubah menjadi BMP:
Bahagian Tetapan Imej
Di bahagian ini, kami akan menetapkan ukuran kanvas, warna latar belakang, penskalaan dan pilihan pusat ke nilai yang diperlukan.
- Saiz kanvas (kami menetapkan 128x64 kerana kami menggunakan OLED dengan kepadatan piksel 128x64).
- Di bahagian ini, kita dapat menetapkan warna latar belakang OLED (kita memilihnya menjadi putih).
- Penskalaan ditetapkan pada ukuran asal.
- Akhirnya, pada pilihan tengah klik pada kotak pilihan mendatar dan menegak, ini akan menjadikan gambar muncul di tengah.
Gambar di bawah akan memberi anda idea yang jelas
Bahagian Pratonton
Di bahagian pratonton kita dapat melihat pratonton gambar yang jelas yang akan dipaparkan di OLED seperti yang ditunjukkan di bawah:
Bahagian Keluaran
Di bahagian output kita akan menghasilkan dan menyalin kod yang dihasilkan, untuk melakukannya ikuti langkah-langkah berikut:
- Format output kod (kami menetapkannya sebagai kod Arduino kerana kami menggunakannya).
- Pengecam (pilihan ini menetapkan nama untuk array yang dihasilkan, kita membiarkannya lalai sebagaimana adanya).
- Mod Draw (Kami menetapkan pilihan mod draw menjadi mendatar)
- Dan akhirnya, kita klik pada butang menghasilkan kod ini akan menghasilkan kod output akhir.
Gambar di bawah akan memberi anda idea yang jelas
Rajah Litar
Gambar di bawah menunjukkan hubungan antara antara Arduino Nano dan SSD1306:
Pin Arduino Nano |
PIN OLED |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Penjelasan Kod
Untuk menunjukkan gambar di OLED, kami memerlukan bantuan perpustakaan Arduino, yang boleh dimuat turun dari repositori GitHub ini. Muat turun versi perpustakaan U8glib-1.19.1.zip dan import di Arduino IDE. Sekiranya anda baru menggunakan Arduino, sila dapatkan pautan ini yang menerangkan cara mengimport perpustakaan. Pada bahagian di bawah ini kita akan mengubah kod untuk memaparkan array HEX yang dihasilkan sebelumnya ke OLED. Kod lengkap dengan video berfungsi diberikan pada akhir artikel ini. Penjelasan Terperinci kod diberikan di bawah.
Pertama, sertakan perpustakaan yang dimuat turun.
#masuk "U8glib.h" // termasuk perpustakaan U8glib
Kemudian tentukan semua pin yang diperlukan untuk OLED.
#define OLED_CLK_PIN 13 // Arduino Digital Pin D13: SCK #define OLED_MOSI_PIN 11 // Arduino Digital Pin D11: MOSI #define OLED_RES_PIN 10 // Arduino Digital Pin D10: SS #define OLED_SDC_PIN 9 // Arduino Digital Pin D9: OC1 OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Memulakan Perpustakaan u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Kemudian Sertakan array gambar yang dihasilkan.
const uint8_t circuitdigest PROGMEM = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0ff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1c 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0ff 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0x8f, 0x8f, 0x8f 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x81, 0x8f, 0x31,0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0x31, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0x1, 0x8f, 0x1, 0x8f, 0x 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, …….. …..0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
Fungsi Draw digunakan untuk melukis gambar bitmap (kod QR) pada OLED dengan bantuan fungsi u8g.drawBitmapP.
void draw (void) {// arahan grafik untuk melukis semula skrin yang lengkap harus diletakkan di sini u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Akhirnya, dalam fungsi loop () , panggil semua prosedur yang diperlukan untuk membina gambar di OLED
gelung kosong () {u8g.firstPage (); // Panggilan untuk prosedur ini, menandakan permulaan gelung gambar. lakukan {draw (); } sementara (u8g.nextPage ()); // Panggilan untuk prosedur ini, menandakan hujung badan gelung gambar. // bina semula gambar setelah beberapa penundaan kelewatan (1000); }
Setelah melengkapkan kod, pasangkan Arduino di port USB komputer anda, pilih port COM anda dan muat naik kodnya. Sekiranya anda telah melakukan semuanya dengan betul, anda akan mempunyai paparan yang berfungsi dengan kod QR di OLED.
Saya harap anda menyukai projek ini dan menikmati pembelajaran sesuatu yang baru, teruskan membaca terus belajar dan saya akan berjumpa dengan anda lain kali.