Как работает термопринтер и как его подключить к ESP32


Технология термопринтеров произвела революцию в печати чеков в розничной торговле, здравоохранении и проектах IoT. Это подробное руководство описывает, как подключить популярные термопринтеры, такие как PNP-500, к микроконтроллерам ESP32 и Arduino. Независимо от того, создаете ли вы принтер чеков, принтер штрихкодов или систему печати QR-кодов на базе ESP32, это руководство предоставит полные схемы, код Arduino и пошаговые инструкции для ваших проектов на микроконтроллерах.

Как работает термопринтер и как его подключить к ESP32

Термопринтеры широко используются в системах учета продаж, медицинском оборудовании и встроенных системах, поскольку не требуют чернил, работают бесшумно и обеспечивают высокую скорость печати. ​​Соединив термопринтер с ESP32, можно создавать мощные решения для печати в рамках IoT-систем, таких как автоматизация умного дома, промышленный мониторинг или системы печати чеков.

Ранее на нашем сайте мы рассматривали подключение термопринтера и к другим микроконтроллерам:

Необходимые компоненты

  1. Модуль ESP32 (купить на AliExpress).
  2. Термопринтер PNP-500/RS203.
  3. Резисторы 1 кОм – 2 шт.
  4. Макетная плата.
  5. Соединительные провода.
  6. Литий-ионный аккумулятор 2S (для питания принтера).
  7. Кнопки – 2 (опционально) (купить на AliExpress).

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Понимание основ работы термопринтера

Термопечать — это бесконтактный метод печати, использующий тепло для создания изображений или текста на специально покрытой термочувствительной бумаге, известной как термобумага. Печать осуществляется путем пропускания термобумаги над печатающей головкой, специально разработанной для этой цели, которая имеет нагревательные элементы, расположенные в виде тонкой линии или точечной матрицы. Когда определенные участки термобумаги нагреваются, химическая реакция вызывает потемнение этих пятен, создавая необходимый отпечаток.

Внешний вид термопринтера

Термобумага для этого принтера доступна в следующих вариантах ширины: 57 мм, 76 мм, 80 мм, до 110 мм, а длина рулона варьируется от 15 до 70 метров. Таким образом, в зависимости от возможностей устройства используются рулоны бумаги определенной ширины и длины.

Сравнение типов термопринтеров

Тип Используемые материалы Основные характеристики/варианты использования Типичные области применения
Direct Thermal (прямой тепловой) Термочувствительная бумага Не требует чернил/тонера, простой, не требует особого ухода, бесшумный, отпечатки могут выцветать со временем. Чеки, транспортные этикетки, этикетки со штрих-кодом, билеты
Thermal Transfer (теплопередача) Обычная бумага + чернильная лента Более долговечные отпечатки, используется чернильная лента, возможна цветная печать, более длительная стойкость отпечатков. Этикетки для продукции, идентификационные бирки, отслеживание активов, браслеты, архивные этикетки

Прямая термопечать чаще всего используется там, где печатная информация не должна сохраняться долго, например, на чеках в розничных магазинах, билетах на мероприятия и этикетках со штрихкодами, рассчитанных на короткий срок службы.

С другой стороны, термотрансферная печать предпочтительна для применений, требующих более прочных и долговечных отпечатков. К ним относятся маркировка химических веществ и товаров для наружного применения, а также идентификация пациентов в медицинских учреждениях.

Преимущества

  1. Чернила и тонер не требуются (для термопринтеров).
  2. Низкие затраты на техническое обслуживание благодаря небольшому количеству движущихся частей.
  3. Бесшумная и быстрая работа.
  4. Простой электронный интерфейс, подходящий для интеграции с микроконтроллером.

Недостатки

  1. Отпечатки могут выцветать под воздействием тепла, света или трения (в основном, прямого термического воздействия).
  2. В большинстве моделей доступен только монохромный режим.
  3. Необходима специальная термобумага.

Термопринтер PNP-500 для проектов на базе ESP32 и Arduino

Термопринтер PNP-500 — это компактный, монтируемый на панель термопринтер, простой в использовании и очень надежный, что делает его популярным в промышленных и измерительных целях. Его часто можно встретить в составе диагностического оборудования, панелей управления и весов, где пространство ограничено, а скорость имеет значение.

Существует ещё один принтер, RS203 , который довольно похож на PNP-500. Поэтому данное руководство по использованию ESP32 с термопринтером также работает с моделью RS203.

Внешний вид термопринтера PNP-500

Основные технические характеристики

⇒ Метод печати: Прямая термопечать. Это означает, что печать осуществляется путем выборочного нагрева термобумаги.
⇒ Ширина бумаги: 57 мм, идеально подходит для стандартных чеков и журналов данных.
⇒ Ширина печати: 48 мм.
⇒ Скорость печати: 50–80 мм/сек, обеспечивая быструю печать для большинства задач.
⇒ Разрешение: 8 точек/мм (384 точки/строка), гарантируя четкий текст и штрихкоды.
⇒ Интерфейсы: Последовательный (RS232C, TTL) и USB, что обеспечивает различные варианты подключения.
⇒ Рабочее напряжение: 5–9 В постоянного тока, может работать с напряжением до 12 В.
⇒ Размеры: 76,8×77,4×47,6 мм (ШхГхВ) — достаточно компактный, чтобы поместиться в ограниченном пространстве панелей управления.
⇒ Максимальный диаметр рулона бумаги: 58 ​​мм, 40 мм, что покрывает большинство задач печати на больших расстояниях.
⇒ Срок службы печатающей головки: до 50 км печати, что гарантирует ее долговечность.

Габариты термопринтера PNP500

Габариты этого принтера указаны на изображении ниже.

Габариты термопринтера PNP500

Учитывая все указанные размеры, вам будет легко спланировать вырез для корпуса в вашем проекте, корпусе, напечатанном на 3D-принтере, и т. д.

Обзор аппаратной части термопринтера PNP-500

Теперь давайте подробно рассмотрим аппаратные компоненты и принцип их работы. Для большей ясности я полностью разобрал принтер, чтобы всё было понятно. Ниже вы можете увидеть полностью разобранный PNP500.

Аппаратные компоненты термопринтера PNP-500

Будьте осторожны, если вы планируете разбирать его в учебных целях. Убедитесь, что пластиковые петли открыты правильно, иначе они могут легко сломаться. Для этого потребуется немало терпения.

Теперь давайте подробнее обсудим компоненты принтера.
Термопринтер PNP-500 состоит из 6 наиболее важных частей, которые необходимо понимать. Это:

1. Основная плата управления

В этом принтере всего одна печатная плата, которая отвечает за все функции. Давайте разберемся с печатной платой, начиная с вида сверху.

Плата управления термопринтера PNP-500

На изображении выше с отмеченными элементами можно определить назначение каждого вывода ввода/вывода для подключения термопринтера к плате ESP32. Для связи этот модуль предоставляет два варианта: RS232 и TTL. Если вы используете микроконтроллер, порт TTL очень легко интегрировать.

Также можно найти контакт для подключения питания. Он поддерживает широкий диапазон напряжений от 5 В до 9 В, или 12 В постоянного тока, как указано в статье. Однако при напряжении 5 В я не получил идеальных результатов печати. ​​Напряжение выше 6 В обеспечило мне нужную степень затемнения. В частности, для питания модуля я использовал литий-ионный аккумулятор 2S.

Понимание того, как использовать термопринтер с распиновкой ESP32, упрощает получение идеального соединения, и вы можете следовать полной схеме подключения термопринтера к ESP32.

Светодиод и кнопка печати пробной страницы на плате управления термопринтера PNP-500

Далее расположен светодиод с маркировкой D2, который является индикатором состояния. Индикаторы его состояния следующие:

  • Мигает один раз: работает исправно.

  • Дважды мигает: принтер не обнаружен.

  • Трижды мигает: бумага не обнаружена.

  • Мигает пять раз: механизм принтера перегревается.

  • Мигает десять раз: не обнаружена микросхема, содержащая китайские иероглифы.

Далее находится кнопка, обозначенная как K1. Она выполняет две функции:

После нажатия кнопки при включении устройства печатается тестовая страница, которая выглядит следующим образом.

Пробная страница, напечатанная на термопринтере PNP-500

На тестовой странице,

  • Сначала выводится таблица кодов символов.
  • Затем печатается демонстрационный текст для трех размеров шрифта (9x24, 9x17, 8x16).
  • Далее следует информация, такая как скорость передачи данных, градусы (температура головки), напряжение, плотность нагрева (темнота печати), тепловая точка (количество одновременно активированных нагревательных элементов), время включения/выключения, версия прошивки и, наконец, QR-код, указывающий на «Поддержка QR-кодов!».

Вид снизу платы управления термопринтера PNP-500

На изображении выше вы можете увидеть вид снизу печатной платы термопринтера. Здесь нет портов ввода/вывода — только основные микросхемы:

  • BY25D16 – Флэш-память NOR-типа объемом 16 МБ, вероятно, используемая для хранения важных конфигурационных данных и больших функциональных блоков.

  • PT5139A – микросхема драйвера двигателя с двумя H-мостами, используемая для управления шаговым двигателем механизма подачи бумаги.

  • TPT3232E – микросхема приемопередатчика RS232, используемая для связи по протоколу RS232.

  • 32-разрядный микроконтроллер на базе ARM — точная модель или номер детали неизвестны, но он служит основным процессором принтера и работает от источника питания 3,3 В.

2. Печатающая головка

Печатающая головка особенная, поскольку является основным компонентом, отвечающим за процесс печати. ​​Это крошечный механизм. На практике в нем 384 отдельных нагревательных элемента, которые создают 384 отдельные точки. Вы можете увидеть их на изображении ниже. Мы сами проверили это количество, чтобы подтвердить его.

Печатающая головка термопринтера PNP-500

Печатающая головка уже включает необходимые сдвиговые регистры, встроенные в черную область под зоной нагрева, которая представляет собой микросхему. Это позволяет сократить количество управляющих контактов до всего 6, а также добавить дополнительные контакты заземления и питания.

Эта термопечатающая головка также включает в себя термистор для измерения температуры. Кроме того, имеется датчик обнаружения бумаги и сервомотор, которые подключаются к основной печатной плате с помощью того же ленточного кабеля.

Будьте осторожны с ленточным кабелем; несмотря на свою гибкость, он легко рвется.

3. Пружинная подвеска за печатающей головкой

На изображении ниже вы можете увидеть две пружины, соединенные с термопечатающей головкой.

Пружины под термопечатающей головкой термопринтера PNP-500

Пружины не просто соединяют, они используются для прижима печатающей головки к подающей бумаге, независимо от ее толщины или текстуры. Цель состоит в том, чтобы обеспечить надлежащий контакт всех нагревательных элементов с бумагой для стабильной печати.

4. Механизм подачи бумаги

Механизм подачи бумаги состоит из пяти шестерен, двух валов (соединенных с двигателем и прорезиненным валиком), шагового двигателя и прорезиненного валика.

Ниже вы можете увидеть крупным планом шаговый двигатель и редуктор, где небольшая металлическая шестерня напрямую соединена с шаговым двигателем. Остальные три шестерни соединяют вал двигателя с валом главного ролика.

Шаговый двигатель и редуктор термопринтера PNP-500

Передаточные числа предварительно рассчитываются и сохраняются в системе. Их назначение — точная подача бумаги строка за строкой, точка за точкой, в соответствии с заданным временем, что обеспечивает безупречное качество печати.

На изображении ниже вы можете увидеть последнюю шестерню, соединенную с валом ролика.

Последняя шестерня, соединенная с валом ролика термопринтера PNP-500

Обратите внимание, что ролик прикреплен к открывающейся/закрывающейся крышке отсека для хранения рулонов бумаги. В закрытом состоянии он обеспечивает необходимое трение для подачи бумаги с обратной стороны, где текстура немного шероховатая, что помогает плавно подавать бумагу без повреждений.

Кроме того, сторона бумаги с покрытием более гладкая, что позволяет ей легко скользить к печатающей головке.

5. Система обнаружения присутствия бумаги на основе ИК-излучения

В данной статье представлена ​​простая система обнаружения. Она использует инфракрасный датчик приближения для обнаружения бумаги.

Принцип прост. Инфракрасный свет отражается только от белых глянцевых поверхностей. Если поверхность темнее или шероховатая, фотодиод не принимает отраженный свет, что означает отсутствие бумаги.

Система обнаружения присутствия бумаги термопринтера PNP-500

Выше вы можете увидеть расположение и внешний вид датчика в термопринтере.

В хранилище бумаги можно разместить рулоны диаметром до 40 мм, что составляет приблизительно от 16 до 20 метров в длину.

Ниже вы можете увидеть наглядное изображение зоны хранения рулонов бумаги.

Зона хранения рулонов бумаги в термопринтере PNP-500

Как запрограммировать термопринтер?

Если говорить точнее, управлять такими модулями проще, чем вы думаете. В модуль уже встроено множество командных инструкций. В зависимости от модели вашего принтера, список команд можно найти в руководстве или техническом описании модуля. Эти команды отправляются на принтер через любой из доступных на модуле коммуникационных портов.

В нашем случае PNP-500 имеет порты TTL (UART) и RS232. Некоторые модули могут также иметь USB-порт. Вот и всё!

Теперь позвольте мне показать вам список команд, доступных для модуля PNP-500.

Команды термопринтера

Функция Команда ASCII Шестнадцатеричный код Параметры Значения параметров Пример
Печать и подача n линий ESC d n ESC d 0x1B 0x64 n n = линий n = 0-255 строк 0x1B 0x64 0x03 (подача 3 линий)
Выбор выравнивания ESC a n ESC a 0x1B 0x61 n n = выравнивание 0 = слева, 1 = по центру, 2 = справа 0x1B 0x61 0x01 (центр)
Печать вверх ногами ESC { n ESC { 0x1B 0x7B n n = режим 0 = Нормальный, 1 = Перевернутый 0x1B 0x7B 0x01 (включить)
Режим подчеркивания ESC - n ESC - 0x1B 0x2D n n = толщина 0 = Выкл., 1 = 1 точка, 2 = 2 точки 0x1B 0x2D 0x02 (2-точечный)
Инверсный режим печати GS B n GS B 0x1D 0x42 n n = режим 0 = Нормальное распределение, 1 = Инверсное распределение 0x1D 0x42 0x01 (белый на чёрном)
Установить межстрочный интервал ESC 3 n ESC 3 0x1B 0x33 n n = точки n = 0-255 точек 0x1B 0x33 0x00 (0 точек)

Термопринтер — команды контроля качества печати

Функция Команда ASCII Шестнадцате-ричный код Параметры Значения параметров Пример
Контроль плотности печати и температуры DC2 # n DC2 # 0x12 0x23 n n = combined Bits 7-5: breakTime/250μs<br>Bits 4-0: (density%-50)/5 0x12 0x23 0x9F (high)<br>0x12 0x23 0x58 (reset)

Ниже приведена формула расчета плотности.

Команды для печати растрового изображения 

Функция Команда ASCII Шестнадцате-ричный код Параметры Подробная информация о параметрах Формат данных
Печать растрового изображения GS v 0 m xL xH yL yH GS v 0 0x1D 0x76 0x30 m xL xH yL yH [данные] m = режим, x = ширина в байтах, y = высота в точках m=0 (нормальная плотность)<br>xL,xH = байтов в строке (порядковый номер байтов)<br>yL,yH = высота (порядковый номер байтов) 1-битное растровое изображение, 8 пикселей/байт
Печать растрового изображения построчно DC2 * рн DC2 * 0x12 0x2A rn [данные] r = строки, n = байты r=1 (одна строка)<br>n=байт на строку Отправить для каждой строки изображения

Ниже вы можете увидеть расчет размера растрового изображения, используемый в коде.

Ниже вы можете увидеть полную последовательность действий, использованную для печати растрового изображения.

1. 0x1B 0x33 0x00 // Межстрочный интервал: 0
2. // Для каждого блока из 24 строк:
3. 0x1D 0x76 0x30 0x00 xL xH yL yH [блок] // Печать блока
4. 0x1B 0x64 0x03 // Подача 3 строк в конце

Команды настройки штрихкода термопринтера

Сначала необходимо выполнить небольшую настройку перед печатью штрихкода.

Функция Команда ASCII Шестнадцатеричный код Параметры Значения параметров Пример
Установить высоту штрихкода GS hn GS h 0x1D 0x68 n n = высота n = 1-255 точек 0x1D 0x68 0x50 (80 точек)
Задать ширину штрихкода GS wn GS w 0x1D 0x77 n n = ширина n = 2-6 (множитель) 0x1D 0x77 0x02 (2× ширина)
Позиция текста HRI GS H n GS H 0x1D 0x48 n n = позиция 0 = Нет, 1 = Выше, 2 = Ниже, 3 = И то, и другое 0x1D 0x48 0x02 (ниже)

После завершения настройки мы можем распечатать штрихкод.

Функция Команда ASCII Шестнадцатеричный код Параметры Типы штрихкодов Требования к данным
Распечатать штрихкод GS kmn [данные] GS k 0x1D 0x6B mn [данные] m=тип, n=длина, данные=содержание 0x41=UPC-A<br>0x43=EAN13

<br>0x49=CODE128

UPC-A: 11 цифр<br>EAN13: 12 цифр<br>CODE128: переменная

Ниже приведены примеры команд для печати штрихкодов.

1. CODE128: 0x1D 0x6B 0x49 0x06 "123456"
2. UPC-A: 0x1D 0x6B 0x41 0x0B "12345678901"
3. EAN13: 0x1D 0x6B 0x43 0x0C "123456789012"

Ниже вы можете увидеть полную последовательность, использованную для штрихкода.
0x1D 0x68 0x50 // Высота: 80 точек
0x1D 0x77 0x02 // Ширина: 2x
0x1D 0x48 0x02 // HRI ниже
0x1D 0x6B 0x49 n [данные] // Печать штрихкода (n = длина данных)

Для сложных проектов, требующих сканирования штрихкодов, можно также рассмотреть возможность подключения USB-сканера штрихкодов к Raspberry Pi 4 для считывания двумерных штрихкодов, что обеспечивает бесперебойную работу с термопринтерами.

Команды QR-кода для термопринтера

Шаг Функция Команда ASCII Шестнадцатеричный код Параметры Подробная информация о параметрах
1 Установить модель QR-кода GS ( k 4 0 1 A 2 0 GS ( k 4 NUL 1 A 2 NUL 0x1D 0x28 0x6B 0x04 0x00 0x31 0x41 0x32 0x00 Фиксированная последовательность Модель 2 (стандартная)
2 Установить размер модуля GS ( k 3 0 1 C n GS ( k 3 NUL 1 C n 0x1D 0x28 0x6B 0x03 0x00 0x31 0x43 n n = размер модуля n = 3-16 пикселей
3 Настройка коррекции ошибок GS ( k 3 0 1 E n GS ( k 3 NUL 1 E n 0x1D 0x28 0x6B 0x03 0x00 0x31 0x45 n n = уровень ошибки 48=L (~7%), 49=M (~15%)<br>50=Q (~25%), 51=H (~30%)
4 Сохранение данных QR-кода GS ( k pL pH 1 P 0 [data] GS ( k pL pH 1 P 0 [data] 0x1D 0x28 0x6B pL pH 0x31 0x50 0x30 [data] PL, pH = длина данных + 3 PL, pH в формате little-endian
5 Распечатать QR-код GS ( k 3 0 1 Q 0 GS ( k 3 NUL 1 Q 0 0x1D 0x28 0x6B 0x03 0x00 0x31 0x51 0x30 Фиксированная последовательность Выполнить сохраненный QR-код

Ниже вы можете увидеть расчет длины данных QR-кода.

len = data.length() + 3
pL = len & 0xFF
pH = (len >> 8) & 0xFF

Также помните, что QR-коды имеют четыре уровня коррекции ошибок, которые определяют, насколько код может быть восстановлен в случае загрязнения или повреждения. Уровень L (шестнадцатеричное значение 0x30 ) обеспечивает примерно 7% восстановления и подходит для чистых помещений. Уровень M ( 0x31 ) обеспечивает около 15% восстановления и является выбором по умолчанию для общего использования. Уровень Q (0x32) обеспечивает 25% восстановления, что делает его идеальным для случаев, когда возможно умеренное повреждение . Наконец, уровень H (0x33) обеспечивает наивысшую защиту с 30% восстановлением и рекомендуется для сценариев, когда QR-код подвержен высокому риску повреждения.

Ниже вы можете увидеть полную последовательность действий, использованную для создания QR-кода.

1. 0x1D 0x28 0x6B 0x04 0x00 0x31 0x41 0x32 0x00 // Установка модели 2
2. 0x1D 0x28 0x6B 0x03 0x00 0x31 0x43 0x06 // Размер модуля 6
3. 0x1D 0x28 0x6B 0x03 0x00 0x31 0x45 0x31 // Уровень ошибки M
4. 0x1D 0x28 0x6B pL pH 0x31 0x50 0x30 [данные] // Сохранение данных
5. 0x1D 0x28 0x6B 0x03 0x00 0x31 0x51 0x30 // Печать QR-кода

Помимо перечисленных выше функций, вы можете найти дополнительные команды в официальном техническом описании. В предыдущем разделе я рассмотрел только основные команды.

Схема проекта

Для сопряжения термопринтера PNP-500 с модулем разработки ESP32 мы будем использовать коммуникационный порт TTL принтера. Это позволит нам использовать интерфейс UART модуля ESP32. Я рекомендую использовать аппаратный UART для достижения наилучшей производительности.

Схема подключения термопринтера PNP-500 к плате ESP32

На приведенной выше схеме термопринтера ESP32 вы можете увидеть соединения между компонентами. Я использовал два подтягивающих резистора на линиях данных RX и TX. Их основное назначение — уменьшение электромагнитных помех или шума сигнала, особенно при использовании длинных проводов.

Я также добавил две кнопки, при нажатии на которые начнётся печать. Однако вы также можете отправлять команды через последовательный монитор на ESP32 для запуска печати.

В настоящее время я использую два отдельных источника питания: литий-ионный аккумулятор 2S для принтера и питание от USB для ESP32. Но вы также можете питать оба устройства от одного литий-ионного аккумулятора, внеся простую модификацию: подключив положительный полюс аккумулятора к контакту 5V (или Vin) ESP32, а отрицательный полюс — к GND.

Эта схема наглядно показана на изображении ниже.

Альтернативная схема подключения термопринтера PNP-500 к плате ESP32

После правильной сборки наша схема термопринтера на базе ESP32 готова к программированию. Ниже вы можете увидеть изображение полностью собранной схемы нашего ESP32 с термопринтером.

Собранная конструкция проекта

Код для этого интерфейса достаточно прост, поскольку я включил все необходимые функции в тестовый код. Полный код, использованный в этой демонстрации работы ESP32 с термопринтером, вы можете найти в репозитории GitHub.

Как получить двоичный код растрового изображения для вывода на печать?

Пример получения двоичного кода растрового изображения для вывода на печать

⇒ Шаг 1:
Откройте https://javl.github.io/image2cpp/  в любом браузере.
Это веб-приложение поможет нам преобразовать изображение в массив байтов.

⇒ Шаг 2:
Загрузите изображение. Убедитесь, что его ширина не превышает 384 пикселя.

⇒ Шаг 3:
Помните, что при термопечати печатаются именно белые области. Поэтому, при необходимости, инвертируйте изображение.
Также установите формат вывода кода на «Код Arduino; Одно растровое изображение».

⇒ Шаг 4:
Нажмите кнопку "Generate Code" («Сгенерировать код»). Массив байтов появится в текстовом поле ниже.
Скопируйте этот код и вставьте его в файл с именем data.h в вашей директории.

После этого мы можем перейти к рассмотрению основного кода!

Код ESP32 для подключения термопринтера

Как упоминалось ранее, полный код для этого руководства находится в репозитории GitHub. В этом разделе объясняются важные фрагменты кода нашего термопринтера для ESP32, чтобы вы могли изменить и адаптировать его для своих задач. 

1. Библиотеки и заголовочные файлы

Arduino.h: Основная библиотека Arduino, предоставляющая базовые функции, такие как pinMode(), digitalWrite(), Serial и т. д.

data.h: Пользовательский заголовочный файл, содержащий данные растрового изображения, хранящиеся в PROGMEM (флэш-памяти). Он предназначен в основном для организации кода. Даже если вы вставите массив байтов непосредственно в основной код, он все равно будет работать.

esp_heap_caps.h: Библиотека, разработанная специально для ESP32, с расширенными функциями управления памятью и мониторинга кучи.

2. Структуры данных и константы

Структура BitmapImage

Эта структура упорядочивает метаданные изображений, упрощая управление несколькими растровыми изображениями с указанием их имен и размеров.

Доступный массив изображений

Этот массив создает каталог всех доступных изображений, хранящихся во флэш-памяти для экономии оперативной памяти. Каждая запись содержит имя изображения, указатель данных и размеры.

Определения контактов оборудования

Эти параметры определяют контакты GPIO ESP32, используемые для:

  • UART2 (контакты 16, 17): последовательная связь с термопринтером.
  • Управление питанием (контакты 5, 21): управление линией питания линии данных и кнопки.
  • Кнопки (контакты 22, 23): физический пользовательский интерфейс для демонстрационных функций.

Глобальные переменные

Эти переменные поддерживают состояние системы и обрабатывают временные параметры ввода данных пользователем.

3. Функция setup() — инициализация системы

Давайте разберемся, что происходит во время настройки.

  • Управление питанием: настраивает выделенные контакты для управления питанием сигнальной линии принтера и кнопок.
  • Настройка кнопок: включает внутренние подтягивающие резисторы для входных сигналов кнопок (кнопки считывают низкий уровень при нажатии).
  • Последовательная связь:
    • USB-последовательный порт со скоростью 115200 бод для отладки/команд
    • Последовательный порт принтера со скоростью 9600 бод (стандартная скорость для термопринтеров).
  • Инициализация принтера: ожидает 1 секунду загрузки принтера, устанавливает центральное выравнивание.
  • Состояние системы: проверяет использование памяти и по умолчанию включает печать вверх ногами (опционально).

4. Функция loop() — основной цикл программы

Обязанности функции цикла заключаются в следующем:

  1. Обработка последовательных команд: формирует команды посимвольно, выполняет их после завершения.
  2. Защита от дребезга кнопок: предотвращает дребезг механических кнопок при одновременном нажатии нескольких кнопок.
  3. Демонстрационные функции: клавиша 1 переключает изображения, клавиша 2 распечатывает подробную демонстрацию.

5. Пользовательские функции

  • Функция handleSerialCommand() обрабатывает текстовые команды с компьютера (например, "QRCODE Hello")
  • setDarknessAndDelay() - регулирует яркость печати и скорость печати.
  • printQRCode() — создает QR-коды для веб-сайтов, текста и контактов.
  • printBarcode_CODE128/UPCA/EAN13() - печатает штрихкоды для товаров и складских запасов.
  • printBitmapGS_Method() - выводит изображения и логотипы, хранящиеся в памяти.
  • feedLines() - перемещает бумагу вперед на указанное количество строк
  • align() — устанавливает выравнивание текста (по левому краю, по центру, по правому краю).
  • upsideDownPrinting() - переворачивает все печатаемые объекты вверх ногами.
  • underlineMode() - добавляет подчеркивание к тексту.
  • inverseMode() — выводит белый текст на чёрном фоне.
  • printMemoryStats() — показывает, сколько памяти используется.
  • rotateBitmap1bpp_180() - поворачивает изображения на 180 градусов для перевернутого режима.
  • createTestPattern() - создает тестовые шаблоны для проверки качества печати.
  • demoPrintNextImage() - функция кнопки 1 - выводит следующее изображение в списке
  • Функция demoPrintAllFormats() ( кнопка 2) выводит пример всех возможностей принтера.

Полный код можно найти по ссылке на GitHub в разделе выше.

Демоснтрация работы проекта

Демонстрация работы довольно проста, так как я уже создал все необходимые функции. Для этой демонстрации я использую отдельный блок питания для термопринтера. ESP32 питается и обменивается данными через последовательный кабель USB-C от моего ноутбука.

Подготовка к тестированию работы проекта

После успешной загрузки кода можно приступать к тестированию устройства. Ниже вы можете увидеть, как термопринтер на основе ESP32 печатает изображение.

Демонстрация работы проекта

Качество печати довольно хорошее, но мы столкнулись с несколькими проблемами при правильной печати изображений. Большинство распространенных проблем можно решить, очистив печатающую головку мягкой тканью и изопропиловым спиртом. Оставшиеся проблемы были решены в ходе нескольких доработок кода, так что вам не стоит об этом беспокоиться. Также убедитесь, что принтер имеет надлежащий источник питания. Подача только 5 В приводит к низкому качеству печати изображений. Однако для печати текста 5 В должно быть достаточно.

Вот ещё один рисунок, демонстрирующий печать текста, включая штрих-код и QR-код.

Демонстрация печати текста, включая штрих-код и QR-код

В качестве бонуса я также предоставил фрагмент кода, который может распечатать профессиональную накладную НДС с помощью этого небольшого термопринтера на базе ESP32. Можете смело протестировать и это! Ниже вы можете посмотреть GIF-видео с печатью чека с помощью ESP32.

Демонстрация печати чека с помощью ESP32

Часто задаваемые вопросы об использовании ESP32 с термопринтером

⇥ Какое напряжение требуется термопринтеру на основе ESP32?
ESP32 может работать как с 3,3 В, так и с 5 В, но термопринтерам, таким как PNP-500, требуется напряжение питания 5-12 В. Рекомендуется использовать его для прямой печати, а для обеспечения необходимой насыщенности цвета и качества печати необходимо использовать отдельные источники питания или литий-ионный аккумулятор 2S (7,4 В) для принтера.

⇥ Как печатать QR-коды с помощью термопринтера ESP32?
Вам потребуется использовать последовательность команд ESC/POS для QR-кодов. Она включает в себя сначала настройку модели (команда GS(k) 29), определение размера модуля и уровня коррекции ошибок, сохранение данных с использованием параметров длины, а затем отправку команд печати. ​​Также рекомендуется генерировать QR-коды динамически.

⇥ Какой размер бумаги можно использовать с проектом термопринтера на базе ESP32?
PNP-500 может использовать термобумагу шириной 57 мм (2 дюйма) для области печати 48 мм; рулоны бумаги диаметром менее 40 мм поместятся в отсек для хранения, что составляет примерно 16-20 метров длины бумаги для печати.

⇥ Какие форматы штрихкодов можно использовать в проекте термопринтера на базе ESP32?
Термопринтеры на базе ESP32 печатают CODE128, UPC-A, EAN13 и другие форматы, как и ожидается, в существующих форматах штрихкодов, традиционно используемых коммерческими предприятиями по всему миру. Используйте команды ESC/POS для настройки размера штрихкодов, их высоты, ширины и положения текста HRI перед отправкой соответствующих команд данных через UART с помощью старых стандартных команд ESC/POS.

⇥ Как устранить неполадки в проекте с термопринтером на базе ESP32?
Напряжение, подаваемое на систему принтера, должно быть 6 В + вольт, как правило, это минимальное рекомендуемое напряжение питания. Очистите печатающую головку термопринтера изопропиловым спиртом (IPA). Проверьте соединения унитаза — убедитесь в наличии UART и скорости передачи данных (9600). Убедитесь, что вы используете высококачественную термобумагу — правильно загрузите её и проверьте отсутствие изменения цвета, а также проверьте состояние ленточного кабеля, подключенного от печатающей головки к микросхеме UART (если применимо).

На этом мы завершаем этот урок. Вы узнали, как работают термопринтеры, как с ними взаимодействовать и даже как печатать пользовательские изображения и счета-фактуры. Независимо от того, создаете ли вы принтер чеков на ESP32 или интегрируете функцию штрихкодирования, этот урок закладывает основу для масштабируемых решений печати. ​​Наш проект демонстрирует, как использовать термопринтер в сочетании с ESP32 для различных приложений. 

(Проголосуй первым!)
Загрузка...
43 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *