- И така, какъв е този QR код?
- Генериране на ваш собствен QR код
- Преобразуване на PNG в BMP формат
- Конвертирайте BMP изображението в масив от HEX кодове
- Електрическа схема
- Обяснение на кода
Кодът "Бърз отговор" или съкратено като QR код се превърна в съществена част от нашия дигитален живот, има вероятност вече да сте подсъзнателно запознати с тях, вероятно вече сте се разхождали из местния хранителен магазин или може би сте четете любимата си книга или дори евентуално правите онлайн плащане с Google Pay, PhonePe или Paytm, или сърфирате в мрежата и т.н. (предполагам, че бих могъл да продължа с примери а?) и случайно сте дошли през това странно изглеждащо квадратно нещо и мисъл, какво е това квадратно нещо така или иначе и ако не сте… е, не се притеснявайте, че ще се случи рано или късно, така че за да разберем по-добре темата, ще направим забавен малък проект с Arduino и OLED и демистифицирайте следните неща:
- Основна концепция на QR кода.
- Как работи.
- Как да направите своя собствен QR код с помощта на Arduino.
- И накрая, покажете го на OLED (SSD1306) екран.
И така, какъв е този QR код?
QR кодът (Quick Response code) е матричен 2D код за четене на данни с висока скорост, разработен от DENSO WAVE през 1994 г. за автомобилната индустрия на Япония. QR кодът компресира данните много ефективно в сравнение със стандартния баркод, за да се постигне това, той използва четири стандартизирани режима на кодиране (цифров, буквено-цифров, байт / двоичен и канджи), технологията е направена "с отворен код", т.е. достъпна за всички, така че набра популярност много бързо. Значителни предимства на QR кодовете пред конвенционалните баркодове са по-голям капацитет за данни и висока толерантност към грешки.
Как работи QR кодът?
QR кодовете (и други матрични кодове за данни) са предназначени за четене от специални инструменти, а не от хора, така че има само определено количество, което можем да разберем чрез визуално изучаване, въпреки че всеки код е различен по различни начини, въпреки че те съдържат няколко интересни общи характеристики, като наблюдаваме QRdicode.com на circuitdigest.com, ще проучим някои от тях
- Модели за търсене: Големите квадратни кутии с плътна кутия вътре в трите ъгъла на кода улесняват потвърждаването, че това е QR код, тъй като има само три от тях, така че е доста очевидно, че по какъв начин кодът е ориентиран.
- Шаблон за подравняване: Това прави сигурно, че независимо от ориентацията кодът може да бъде прочетен.
- Шаблон за синхронизация: Това работи хоризонтално и вертикално между трите шаблона на търсачката , като използва тези редове, четецът може да определи размера на кода.
- Информация за версията: В момента има 40 различни версии на стандарта за QR код, този раздел на кода определя версията на QR кода, която се използва за маркетингова версия 1-7, използвана нормално.
- Информация за формата : Партньорите за формат разполагат с информация за толерантност към грешки и маскиране на данни.
- Област с данни: Този раздел на кода съдържа всички елементи от данни и код за корекция на грешки заедно.
- Quit Zone: Разстоянието във всеки QR код е задължително, за да се разграничи кода от заобикалящата го среда.
Изображението по-долу ще ви даде ясна представа за кода
Други раздели на кода са данни и код на резервиране.
Има редица други функции и сложни теми, които няма да обсъждам в този урок, ако искате да прочетете повече подробности за QR кода, моля, следвайте този урок за QR Code от Tan Jin Soon, EPCglobal Singapore Council. Synthesis Journal, 2008.
Спецификацията на QR кода
Размер на символа |
Мин. 21x21 клетка - Макс. 177x177 клетка (с интервал от 4 клетки) |
|
Тип и обем на информацията |
Цифрови символи |
Максимум 7089 знака |
Азбуки, знаци |
Максимум 4 296 знака |
|
Двоичен (8 бита) |
2 953 знака максимум |
|
Kanji символи |
1817 знака най-много |
|
Ефективност на преобразуване |
Режим с цифрови символи |
3.3 клетки / символ |
Буквено-цифров / Режим на знаци |
5,5 клетки / символ |
|
Двоичен (8 битов) режим |
8 клетки / символ |
|
Режим на символи Kanji (13 бита) |
13 клетки / символ |
|
Корекция на грешка функционалност |
Ниво L |
Прибл. 7% от областта на символа е възстановена на максимум |
Ниво М |
Прибл. 15% от областта на символа е възстановена на максимум |
|
Ниво Q |
Прибл. 25% от областта на символа е възстановена на максимум |
|
Ниво Н |
Прибл. 30% от областта на символа е възстановена на максимум |
|
Свързваща функционалност |
Възможно да бъде разделено на 16 символа максимум |
Генериране на ваш собствен QR код
Следвайте стъпките, споменати по-долу, за да генерирате свой собствен QR код, в този пример ще направим QR код на нашия любим уебсайт Circuit Digest
За да генерирате QR код, отидете на този уебсайт и ако погледнете горната страна на уебсайта, можете да видите списък с опции, в този урок ние генерираме QR код за URL, така че ние ще
- Кликнете върху раздела URL и поставете URL за Circuit Digest в раздела Enter URL.
- Кликнете върху запазване.
- Дайте име на файл за изходния файл.
- Изберете PNG като предпочитан файлов формат.
- и щракнете върху запазване.
Изображението по-долу ще ви даде ясна представа за процеса
Най-скъпият ни микроконтролер „Arduino“ не е достатъчно интелигентен, за да може просто да компилира суровото PNG изображение и да го покаже на OLED дисплея. Така че, за да покажем QR кода на OLED, трябва да следваме няколко прости стъпки и да преобразуваме PNG изображението в растерна редица, четима от Arduino. Това преобразуване сме извършили преди, докато свързваме SSD1306 OLED с Arduino и свързваме графичен LCD с Arduino. Също така свързвахме SSD1306 OLED с Raspberry Pi, ESP32, NodeMCU и много други микроконтролери. Преобразуването на растерни масиви може да се извърши по-долу в две стъпки:
- Преобразуване на PNG в BMP формат.
- Конвертирайте BMP изображението в масив от HEX кодове.
Преобразуване на PNG в BMP формат
За да конвертирате изтегленото PNG изображение в BMP изображение, отидете на този уебсайт и в раздела за конвертор на изображения и
- Кликнете върху падащото меню и изберете
- Конвертиране в BMP
- Щракнете върху Go
Изображението по-долу ще ви даде ясна представа за процеса:
Ще ви бъде представена нова страница, изглеждаща като изображението по-долу:
- Кликнете върху раздела Избор на файлове и изберете изтегленото изображение
- В незадължителните настройки панелът въведете желания от вас размер (използваме 128x64 OLED)
- Щракнете върху бутона Стартиране на преобразуването
Ще ви бъде представена следната страница и след няколко секунди вашето преобразувано изображение ще бъде изтеглено, ако изтеглянето не започне автоматично, щракнете върху опцията за изтегляне на вашия файл:
Страхотен! Сега имаме време за нашия BMP файл, за да го преобразуваме в масив от шестнадесетични кодове, четими от Arduino.
Конвертирайте BMP изображението в масив от HEX кодове
За да конвертирате изтегленото BMP изображение в HEX масив, отидете на този уебсайт и кликнете върху Инструменти -> image2cpp
Изображението по-долу ще ви даде ясна представа за процеса
Ще ви бъде представен екран с четири опции и ние ще ги обсъдим в детайли
- Изберете изображение
- Настройки на изображението
- Визуализация
- Изход
Изберете раздела за изображение
В този раздел ще изберем изображението, което току-що сме преобразували в BMP:
Раздел за настройки на изображението
В този раздел ще зададем размера на платното, цвета на фона, мащабирането и центрирането на необходимата ни стойност.
- Размер на платното (зададохме 128x64, защото използваме OLED с 128x64 плътност на пикселите).
- В този раздел можем да зададем цвета на фона на OLED (ние го избираме да бъде бял).
- Мащабирането е зададено на оригиналния размер.
- И накрая, в централната опция щракнете върху хоризонталните и вертикалните квадратчета за отметка, това ще направи изображението да се показва в центъра.
Изображението по-долу ще ви даде ясна представа
Преглед на раздела
В раздела за предварителен преглед можем да видим ясен предварителен преглед на изображението, което ще се покаже в OLED, както е показано по-долу:
Изходен раздел
В изходния раздел ще генерираме и копираме генерирания код, за да изпълним следните стъпки:
- Формат на изходния код (задаваме го като код на Arduino, защото го използваме).
- Идентификатор (тази опция задава името на генерирания масив, оставяме го по подразбиране, както е).
- Режим на рисуване (Задаваме опцията за режим на теглене на хоризонтално).
- И накрая, щракваме върху бутона за генериране на код, това ще генерира крайния изходен код.
Изображението по-долу ще ви даде ясна представа
Електрическа схема
По-долу изображението показва връзките между Arduino Nano и SSD1306:
Arduino Nano Pin |
OLED ПИН |
GND |
GND |
3.3V |
VCC |
D13 |
CLK |
D11 |
МОСИ |
D8 |
ВЕИ |
D9 |
SDC |
D10 |
CCS |
Обяснение на кода
За да покажем изображението на OLED, се нуждаем от помощта на библиотека Arduino, която може да бъде изтеглена от това хранилище на GitHub. Изтеглете версията на библиотеката U8glib-1.19.1.zip и я импортирайте в IDE на Arduino. Ако сте нов в Arduino, използвайте помощта на тази връзка, описваща как да импортирате библиотека. В раздела по-долу ще модифицираме кода, за да покажем генерирания по-рано HEX масив на OLED. Пълен код с работещо видео е даден в края на тази статия. Подробното обяснение на кода е дадено по-долу.
Първо, включете изтеглената библиотека.
#include "U8glib.h" // включително библиотеката U8glib
След това дефинирайте всички необходими щифтове за 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 D9de: OduC OLED_CSS_PIN 8 // Arduino Digital Pin D13: ICP1
Инициализирайте библиотеката u8glib.
U8GLIB_SH1106_128X64 u8g (OLED_CLK_PIN, OLED_MOSI_PIN, OLED_RES_PIN, OLED_SDC_PIN, OLED_CSS_PIN);
След това включете генерирания масив от изображения.
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, 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, 0x1, 0x1, 0x1 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, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xf, 0xf, 0xf 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, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0xc1, 0xc, 0xc, 0xc 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, …….. ………..
Функцията Draw се използва за изчертаване на растерно изображение (QR код) на OLED с помощта на u8g.drawBitmapP функция.
void draw (void) {// графичните команди за пречертаване на целия екран трябва да бъдат поставени тук u8g.drawBitmapP (0, 0, 16, 64, circuitdigest); ….. ……
И накрая, в функция loop () извикайте всички необходими процедури за изграждане на изображението на OLED
невалиден цикъл () {u8g.firstPage (); // Извикване на тази процедура, маркира началото на цикъла на картината. do {draw (); } докато (u8g.nextPage ()); // Извикване на тази процедура, отбелязва края на тялото на цикъла на картината. // възстановяване на картината след известно забавяне (1000); }
След като попълните кода, включете Arduino в USB порта на вашия компютър, изберете вашия COM порт и качете кода. Ако сте направили всичко правилно, ще имате работещ дисплей с QR код на OLED.
Надявам се, че този проект ви е харесал и ви е харесало да научите нещо ново, продължете да четете, продължете да учите и ще се видим следващия път.