description: Пробуем печать на Bluetooth принтере этикеток с помощью компьютера, Bluetooth адаптера и Python
---
Захотелось мне компактный принтер этикеток приобрести. Чтобы там коробочки и бутылочки всякие маркировать.
Выбор пал на нынче популярный Bluetooth принтер Niimbot D110.
Приложение для него существует только для телефона. Это удобно в тех условиях, когда нет компьютера под рукой.
И в случае, если приложение сделано хорошо.
<!--more-->
А пока мы имеем:
* при каждом входе в приложение нужно посмотреть рекламу;
* в приложении для сохранения шаблонов требуется регистрация;
* шрифты при пикселизации выглядят жутковато, непонятно как будет выглядеть этикетка до печати;
* дизайнить этикетки с помощью пальца - то ещё удовольствие;
* для просмотра заготовок, иконок требуется включать VPN;
* оптимизация оставляет желать лучшего, всё тормозит.
Поэтому попробуем напечатать этикетки при помощи компьютера.
Существует проект [AndBondStyle/niimprint](https://github.com/AndBondStyle/niimprint) (доработанный форк [kjy00302/niimprint](https://github.com/kjy00302/niimprint)) на Python. Проект реализует протокол обмена принтера и позволяет печатать картинки с компьютера по Bluetooth. Если последнего на компьютере нет, то необходим адаптер. У меня такой:
![UB500.jpg](UB500.jpg "Tp-Link UB500")
Ко всему прочему при печати этим способом игнорируется проверка оригинальности ленты, поэтому можно печатать на чём попало.
Для тестов я вставлял куски чеков, чтобы не тратить этикетки.
## Определение mac адреса принтера
Данные моего принтера:
```
Серийный номер: G326030306
Аппаратная версия: 13.10
Версия прошивки: 13.10
```
У принтера два mac адреса. Один обычный, другой - BLE. В моём случае это:
*`03:26:03:C3:F9:11` - нужный
*`26:03:03:c3:f9:11` - BLE
Нужный нужный адрес я нашёл с помощью [BluetoothView](https://www.nirsoft.net/utils/bluetooth_viewer.html).
Утилита не показывает BLE устройства, а это как раз нам и надо.
Теперь кликаем правой кнопкой по картинке и выбираем `niimprint.cmd`
![sendto](sendto.png)
При успешной печати окно команд закроется, при ошибке - останется открытым.
## Подготовка изображений
[Разрешение печати](https://github.com/AndBondStyle/niimprint/tree/main?tab=readme-ov-file#image-resolution) у D110 - 8 пикселей на мм (~203 dpi). Максимальная высота печати - 15 мм.
Максимальная высота картинки: `8 пикс. * 15 мм = 120 пикс.`
Но на деле - немного меньше - 96 пикс. Это максимальное разрешение печатающей головки.
Итак, для этикетки шириной 30 мм и высотой 15 мм разрешение картинки должно быть `240 x 96` пикс. Также нужно отступить немного от краёв, так как позиционирование не совсем точное.
**Картинки лучше сразу преобразовывать в чёрно-белые, без оттенков серого**. Так можно сразу понять как будет выглядеть этикетка.
Вот, например, как будет выглядеть шрифт, у которого остались оттенки серого: