Современные технологии играют ключевую роль в развитии автоматизации и упрощении наших повседневных задач. В рамках этого контекста, одним из наиболее распространенных устройств является термопринтер — устройство, которое использует нагрев для вывода информации на бумагу. В статье студент Казанского техникума информационных технологий и связи проходит пошагово по процессу изготовления мобильного термопринтера, с возможностью управления через мобильное приложение.
Ссылка на репозиторий 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)
DoMoVoY
06.07.2023 08:10+5Пропущен этап разводки платы. Не показана компоновка модулей внутри корпуса. Где автор брал протокол работы с принтером, как он устроен? И я считаю статью должен публиковать сам автор - выглядит, как раскрутка блога путем слабой адаптации курсовой работы (много воды) в технический ресурс.
iliasam
06.07.2023 08:10+2Так и не понял, зачем девайсу экран и энкодер, если управление идет по bluetooth?
И почему нельзя было взять модуль bluetooth-uart, и подключить его к модулю принтера напрямую?
voldemar_d
06.07.2023 08:10У меня тоже много вопросов. ТЗ почти не раскрыто. Термопринтер - это понятно, но какой был поставлен список требований к нему при разработке? Действительно, если управление по BT, нельзя было обойтись без экрана и энкодера? Или это учебный проект (курсовая?), в рамках которого стояла задача, в том числе, разобраться, как работать с такими элементами?
HEXFFFFFFFF
Для студента в общем не плохо, хотя раньше подобные (соответствующие своему времени) поделки шестиклассники делали)))
Из косяков:
Дорожки под антенной областью недопустимы если используется радиосвязь.
В коде обязательно использовать freertos или что то подобное. У вас ведь несколько задач, как минимум вывод на принтер, вывод на дисплей. Это требует потоков для расспаралеливания задач.
Рекомендую:
Во первых слезть с ардуино ide и перейти на что то более адекватное , например Visual studuo code с platformio. Это резко упрощает жизнь и дает возможность писать нормальный код.
Во вторых для ваших задач рекомендую esp32- S3, он имеет встроенный usb, отпадает надобность в ch340 , упрощается отдадка и заливка кода в проц.
LAutour
Дополню: кроме отсутствия дорожек по антенной - там еще зона рядом должна быть от них свободна. А про CH340: если ее использовать, то добавив пару транзисторов можно было выкинуть необходимость нажимать кнопки для прошивки.
voldemar_d
То, что это упрощает жизнь, понятно. Можете пояснить, что имеется ввиду под "дает возможность писать нормальный код"? В последних версиях Arduino IDE доступны фичи C++11/14/17 - всякие лямбды и прочее. Чего там нет, что есть в VS Code, и какой "нормально код" недоступен в Arduino IDE?
Спрашиваю не просто так - сам подумываю перейти с Arduino IDE.
HEXFFFFFFFF
Последние версии не смотрел, но раньше там не было отладки , (дебага - через отладчик). Не возможно было нормально разбить проект на файлы, библиотеки- концепт был писать все в один файл .ino С написанием библиотек были трудности , не было автоподстановки итд.
voldemar_d
VS Code позволяет отлаживать Arduino? Умеет ставить break points в коде железки, которая по USB подключена?
Нормально разбить проект - в чем проблема какой-нибудь класс вынести в отдельный .h-файл? Библиотек для Arduino море есть, как раз в отдельных файлах. Раньше так нельзя было?
Автоподстановка - что имеется ввиду?
Я не защищаю Arduino IDE, просто разобраться хочу. Мне в нём банальных всплывающих подсказок над кодом не хватает и хотя бы закладок в коде, по которым быстро переходить можно.