- Итак, что же это за QR-код?
- Создание собственного QR-кода
- Преобразование PNG в формат BMP
- Преобразование изображения BMP в массив кодов HEX
- Принципиальная электрическая схема
- Код Пояснение
Код «быстрого ответа» или сокращенно QR-код стал неотъемлемой частью нашей цифровой жизни, есть вероятность, что вы уже подсознательно знакомы с ними к настоящему времени, вы, вероятно, бродили по местному продуктовому магазину, а может быть, вы читаете свою любимую книгу, или даже, возможно, вы делаете онлайн-платеж с помощью Google Pay, PhonePe или Paytm, или просматриваете веб-страницы и т. д. (я полагаю, я мог бы продолжать и продолжать с примерами, да?), и вы случайно пришли через эту странно выглядящую квадратную штуку и подумал, что это вообще за квадратная штука, и если у вас нет… ну, не волнуйтесь, это обязательно произойдет рано или поздно, поэтому, чтобы лучше понять тему, мы собираемся сделать забавный маленький проект с Arduino и OLED, который демистифицирует следующие вещи:
- Базовая концепция QR-кода.
- Как это устроено.
- Как создать свой собственный QR-код с помощью Arduino.
- И, наконец, отобразите его на экране OLED (SSD1306).
Итак, что же это за QR-код?
QR-код (код быстрого ответа) представляет собой матричный 2D-код для чтения данных на высокой скорости, разработанный DENSO WAVE в 1994 году для автомобильной промышленности Японии. QR-код сжимает данные очень эффективно по сравнению со стандартным штрих-кодом, для этого он использует четыре стандартизованных режима кодирования (числовой, буквенно-цифровой, байт / двоичный и кандзи), технология была сделана «с открытым исходным кодом», т.е. доступной для всех, поэтому она приобрели популярность очень быстро.Существенными преимуществами QR-кодов перед обычными штрих-кодами являются больший объем данных и высокая отказоустойчивость.
Как работает QR-код?
QR-коды (и другие коды матрицы данных) предназначены для чтения специальными инструментами, а не людьми, поэтому есть только определенная сумма, которую мы можем понять, изучая визуально, хотя каждый код отличается по-разному, хотя они содержат несколько интересных общих функции, наблюдая за QR-кодом circuitdigest.com, мы изучим некоторые из них
- Шаблоны для поиска: большие квадратные поля со сплошным прямоугольником внутри в трех углах кода позволяют легко подтвердить, что это QR-код, поскольку их всего три, поэтому довольно очевидно, как ориентирован код.
- Шаблон выравнивания: это гарантирует, что независимо от ориентации код может быть читаемым.
- Шаблон синхронизации: он проходит по горизонтали и вертикали между тремя шаблонами поиска , используя эти строки, читатель может определить размер кода.
- Информация о версии: в настоящее время существует 40 различных версий стандарта QR-кода, этот раздел кода определяет версию QR-кода, которая используется, для маркетинговой версии 1-7 обычно используется.
- Информация о формате: партнеры по формату имеют информацию о допустимости ошибок и маскировке данных.
- Область данных: этот раздел кода содержит все элементы данных и код исправления ошибок.
- Зона выхода: интервал в каждом QR-коде является обязательным, чтобы отличать код от окружения.
Изображение ниже даст вам четкое представление о коде.
Другие разделы кода - это данные и код избыточности.
Есть ряд других функций и сложных тем, которые я не буду обсуждать в этом руководстве. Если вы хотите узнать более подробную информацию о QR-коде, следуйте этому руководству по QR-коду, написанному Тан Джин Сун, EPCglobal Singapore Council. Журнал синтеза, 2008.
Спецификация QR-кода
Размер символа |
Мин. 21x21 ячейка - Макс. Ячейка 177x177 (с интервалом в 4 ячейки) |
|
Тип и объем информации |
Числовые символы |
Не более 7 089 символов |
Алфавиты, Знаки |
Не более 4296 символов |
|
Двоичный (8 бит) |
Максимум 2953 символа |
|
Иероглифы кандзи |
Не более 1817 символов |
|
Эффективность преобразования |
Режим числовых символов |
3,3 ячейки / символ |
Алфавитно-цифровой режим / режим знаков |
5,5 ячеек / символ |
|
Двоичный (8 бит) режим |
8 ячеек / символ |
|
Режим символов кандзи (13 бит) |
13 ячеек / символ |
|
Исправление ошибки функциональность |
Уровень L |
Прибл. 7% площади символа восстановлено максимум |
Уровень М |
Прибл. 15% площади символа восстановлено максимум |
|
Уровень Q |
Прибл. Максимально восстановлено 25% площади символа |
|
Уровень H |
Прибл. Максимальное восстановление 30% площади символа |
|
Связывание функциональности |
Можно разделить максимум на 16 символов |
Создание собственного QR-кода
Следуйте инструкциям, указанным ниже, чтобы сгенерировать свой собственный QR-код, в этом примере мы собираемся создать QR-код нашего любимого веб-сайта Circuit Digest.
Чтобы сгенерировать QR-код, перейдите на этот веб-сайт, и если вы посмотрите на верхнюю часть веб-сайта, вы увидите список параметров, в этом руководстве мы генерируем QR-код для URL-адреса, поэтому мы собираемся
- Щелкните вкладку URL-адрес и вставьте URL-адрес дайджеста цепи в раздел «Введите URL-адрес».
- Нажмите "Сохранить".
- Дайте имя выходному файлу.
- Выберите PNG в качестве предпочтительного формата файла.
- и нажмите "Сохранить".
Изображение ниже даст вам четкое представление о процессе
Наш любимый микроконтроллер «Arduino» не настолько умен, чтобы просто скомпилировать необработанное изображение PNG и отобразить его на OLED-дисплее. Итак, чтобы отобразить QR-код на OLED, нам нужно выполнить несколько простых шагов и преобразовать изображение PNG в массив растровых изображений, читаемый Arduino. Это преобразование мы ранее выполняли при сопряжении SSD1306 OLED с Arduino и сопряжения графического ЖК-дисплея с Arduino. Мы также связали SSD1306 OLED с Raspberry Pi, ESP32, NodeMCU и многими другими микроконтроллерами. Преобразование растрового массива можно выполнить в два следующих шага:
- Преобразование PNG в формат BMP.
- Преобразуйте изображение BMP в массив кодов HEX.
Преобразование PNG в формат BMP
Чтобы преобразовать загруженное изображение PNG в изображение BMP, перейдите на этот веб-сайт и в раздел конвертера изображений и
- Щелкните раскрывающееся меню и выберите
- Конвертировать в BMP
- Нажмите Go
Изображение ниже даст вам четкое представление о процессе:
Вам будет представлена новая страница, которая выглядит как на изображении ниже:
- Перейдите на вкладку «Выбрать файлы» и выберите загруженное изображение.
- В дополнительных настройках введите желаемый размер панели (мы используем OLED 128x64).
- Нажмите кнопку Начать преобразование.
Вам будет представлена следующая страница, и через несколько секунд ваше преобразованное изображение будет загружено, если загрузка не начнется автоматически, нажмите на опцию загрузки файла:
Большой! Теперь у нас есть BMP-файл, пора преобразовать его в массив HEX-кодов, читаемых Arduino.
Преобразование изображения BMP в массив кодов HEX
Чтобы преобразовать загруженное изображение BMP в массив HEX, перейдите на этот веб-сайт и нажмите Инструменты -> image2cpp
Изображение ниже даст вам четкое представление о процессе
Вам будет представлен экран с четырьмя вариантами, которые мы подробно обсудим.
- Выбрать изображение
- Настройки изображения
- Предварительный просмотр
- Вывод
Выбрать раздел изображения
В этом разделе мы выберем изображение, которое мы только что преобразовали в BMP:
Раздел настроек изображения
В этом разделе мы установим необходимый размер холста, цвет фона, масштабирование и центр.
- Размер холста (мы установили 128x64, потому что мы используем OLED с плотностью 128x64 пикселей).
- В этом разделе мы можем установить цвет фона OLED (мы выбираем белый).
- Масштабирование установлено на исходный размер.
- Наконец, в центральном пункте нажмите на горизонтальный и вертикальный флажки, это заставит изображение появиться в центре.
Изображение ниже даст вам четкое представление
Предварительный просмотр раздела
В разделе предварительного просмотра мы можем видеть четкий предварительный просмотр изображения, которое будет отображаться на OLED, как показано ниже:
Секция вывода
В разделе вывода мы сгенерируем и скопируем сгенерированный код, для этого выполните следующие шаги:
- Формат вывода кода (мы установили его как код Arduino, потому что мы его используем).
- Идентификатор (эта опция устанавливает имя для сгенерированного массива, мы оставляем его как есть по умолчанию).
- Режим рисования (мы устанавливаем вариант режима рисования по горизонтали).
- И, наконец, мы нажимаем кнопку сгенерировать код, это сгенерирует окончательный выходной код.
Изображение ниже даст вам четкое представление
Принципиальная электрическая схема
На изображении ниже показаны интерфейсные соединения между Arduino Nano и SSD1306:
Штырь Arduino Nano |
OLED PIN |
GND |
GND |
3,3 В |
VCC |
D13 |
CLK |
D11 |
MOSI |
D8 |
ВИЭ |
D9 |
SDC |
D10 |
CCS |
Код Пояснение
Чтобы показать изображение на OLED-экране, нам понадобится библиотека Arduino, которую можно загрузить из этого репозитория GitHub. Загрузите версию библиотеки U8glib-1.19.1.zip и импортируйте ее в Arduino IDE. Если вы новичок в Arduino, воспользуйтесь этой ссылкой, описывающей, как импортировать библиотеку. В следующем разделе мы изменим код, чтобы отображать ранее сгенерированный массив HEX на OLED. Полный код с рабочим видео приведен в конце статьи. Подробное объяснение кода приведено ниже.
Сначала включите загруженную библиотеку.
#include "U8glib.h" // включая библиотеку U8glib
Затем определите все необходимые контакты для OLED.
#define OLED_CLK_PIN 13 // Цифровой вывод Arduino D13: SCK #define OLED_MOSI_PIN 11 // Цифровой вывод Arduino D11: MOSI #define OLED_RES_PIN 10 // Цифровой вывод Arduino D10: SS #define OLED_SDC_PIN 9 // Цифровой вывод Arduino D9: OC1A # OLED_CSS_PIN 8 // Цифровой вывод Arduino 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 схемы 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, 0xf0, 0x00, 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, 0xf3, 0xff, 0x8f, 0xf0, 0x7f, 0x31, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf, 0x8x, 0xf, 0xf, 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, 0xf3, 0x01, 0x8f, 0xb1, 0x80, 0x33, 0x81, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x01, 0x8f, 0x98, 0x98, 0x98 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 (); // Вызов этой процедуры отмечает начало цикла изображения. делать {рисовать (); } while (u8g.nextPage ()); // Вызов этой процедуры отмечает конец тела цикла изображения. // перестраиваем картинку после некоторой задержки delay (1000); }
После ввода кода подключите Arduino к USB-порту вашего компьютера, выберите свой COM-порт и загрузите код. Если вы все сделали правильно, у вас будет рабочий дисплей с QR-кодом на OLED-экране.
Надеюсь, вам понравился этот проект, и вам понравилось узнавать что-то новое, продолжайте читать, продолжайте учиться, и увидимся в следующий раз.