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

Ссылка на репозиторий GitHub.

Список необходимых компонентов:

  • 2 аккумулятора 18650;

  • BMS контроллер;

  • OLED экран 128×64;

  • плата зарядки;

  • USB‑TTL конвертер CH340;

  • зуммер;

  • конвертер уровней;

  • модуль термопринтера qr204;

  • энкодер;

  • понижающие dc‑dc стабилизаторы напряжения;

  • кнопки и резисторы.

Сборка

Для начала я изготовил печатную плату.

Для изготовления печатных плат можно использовать различные технологии, но я остановился на технологии фоторезиста, так как в данном проекте используются тонкие дорожки и необходима высокая точность. Также для защиты платы я покрыл ее специальной маской (Mechanic). На картинке ниже представлена готовая печатная плата.

Далее я припаял все элементы на свои места. Плата после пайки представлена на рисунке ниже.

Корпус я распечатал на 3D принтере, а модель спроектировал в программе Fusion 360. Fusion 360 — это облачная платформа САПР, которая является доступной, высокоэффективной альтернативой другим аналогичным программным продуктам. Он прост в использовании и обладает всеми функциями, которые содержат популярные пакеты САПР. Готовое устройство после сборки можно увидеть на рисунке ниже.

Программирование

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

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

В интернет-ресурсах можно было найти список ESC/POS команд. Однако не все они работали, поэтому мне пришлось скачать программу Print_Assistant. Данная программа хорошо работала с моим модулем. Особенностью данной программы было то, что в специальном окне можно было видеть какие именно команды она отправляла на принтер в формате HEX. Таким образом я отправлял нужные мне команды через эту программу и переписывал HEX команду в свою программу.

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

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

Как же программа понимает, что именно ему печатать? Здесь все довольно просто: первый пакет данных – это всегда команды. Этот пакет содержит в себе переменные, разделенные символом «@». Первый элемент обозначает, что именно печатать: текст, QR-код, штрих-код или чек. Остальные элементы обозначают настройки, которые необходимо установить перед печатью. После этого программа принимает оставшиеся пакеты данных, содержащие информацию, которую нужно распечатать. Вся программа представлена в репозитории GitHub. Также там можно скачать само приложение.

Приложение

Приложение я разработал в программе Kodular Creator. Это аналог популярной программы Mit App Inventor. Разница лишь в том, что Kodular Creator имеет хороший дизайн, благодаря чему можно создавать красивые приложения за короткое время.

Разберу интерфейс моего приложения. На рисунке ниже представлена первая вкладка.

В этой вкладке можно печатать любой текст, меняя его размер и форматирование.

Назначение кнопок:

«B» - полужирный шрифт;

«U» - подчеркивание

«Т» - ширина и высота символа;

«А» - инвертирование текста (черный текст на белом фоне или наоборот).

Третья кнопка сверху слева предназначена для установки выравнивания текста.

Левая кнопка на втором ряду – для очистки поля для ввода текста, а правая – для отправки на печать.

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

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

Следующая вкладка — печать чеков (на рисунке ниже).

В данной вкладке необходимо указать ФИО кассира и номер смены. После этого можно добавлять товары, указав наименование, НДС, стоимость и количество. Далее программа предложит выбрать способ оплаты, после чего можно распечатать чек.

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

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


Статью подготовил И. Гараев, студент 4 курса специальности «Компьютерные системы и комплексы» ГАПОУ «МЦК-КТИТС».

Комментарии (9)


  1. HEXFFFFFFFF
    06.07.2023 08:10
    +4

    Для студента в общем не плохо, хотя раньше подобные (соответствующие своему времени) поделки шестиклассники делали)))

    Из косяков:

    Дорожки под антенной областью недопустимы если используется радиосвязь.

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

    Рекомендую:

    Во первых слезть с ардуино ide и перейти на что то более адекватное , например Visual studuo code с platformio. Это резко упрощает жизнь и дает возможность писать нормальный код.

    Во вторых для ваших задач рекомендую esp32- S3, он имеет встроенный usb, отпадает надобность в ch340 , упрощается отдадка и заливка кода в проц.


    1. LAutour
      06.07.2023 08:10
      +2

      Дополню: кроме отсутствия дорожек по антенной - там еще зона рядом должна быть от них свободна. А про CH340: если ее использовать, то добавив пару транзисторов можно было выкинуть необходимость нажимать кнопки для прошивки.


    1. voldemar_d
      06.07.2023 08:10
      +1

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

      То, что это упрощает жизнь, понятно. Можете пояснить, что имеется ввиду под "дает возможность писать нормальный код"? В последних версиях Arduino IDE доступны фичи C++11/14/17 - всякие лямбды и прочее. Чего там нет, что есть в VS Code, и какой "нормально код" недоступен в Arduino IDE?

      Спрашиваю не просто так - сам подумываю перейти с Arduino IDE.


      1. HEXFFFFFFFF
        06.07.2023 08:10

        Последние версии не смотрел, но раньше там не было отладки , (дебага - через отладчик). Не возможно было нормально разбить проект на файлы, библиотеки- концепт был писать все в один файл .ino С написанием библиотек были трудности , не было автоподстановки итд.


        1. voldemar_d
          06.07.2023 08:10
          +1

          VS Code позволяет отлаживать Arduino? Умеет ставить break points в коде железки, которая по USB подключена?

          Нормально разбить проект - в чем проблема какой-нибудь класс вынести в отдельный .h-файл? Библиотек для Arduino море есть, как раз в отдельных файлах. Раньше так нельзя было?

          Автоподстановка - что имеется ввиду?

          Я не защищаю Arduino IDE, просто разобраться хочу. Мне в нём банальных всплывающих подсказок над кодом не хватает и хотя бы закладок в коде, по которым быстро переходить можно.


  1. DoMoVoY
    06.07.2023 08:10
    +5

    Пропущен этап разводки платы. Не показана компоновка модулей внутри корпуса. Где автор брал протокол работы с принтером, как он устроен? И я считаю статью должен публиковать сам автор - выглядит, как раскрутка блога путем слабой адаптации курсовой работы (много воды) в технический ресурс.


  1. iliasam
    06.07.2023 08:10
    +2

    Так и не понял, зачем девайсу экран и энкодер, если управление идет по bluetooth?

    И почему нельзя было взять модуль bluetooth-uart, и подключить его к модулю принтера напрямую?


  1. voldemar_d
    06.07.2023 08:10

    У меня тоже много вопросов. ТЗ почти не раскрыто. Термопринтер - это понятно, но какой был поставлен список требований к нему при разработке? Действительно, если управление по BT, нельзя было обойтись без экрана и энкодера? Или это учебный проект (курсовая?), в рамках которого стояла задача, в том числе, разобраться, как работать с такими элементами?


  1. WhiteApfel
    06.07.2023 08:10

    Escpos: ну да ну да