Термопринтер Adafruit: характеристики и подключение к Arduino

Термопринтер Adafruit: характеристики и подключение к Arduino

Чековый термопринтер печатает текст, штрих-коды и картинки на ленте 57 мм. Разбираем характеристики, подключение по UART и печать кириллицы.

Что умеет принтер

Термопринтер Adafruit выводит на чековую ленту текст, в том числе русский, штрих-коды и растровые изображения. Используется термальная бумага стандартной ширины 57 мм в рулонах диаметром до 36 мм. Чернил и картриджей нет: изображение создаёт нагретая печатающая головка, температура которой доходит до 200 °C. В местах контакта бумага темнеет, и на ленте появляется нужный рисунок.

Термопринтер Adafruit

Питается устройство постоянным напряжением 5–9 В, а данные получает по интерфейсу UART с TTL-уровнями.

Разъёмы питания и данных термопринтера

Органы управления и самотестирование

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

Тестовая распечатка с характеристиками принтера

На верхней панели находится зелёный светодиод, по которому определяют состояние устройства:

  • не горит — принтер выключен;
  • мигает — принтер включён;
  • горит постоянно — спящий режим.

Кнопка прокрутки продвигает ленту на 10 мм за одно нажатие.

Технические характеристики

Напряжение питания5–9 В
Потребляемый токдо 1,5 А при печати, до 10 мА в ожидании
ИнтерфейсTTL UART
Метод печатипрямая термическая печать
Ширина бумаги / диаметр рулона57 мм / 36 мм
Ширина печати48 мм
Скорость печатидо 80 мм/с
Разрешение203 DPI (8 точек на мм, 384 точки в линии)
Форматы штрих-кодовUPC_A, UPC_E, EAN13, EAN8, CODE39, CODE93, ITF, CODABAR, CODE128
Рабочая температура+5...+45 °C
Температура хранения-20...+60 °C
Габариты111x65x59 мм

Размер одного пикселя составляет 1/8 мм. Принтер поддерживает ASCII и набор GB2312-80 с большим количеством кодовых таблиц, среди которых CP437, CP850, CP866, WCP1251, WCP1252, KATAKANA, THAI и другие. Для русского текста важны таблицы CP866 и WCP1251.

Подключение к Arduino

С платой Arduino принтер связывается по UART. Можно задействовать аппаратный порт на контактах 0 и 1 либо программный, организованный библиотекой SoftwareSerial. В примерах используется второй вариант: программный порт создаётся на выводах 5 и 6 и работает на скорости 19200 бод.

Схема подключения термопринтера к Arduino

Для управления печатью удобна библиотека Adafruit_Thermal. Объект принтера получает ссылку на программный последовательный порт, после чего инициализируется вызовом begin(). Кодовая страница выбирается методом setCodePage, например thPr.setCodePage(CODEPAGE_CP866) для кириллицы. Первый проверочный скетч печатает таблицу всех символов CP866 в виде сетки 16х16 с шестнадцатеричными индексами строк и столбцов, заменяя управляющие коды меньше 32 пробелами, а затем возвращает принтер к настройкам по умолчанию методом setDefault().

Проект: случайная цитата по кнопке

В качестве практического примера собирается устройство, которое по нажатию кнопки печатает случайно выбранную цитату. Для него нужны:

  • плата Arduino;
  • плата прототипирования;
  • термопринтер;
  • блок питания 5 В 2 А;
  • кнопка и резистор 10 кОм;
  • соединительные провода.

Кнопка подключена к выводу 9, принтер — к тем же выводам 5 и 6. Строки с цитатами хранятся в скетче. В setup() принтер инициализируется, сбрасывается к настройкам по умолчанию и переводится в сон методом sleep(). В основном цикле опрашивается кнопка с программным подавлением дребезга (повторное чтение через 5 мс). При нажатии номер цитаты выбирается как остаток от деления millis() на количество цитат, принтер пробуждается вызовом wake() — без этого печать после сна не начнётся, — выбирается страница CP866 и текст отправляется на печать.

Перекодировка русского текста

Строки в Arduino IDE хранятся в UTF-8, а принтер ожидает CP866, поэтому перед печатью текст пропускают через вспомогательную функцию RUS(). Она просматривает строку и заменяет двухбайтовые последовательности кириллицы однобайтовыми кодами: для пары с первым байтом 0xD0 и вторым в диапазоне 0x90–0xBF из второго байта вычитается 0x10 (буквы А–Я и а–п), для пары с 0xD1 и вторым байтом 0x80–0x8F к нему прибавляется 0x60 (буквы р–я). Буквы Ё и ё получают коды 0xF0 и 0xF1. Остальные символы остаются без изменений, а освободившийся хвост строки заполняется нулями.

Если принтер не работает

  • Зелёный светодиод не мигает после подачи питания — следует проверить соединение с блоком питания.
  • Принтер не печатает — проверяют питание, правильность подключения к контроллеру и мощность блока питания: он должен выдавать не менее 2 А.

← Все статьи