- Więc co to właściwie jest ten kod QR?
- Generowanie własnego kodu QR
- Konwersja formatu PNG do formatu BMP
- Przekonwertuj obraz BMP na tablicę kodów HEX
- Schemat obwodu
- Objaśnienie kodu
Kod „Szybka odpowiedź” lub w skrócie kod QR stał się istotną częścią naszego cyfrowego życia, są szanse, że już je znasz podświadomie, prawdopodobnie wędrowałeś po lokalnym sklepie spożywczym, a może jesteś czytasz swoją ulubioną książkę, a może nawet dokonujesz płatności online za pomocą Google Pay, PhonePe lub Paytm, przeglądasz strony internetowe itp. (przypuszczam, że mógłbym dalej podawać przykłady, co?) i przypadkiem przyszedłeś przez tę dziwnie wyglądającą kwadratową rzecz i pomyślałem, co to właściwie jest ta kwadratowa rzecz, a jeśli nie… no cóż, nie martw się, to musi się wydarzyć wcześniej czy później, więc aby lepiej zrozumieć temat, zrobimy zabawny mały projekt z Arduino i OLED i zdemistyfikuj następujące rzeczy:
- Podstawowa koncepcja kodu QR.
- Jak to działa.
- Jak stworzyć swój własny kod QR za pomocą Arduino.
- I wreszcie wyświetl go na ekranie OLED (SSD1306).
Więc co to właściwie jest ten kod QR?
Kod QR (kod szybkiej odpowiedzi) to matrycowy kod 2D do odczytu danych z dużą prędkością, opracowany przez DENSO WAVE w 1994 roku dla przemysłu motoryzacyjnego w Japonii. Kod QR bardzo wydajnie kompresuje dane w porównaniu ze standardowym kodem kreskowym. Aby to osiągnąć, wykorzystuje cztery znormalizowane tryby kodowania (numeryczny, alfanumeryczny, bajtowo-binarny i kanji). Technologia została stworzona jako „open source”, czyli dostępna dla wszystkich, więc bardzo szybko zyskał popularność, a znaczącą przewagą kodów QR w porównaniu z konwencjonalnymi kodami kreskowymi jest większa pojemność danych i wysoka odporność na błędy.
Jak działa kod QR?
Kody QR (i inne kody macierzy danych) są zaprojektowane tak, aby były odczytywane przez specjalne narzędzia, a nie przez ludzi, więc jest tylko określona ilość, którą możemy zrozumieć, studiując wizualnie, chociaż każdy kod jest inny na różne sposoby, chociaż zawiera kilka interesujących wspólnych funkcje, obserwując kod QR circuitdigest.com, przeanalizujemy niektóre z nich
- Wzorce wyszukiwania: Duże kwadratowe pola z solidnym pudełkiem w trzech rogach kodu ułatwiają potwierdzenie, że jest to kod QR, ponieważ jest ich tylko trzy, więc jest całkiem oczywiste, w jaki sposób jest zorientowany kod.
- Wzorzec wyrównania: zapewnia to, że niezależnie od orientacji kod może być czytelny.
- Wzorzec czasowy: przebiega poziomo i pionowo między trzema wzorcami wyszukiwania , używając tych linii, czytelnik może określić rozmiar kodu.
- Informacje o wersji: Obecnie istnieje 40 różnych wersji standardu kodu QR, ta sekcja kodu określa wersję używanego kodu QR, w przypadku wersji marketingowej 1-7 używanej normalnie.
- Informacje o formacie: partnerzy formatu mają informacje o tolerancji błędów i maskowaniu danych.
- Obszar danych: ta sekcja kodu zawiera wszystkie elementy danych oraz kod korekcji błędów.
- Strefa wyjścia: odstępy w każdym kodzie QR są obowiązkowe w celu odróżnienia kodu od otoczenia.
Poniższy obrazek daje jasne wyobrażenie o kodzie
Inne sekcje kodu to kod danych i kod nadmiarowy.
Istnieje wiele innych funkcji i skomplikowanych tematów, których nie będę omawiać w tym samouczku. Jeśli chcesz przeczytać więcej szczegółów na temat kodu QR, postępuj zgodnie z samouczkiem dotyczącym kodu QR autorstwa Tan Jin Soon, Rada EPCglobal Singapore. Synthesis Journal, 2008.
Specyfikacja kodu QR
Rozmiar symbolu |
Min. Komórka 21x21 - maks. Komórka 177x177 (z odstępem 4 komórek) |
|
Typ i objętość informacji |
Znaki numeryczne |
Maksymalnie 7089 znaków |
Alfabety, znaki |
Maksymalnie 4296 znaków |
|
Binarny (8 bitów) |
Maksymalnie 2953 znaków |
|
Znaki Kanji |
Maksymalnie 1817 znaków |
|
Sprawność konwersji |
Tryb znaków numerycznych |
3,3 komórki / znak |
Tryb alfanumeryczny / znakowy |
5,5 komórki / znak |
|
Tryb binarny (8 bitów) |
8 komórek / znak |
|
Tryb znaków Kanji (13 bitów) |
13 komórek / znak |
|
Korekta błędów funkcjonalność |
Poziom L. |
Około. Przywrócono maksymalnie 7% obszaru symboli |
Poziom M |
Około. Przywrócono maksymalnie 15% obszaru symboli |
|
Poziom Q |
Około. Przywrócono maksymalnie 25% obszaru symboli |
|
Poziom H. |
Około. Przywrócono maksymalnie 30% obszaru symboli |
|
Funkcja łączenia |
Można podzielić maksymalnie na 16 symboli |
Generowanie własnego kodu QR
Wykonaj poniższe czynności, aby wygenerować swój własny kod QR. W tym przykładzie utworzymy kod QR z naszej ukochanej witryny Circuit Digest
Aby wygenerować kod QR, przejdź do tej witryny i jeśli spojrzysz na górną część witryny, zobaczysz listę opcji, w tym samouczku generujemy kod QR dla adresu URL, więc zamierzamy
- Kliknij zakładkę URL i wklej adres URL dla Circuit Digest w sekcji Enter URL.
- Kliknij Zapisz.
- Podaj nazwę pliku wyjściowego.
- Wybierz PNG jako nasz preferowany format pliku.
- i kliknij Zapisz.
Poniższy obraz daje jasne wyobrażenie o procesie
Nasz najdroższy mikrokontroler „Arduino” nie jest na tyle inteligentny, aby mógł po prostu skompilować surowy obraz PNG i wyświetlić go na wyświetlaczu OLED. Aby wyświetlić kod QR na OLED, musimy wykonać kilka prostych kroków i przekonwertować obraz PNG na tablicę bitmapową czytelną dla Arduino. Tę konwersję wykonaliśmy wcześniej, łącząc SSD1306 OLED z Arduino i łącząc graficzny wyświetlacz LCD z Arduino. Połączyliśmy również SSD1306 OLED z Raspberry Pi, ESP32, NodeMCU i wieloma innymi mikrokontrolerami. Konwersję tablicy bitmapowej można wykonać w dwóch poniższych krokach:
- Konwersja formatu PNG do formatu BMP.
- Przekonwertuj obraz BMP na tablicę kodów HEX.
Konwersja formatu PNG do formatu BMP
Aby przekonwertować pobrany obraz PNG na obraz BMP, przejdź do tej witryny internetowej oraz w sekcji konwertera obrazów i
- Kliknij menu rozwijane i wybierz
- Konwertuj na BMP
- Kliknij Idź
Poniższy obraz daje jasne wyobrażenie o procesie:
Zostanie wyświetlona nowa strona, która wygląda jak na poniższym obrazku:
- Kliknij kartę Wybierz pliki i wybierz pobrany obraz
- W ustawieniach opcjonalnych panel wpisz żądany rozmiar (używamy OLED 128x64)
- Kliknij przycisk Rozpocznij konwersję
Zostanie wyświetlona następująca strona i po kilku sekundach przekonwertowany obraz zostanie pobrany, jeśli pobieranie nie rozpocznie się automatycznie, kliknij opcję pobierania pliku:
Świetny! Teraz mamy nasz plik BMP, aby przekonwertować go na tablicę kodów HEX odczytywanych przez Arduino.
Przekonwertuj obraz BMP na tablicę kodów HEX
Aby przekonwertować pobrany obraz BMP na tablicę HEX, przejdź do tej witryny i kliknij Narzędzia -> image2cpp
Poniższy obraz daje jasne wyobrażenie o procesie
Zostanie wyświetlony ekran z czterema opcjami i omówimy je szczegółowo
- Wybierz obraz
- Ustawienia obrazu
- Zapowiedź
- Wynik
Wybierz sekcję obrazu
W tej sekcji wybierzemy obraz, który właśnie przekonwertowaliśmy na BMP:
Sekcja ustawień obrazu
W tej sekcji ustawimy rozmiar płótna, kolor tła, skalowanie i opcje wyśrodkowania na wymaganą przez nas wartość.
- Rozmiar płótna (ustawiliśmy na 128x64, ponieważ używamy OLED o gęstości pikseli 128x64).
- W tej sekcji możemy ustawić kolor tła OLED (wybieramy biały).
- Skalowanie jest ustawione na oryginalny rozmiar.
- Na koniec w opcji środkowej kliknij poziome i pionowe pola wyboru, dzięki czemu obraz pojawi się na środku.
Poniższy obrazek da ci jasny pomysł
Sekcja podglądu
W sekcji podglądu możemy zobaczyć wyraźny podgląd obrazu, który zostanie wyświetlony na OLED, jak pokazano poniżej:
Sekcja wyjściowa
W sekcji wyjściowej wygenerujemy i skopiujemy wygenerowany kod, aby to zrobić, wykonaj poniższe czynności:
- Format wyjścia kodu (ustawiamy go jako kod Arduino, ponieważ go używamy).
- Identyfikator (ta opcja ustawia nazwę generowanej tablicy, pozostawiamy ją domyślną).
- Tryb rysowania (Ustawiamy opcję trybu rysowania na poziomy).
- Na koniec klikamy przycisk generowania kodu, który wygeneruje ostateczny kod wyjściowy.
Poniższy obrazek da ci jasny pomysł
Schemat obwodu
Poniższy obraz przedstawia połączenia interfejsów między Arduino Nano i SSD1306:
Arduino Nano Pin |
PIN OLED |
GND |
GND |
3,3 V. |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
RES |
D9 |
SDC |
D10 |
CCS |
Objaśnienie kodu
Aby wyświetlić obraz na OLED, potrzebujemy pomocy biblioteki Arduino, którą można pobrać z tego repozytorium GitHub. Pobierz wersję biblioteki U8glib-1.19.1.zip i zaimportuj ją do Arduino IDE. Jeśli jesteś nowy w Arduino, skorzystaj z tego linku opisującego, jak zaimportować bibliotekę. W poniższej sekcji zmodyfikujemy kod, aby wyświetlić poprzednio wygenerowaną tablicę HEX na OLED. Pełny kod z działającym filmem znajduje się na końcu tego artykułu. Szczegółowe objaśnienie kodu podano poniżej.
Najpierw dołącz pobraną bibliotekę.
#include „U8glib.h” // łącznie z biblioteką U8glib
Następnie zdefiniuj wszystkie niezbędne piny dla 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: OLED_CSS_PIN 8 // Cyfrowy pin Arduino D13: ICP1
Zainicjuj bibliotekę u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
Następnie dołącz wygenerowaną tablicę obrazów.
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, 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, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x01, 0x87, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x33, 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, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 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, 0xf3, 0x01, 0x8f, 0xc1, 0x98, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, …….. …… …0xff, 0xff, …….. ………..0xff, 0xff, …….. ………..
Funkcja Draw służy do rysowania obrazu bitmapowego (kodu QR) na OLED za pomocą funkcji u8g.drawBitmapP.
void draw (void) {// komendy graficzne przerysowujące cały ekran należy umieścić tutaj u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
Na koniec w funkcji loop () wywołaj wszystkie niezbędne procedury, aby zbudować obraz na OLED
void loop () {u8g.firstPage (); // Wywołanie tej procedury oznacza początek pętli obrazu. do {draw (); } while (u8g.nextPage ()); // Wywołanie tej procedury oznacza koniec treści pętli obrazu. // odbuduj obraz po pewnym opóźnieniu (1000); }
Po wpisaniu kodu podłącz Arduino do portu USB komputera, wybierz port COM i wgraj kod. Jeśli wszystko wykonałeś poprawnie, będziesz miał działający wyświetlacz z kodem QR na OLED.
Mam nadzieję, że spodobał Ci się ten projekt i podobało Ci się uczenie się czegoś nowego, czytaj dalej, ucz się dalej i do zobaczenia następnym razem.