Захотелось мне компактный принтер этикеток приобрести. Чтобы там коробочки и бутылочки всякие маркировать. Выбор пал на нынче популярный Bluetooth принтер Niimbot D110.
Приложение для него существует только для телефона. Это удобно в тех условиях, когда нет компьютера под рукой. И в случае, если приложение сделано хорошо.
Попробуйте проект NiimBlue!
Проект был создан спустя некоторое время после написания данной статьи и предоставляет собой полноценный веб-интерфейс для создания этикеток и их печати.
А пока мы имеем:
Поэтому попробуем напечатать этикетки при помощи компьютера.
Существует проект AndBondStyle/niimprint (доработанный форк kjy00302/niimprint) на Python. Проект реализует протокол обмена принтера и позволяет печатать картинки с компьютера по Bluetooth. Если последнего на компьютере нет, то необходим адаптер. У меня такой:
Ко всему прочему при печати этим способом игнорируется проверка оригинальности ленты, поэтому можно печатать на чём попало. Для тестов я вставлял куски чеков, чтобы не тратить этикетки.
Данные моего принтера:
Серийный номер: G326030306
Аппаратная версия: 13.10
Версия прошивки: 13.10
У принтера два mac адреса. Один обычный, другой - BLE. В моём случае это:
03:26:03:C3:F9:11
- нужный26:03:03:c3:f9:11
- BLEНужный нужный адрес я нашёл с помощью BluetoothView. Утилита не показывает BLE устройства, а это как раз нам и надо.
Теперь займёмся niimprint. Инструкция для Windows.
Устанавливаем Python 3.11+, если ещё это не сделали. Открываем окно команд.
Клонируем или скачиваем репозиторий
git clone https://github.com/AndBondStyle/niimprint
Переходим в директорию репозитория
cd niimprint
Создаем и активируем виртуальное окружение, чтобы не засорять глобальный список пакетов
python -m venv venv
venv\Scripts\activate
Теперь устанавливаем зависимости. Тут уже как больше хочется.
Напрямую
pip install -r requirements.txt
Далее из-за того, что проект выполнен в виде модуля, чтобы всё работало, нужно выполнить
set PYTHONPATH=<текущий путь>
Например
set PYTHONPATH=D:\Apps\niimprint
:: или
set PYTHONPATH=%cd%
Через Poetry как задумывалось автором
pip install poetry
poetry install
Запускаем печать
Напрямую
python niimprint --model d110 --conn bluetooth --addr 03:26:03:C3:F9:11 --rotate 90 --density 2 --image template_15x30.png
--model d110
— модель принтера d110
--conn bluetooth
— тип соединения bluetooth
--addr 03:26:03:C3:F9:11
— bluetooth адрес
--rotate 90
— использовать альбомную ориентацию картинки
--density 2
— плотность 3 (1-3 для d110)
--image template_15x30.png
— изображение для печати
Через Poetry
poetry run <команда выше>
В первый раз появится запрос сопряжения
Если mac адрес указан верно, то сопряжение завершится успешно и сразу начнётся печать.
В адресной строке проводника ввести shell:sendto
и нажать Enter.
В открывшейся директории создать файл niimprint.cmd
или с другим именем по желанию.
Содержимое файла отредактировать под себя:
@echo off
set NIIMPRINT_DIR=D:\Apps\niimprint
set PYTHONPATH=%NIIMPRINT_DIR%
cd /d %NIIMPRINT_DIR%
venv\Scripts\python.exe niimprint --model d110 --conn bluetooth --addr 03:26:03:C3:F9:11 --rotate 90 --density 2 --image "%1"
if %errorlevel% neq 0 pause
Теперь кликаем правой кнопкой по картинке и выбираем niimprint.cmd
При успешной печати окно команд закроется, при ошибке - останется открытым.
Разрешение печати у D110 - 8 пикселей на мм (~203 dpi). Максимальная высота печати - 15 мм.
Максимальная высота картинки: 8 пикс. * 15 мм = 120 пикс.
Но на деле - немного меньше - 96 пикс. Это максимальное разрешение печатающей головки.
Итак, для этикетки шириной 30 мм и высотой 15 мм разрешение картинки должно быть 240 x 96
пикс. Также нужно отступить немного от краёв, так как позиционирование не совсем точное.
Картинки лучше сразу преобразовывать в чёрно-белые, без оттенков серого. Так можно сразу понять как будет выглядеть этикетка. Вот, например, как будет выглядеть шрифт, у которого остались оттенки серого:
Шрифт стал страшным и зубастым (как и происходит при печати с телефона). А теперь изначально сделаем картинку чёрно-белой:
Так уже лучше. Поэтому нужно сразу использовать шрифты, которые нормально будут выглядеть без сглаживания.
Как выглядит градиент и пиксельная сетка без постобработки (слева артефакт от прошлой печати, повторно использовал этикетку):
Шаблон 15x30мм (240x96) - проект для Krita. В проекте есть фильтрующие слои для растрирования изображения в псевдополутоновое.
Может пригодиться для проверки что получится при печати, а этикетки тратить не хочется.
Вставить замену бумаги лицевой стороной вниз
Приложить оригинальную ленту этикеткой к корпусу
Закрыть крышку.
После закрытия крышки принтер прочитает через корпус RFID метку на бобине и поймёт, что в него вставлена оригинальная лента. После этого ленту можно убрать.
⚠ Нужно понимать, что принтер каким-то образом понимает, сколько он отпечатал этикеток с конкретного картриджа (записывает в RFID метку или в собственную память). И, скорее всего, не станет печатать с телефона, когда посчитает, что исчерпал количество этикеток.
Печати через niimprint это не касается, проверка картриджа происходит на стороне клиента. Сам принтер проверяет только есть ли лента рядом с головкой (оптический датчик).
Найдены тут.
Что плохо в данном принтере - этикетки стоят каких-то дурных денег. Например, в данный момент за этикетки 15x30 хотят около 450р за катушку (210 этикеток). Расходники по стоимости трети от принтера - не здорово. Поэтому неплохо бы поискать варианты замены.
Первым делом я провёл эксперимент.
Купил я такую катушку с термоэтикетками ECO (можно и TOP). Размер 58x40, 400шт. Обошлось мне это в 60р.
Далее я смоделировал и напечатал каркас для катушки, как в оригинале.
Затем отмерил и разрезал ленту вдоль, чтобы получилась полоса 15 мм.
Ленту намотал на катушку.
В итоге получилась катушка с наклейками 15х40, на которых принтер вполне себе спокойно печатает, при этом датчик в принтере успешно обнаруживает промежуток между наклейками.
Тест печати с разной плотностью. Последняя получилась после нажатия кнопки на принтере:
Понятно, что наклейки будут не такие долговечные, но по стоимости это ничто в сравнении с оригинальными картриджами.
Принтеры с похожими лентами: