Еще один термопринтер

Оказывается, что термопринтеры бывают разные, точнее — могут иметь разные модификации.

IMG_0748

Например, вот у этого термопринтера

https://zhevak.wordpress.com/2013/12/18/термопринтер-cashinotech-csn-a2-t/

— интерфейс последовательный с уровнями сигналов +3.3В.

А вот термопринтер, который я сегодня забрал на почте, имеет интерфейс RS232. Этот принтер я заказывал тут:

http://www.aliexpress.com/snapshot/308597192.html

И хотя в его описании сказано «RS232 TTL», но вскрытие показало, что рядом с разъемом находится микросхема SIPEX SP3232EEN, которая и обеспечивает стандартные уровни напряжений для RS232.

IMG_0750

Вообще впечатление от принтера у меня сложилось неоднозначное. И я сейчас поделюсь своими соображениями.

1. Срок поставки. Я заказал пару принтеров 18 Декабря 2013 года, а получил их только сегодня — 17 Апреля 2014 года. Что интересно, на посылке наклеен стикер с почтовой круглой печатью, где среди китайских иероглифов хорошо видна дата 2013.12.27. И более на упаковке никаких отметок нет. Единственный намек на то, что пакет преодолел очень длинный путь — это стикер с надписью «ROTTERDAM, Netherlands».

2. Приятная цена принтера. Я покупал принтеры по $25, сейчас они стали чуть дороже — $27. Но это все равно в два раза дешевле, чем принтер, который я приобрел полгода назад через ebay.

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

4. Корпуса принтеров сделаны из белой пластмассы. На фотках они смотрятся чудненько. Собственно, мне это понравилось, поэтому я заказал именно белые.

Но у корпусов белого цвета оказалась пара недостатков. На белом корпусе очень отчетливо видны темные не совсем ровные щели прилегания крышки для рулона бумаги. Это выглядит как-то не очень красиво. И я так подозреваю, что и пачкаться белый корпус будет весьма быстро и намного заметнее.

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

IMG_0747

Но вот, с низу плату с микроконтроллером у белого братца прикрывает не металлическая пластина, а какой-то кусочек несерьезно-тонкого пластика, я бы сказал — кусочек пленочки. Как бы — «не внушает!»

IMG_0753

(Чтобы сфотать эту белую пленочку нормально пришлось положить ее на синюю тетрадь.)

6. У «белого» принтера вместо двух разъемов — для питания и для интерфейса, присутствует только один. Документации на плату нет, но это не проблема.

Я открыл крышки у белого и черного принтеров что бы сравнить их платы.

IMG_0749

Печатные платы оказались абсолютно одинаковые! Разница только в припаянных на них элементах. Что называется — «найди семь отличий» (фотки кликабельны!):

IMG_0750

IMG_0751

На плате принтера с интерфейсом RS232 присутствует микросхема SP3232, а на плате принтера с интерфейсом UART вместо микросхемы впаяны резисторы-перемычки и отсутствуют конденсаторы, которые нужны для конвертеров напряжения этой микросхемы.

Иначе говоря, ничто не мешает превратить эти принтеры c интерфейсом RS232, в принтеры с интерфейсом UART. Наверно я так и сделаю.

Я отвинтил плату.

IMG_0754

С обратной стороны платы названия контактов оказались подписаны:

IMG_0756

И хотя в комплекте с принтерами шли кабели к разъему, я решил-таки убрать этот разъем:

IMG_0755

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

Продавец Andrew Wu прислал могучее письмо — аж на 11 мегабайт с документацией на английском и китайском языках. В письме были также фотки принтера, часть из них я уже разместил в этой статье.

Документацию на английском поместил сюда:

http://webfile.ru/file/a2a919bef327c68f7ee45b0d3538f8be

Доку на китайском я решил не выкладывать в общий доступ. Не вижу в этом смысла.

И наконец, я воспользовался прогой, которую мне прислала Shirly Wu, и изменил им установки. Я установил принтерам скорость 115200 и кодовую таблицу CP1251. Для реконфигурирования принтеров я подключился к питанию копмпа +5В и к разъему последовательного порта RS232 (COM-port). Всё прошло очень легко и гладко и без каких-либо намеков на проблемы.

И напоследок скажу еще пару слов как оживить принтер под Линуксом. Я это сделал с помощью программы на Python. Вот она:

#!/usr/bin/env python
#coding:utf-8

import serial

sp = serial.Serial("/dev/ttyS0", 115200, timeout = 1)

sp.write("Привет мир!\n")

sp.close()

Нужно сохранить этот текст в файле (например, hello.py).

Вот тут следует сделать небольшое но очень нужное замечание.

Дело в том, что принтер понимает кириллицу только кодовых таблиц CP1251 (Windows), CP866 (DOS) и еще доисторическую КОИ-8, которая господствовала на компах до эпохи IBM PC. Но принтер напрочь отказывается работать с кодировкой utf-8, которая используется в Линуксе.

Но не стоит впадать в панику и проклинать Линукс. Линукс всеядный. Он жрет даже то, от чего лицо Шиндовс становится синим и она умирает.

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

CP1251

Не смотря на то, что кодировка файла Виндовая, Линукс тем не менее будет работать с этим файлом как с родным. Если вы не специально не обратите свое внимание на кодировку файла, то вы это обстоятельство никак не обнаружите.

После сохранения файла нужно с помощью команды:

$ chmod +x hello.py

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

Первая строка говорит оболочке (bash), как правильно запустить эту программу (этот файл). Конкретно — сначала запустить команду env, которая найдет в системе Python и «скормит» ему этот файл.

То есть, для запуска программы вам достаточно набрать ее имя в командной строке:

$ ./hello.py

Для тех, кто в Линуксе недавно, это может показаться несколько запутанным — дескать, зачем так сложно? На самом деле это не сложно. Если вас это морально напрягает, вы это же самое можете сделать руками:

$ python hello.py

Следующая строка позволит Python-у правильно работать с кириллицей.

Далее, для работы с последовательным портом нам необходим модуль serial, который мы импортируем следующей строкой в программе.

Строка

sp = serial.Serial("/dev/ttyS0", 115200, timeout = 1)

Создаст объект последовательного порта /dev/ttyS0 и назначит ему (объекту) имя sp. Порт будет открыт на скорости 115200 Бод, с таймаутом 1 секунда.

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

Вот, пожалуй это всё, что нужно для старта. Желаю вам приятного и полезного времяпрепровождения!

16 responses to “Еще один термопринтер

  1. Я заказывал такой же и там же, после прочтения вашего поста. Мой пришел уже довольно давно. Мой с интерфейсом rs232. Подключал его к винде как Generic text only printer. Схема подключения есть, могу скинуть. Там в разъеме есть проводок 2 CTS, как его можно использовать программно ?

    1. VH, the power supply for the board
    2. CTS, Paper detector(Default) or CTR flow control(GS a command set)
    3. TXD, the transmit pin for UART
    4. RXD, the receive pin for UART
    5. GND

    // Для торговли я бы не советовал его использовать, по своему опыту могу предсказать, девки-продавщицы его мигом угрохают.

    • 1. Спасибо за информацию по разъему.

      У меня немного другая цоколевка. Я вытащил из принтера плату. Оказалось, что разъем подписан на обратной стороне платы:

        1. VH
        2. DTR
        3. TX
        4. RX
        5. G

      2. Вообще сигнал CTS нужно использовать как сигнал для притормаживания компа при отправке данных в принтер. То есть он предназначен для сообщения компу состояния принтера, что он (принтер) не может принимать данные. Если комп проигнорирует это сигнал, то принтер просто эти данные откинет.

      Однако остается вопрос — а ПО принтера использует этот сигнал или он только физически присутствует на плате принтера? Это нужно проверить. Наверно я это тоже сделаю. Интересно же! Да и определенная польза тоже есть.

      3. Я не занимаюсь торговлей. У меня нсколько другая специфика.

  2. Добрый день.
    Есть у меня CSN-A2-T. Купил на у дилеров adafruit и их же библиотеки использую. Но дорого и нет теперь в наличии. Хочу попробовать http://www.aliexpress.com/item/embedded-mini-printer-serial-ttl-rs232-vxd/1414587041.html — как у Вас, но с TTL. Александр Антонович, Вы, наверное, единственный русский владеющий обоими образцами. Как думаете, заведется на старых библиотеках? У Вас на одном ПО оба работают? Хочется некой унификации.
    И если не затруднит, сбросьте на —-@a———a.es программку от Shirly Wu.
    Заранее благодарен.

    • >> Как думаете, заведется на старых библиотеках?
      Извините, не понял про какие библиотеки идет речь.

      >> У Вас на одном ПО оба работают?
      Я и тут не совсем понял Вас. Если Вы имеете в виду ПО, которое зашито в микроконтроллере принтера, то я не могу ответить на Ваш вопрос. Я не знаю что конкретно делает программа Ширли Ву — зливает ли она только конфигурационные данные в принтер (ну, может быть еще таблицы растеризации символов) или она целиком перепрошивает всё ПО принтера (за исключением загрузчика). Единственное что я могу Вам сказать — так это только то, что программой Ширли Ву я программировал оба типа принтеров. Оба принтера программируются нормально.

      Разница между двумя типами принтеров состоит только в уровне и полярности сигналов, которыми они связываются с внешним миром.

      TTL-версия принтера использует сигналы микроконтроллеров непосредственно. То есть уровень логического нуля равен 0 Вольт. Уровень логической единицы равен +3.3 В.

      Версия RS232 принтера использует уровни сигналов стандарта RS232 (извините за тавтологию!). Здесь уровень логического нуля — это напряжение от плюс 3 до плюс 15 Вольт. Уровень логической единицы — напряжение от минус 3 до минус 15 Вольт.

      Микросхема, отсутствующая на плате принтера версии TTL, как раз занимается тупым преобразованием уровней сигналов. Таким образом, для подключения к компу нужно использовать версию принтера с интерфейсом RS232. Если требуется подключить принтер непосредственно к самодельному устройству на базе микроконтроллера, то лучше использовать TTL-версию принтера. Но если по каким-то причинам под рукой оказалась не та версия принтера, то переделать ее в нужную, я думаю, не должно составлять большого труда для человека, знающего электронику и умеющего паять.

      Программу для конфигурации принтера выслал Вам на почту. Здесь Ваш адрес изменю, дабы не навлекать на Вас спамеров.

      UPDATE 19.02.2015-11:52

      Опаньки!

      ————————————————-
      К сожалению, Ваше письмо не может быть доставлено одному или нескольким получателям:

      —-@a———a.es
      SMTP error from remote mail server after end of data:
      host ASPMX.L.google.com [74.125.205.27]: 552-5.7.0 This message was blocked because its content presents a potential
      552-5.7.0 security issue. Please visit
      552-5.7.0 http://support.google.com/mail/bin/answer.py?answer=6590 to review our
      552 5.7.0 message content and attachment content guidelines. vk9si4617702lbb.58 — gsmtp

      Рекомендуем Вам проверить корректность указания адресов получателей.
      ————————————————-

      Похоже ругань идет на зипованный архив с программой. Сейчас я еще раз попробую отправить письмо, только вложу файл не .zip файл, а переименую его в .jpeg. Может проглотит 😦

  3. Спасибо большое. И еще одно за то, что изменили e-mail, а то я уже хотел Вас просить. Я почему-то решил что он сам так отобразится 🙂

    Когда я говорил о библиотеке, я имел ввиду Python библиотеку https://github.com/adafruit/Python-Thermal-Printer

    Что касается TTL и RS232, то я понимаю разницу. Тем более, я хочу заказать принтер без RS232 сразу с TTL – у них есть такая опция. Беспокойство вызвает именно ПО зашитое в принтер. Элементная же база идентична, как я понимаю. Вопрос насколько они различаются на уровне работы с Python.

    Думаю, надо заказать а там разберусь 🙂

    • Я не знаком с библиотекой Adafruit. Название это я вроде бы уже где-то видел, но где, вспомнить не могу. А искать не охота.

      Элементная база принтеров идентична, за исключением установки компонент, отвечающих за тип интерфейса. Печатная плата (рисунок, дорожки) — одна и та же.

      Вы можете заказать принтер с интерфейсом RS232, а потом феном «сдуть» микросхему. А когда понадобится, заново запаять её.

      Схема принтер очень стандартна. Никаких изысков в схемотехнике нет.

  4. Пришел такой, тестовую страницу не печатает, печатает половину первой строки, после этого пустота.

    Сменил кодировку на 1251, после этого на тестовой странице печатает «cp1251» с новой строки бесконечно и все.

    Драйвера под виндоус установил, не печатает ничего, кодировки, блокноты, то застревает печатать, то печатает пустое, все бестолку.

    Микроконтроллер приедет не скоро, хочется печатать средствами пк, не подскажите как?

    • Да ж не знаю что и сказать!

      Может блок питания слабоват? У Вас есть чем померить напряжение питания во время печати? Конечно, лучше бы посмотреть осциллографом.

      Попробуйте параллельно питанию воткнуть электролитический конденсатор на 1000-5000 мкФ.

      • Да, спасибо, проблема была именно в этом.
        Мне пришел, так сказать, третий вариант этого принтера с установленным белым разъемом, но без платы SP3232 )
        Фото здесь: https://www.dropbox.com/s/py9yihj9r77usj4/Screenshot_2015-05-09-14-12-13.png?dl=0
        Подключается странно.
        1. От белого разъема кабелем из комплекта подключил через переходник USB-UART к ПК. Шьется, но питание для печати слабовато (так и должно быть)
        2. В свободные от белого разъема отверстия слева впаял два провода и подключил к ним внешнее питание. Стал печатать тестовую страницу. Подключаю к ПК: для переходника USB-UART оставляю только rxt и txd, подключаю внешнее питание. Не шьется! Переходник мигает диодами для rxt и txd, но программа смены кодировки выскакивает с ошибкой.
        3. Ладно, на переходник прокинул оставшиеся VH и Ground из белого разъема (таким образом по моей логике принтер получает питание и от usb разъема и от внешнего источника). Работает. Шьется, печатает.
        Еще пробовал внешнее питание подводить в VH и G в белом разъеме, а на UART переходник кидать только rxt и txd, но так тоже не работает.

        Таким образом, рабочая схема получается только тогда, когда из белого разъема все подключено к переходнику UART на пк (включая питание, не только txd, rxd) и плюс к этому используется внешнее питание. Так и должно быть?

      • Мне сложно прокомментировать, что там у Вас не так. Я с трудом представляю, что Вы делаете. Поэтому, я буду предполагать, что Вы не электронщик. Но если это не так, прошу на меня не обижаться. Я искренне хочу помочь Вам.

        Итак. При подключении цепей RxD и TxD нужно подключить еще и общий провод. Вы это сделали?

        Следующий момент — провод RxD от конвертера USB-UART нужно подключить на точку TxD у принтера. И наоборот — TxD на RxD. У Вас так же?

        Обратите внимание, что и напряжение питания, и уровни сигналов у принтера и у конвертера должны быть одинаковыми. Нежелательно подключать 5-вольтовый переходник к 3.3-вольтовому принтеру. Возможно даже будет работать, но лучше не рисковать. Я не знаю микроконтроллер LPC, который применяется в принтере. Выводы у него могут быть толерантны к 5-вольтовым сигналам, а могут и нет. С кого спрос, если Ваш конвертер окажется 5-вольтовым?

        Контакты G (GND) на разъемах питания и сигнальном — соединены вместе. Контакты VH также соединены вместе. Поэтому можно их использовать хоть на том, хоть на другом разъеме.

        Из меня плохой шаман. Я не умею ставить точные диагнозы дистанционно. Извините, если что не так.

      • Т.е. что меня удивляет, что на схемах, которые я находил rxt и txd кидались на ардуино, а питание VH G прокидывалось либо на внешнее питание, либо на VH G ардуино. С пк так не получилось, пришлось подключать все одновременно.

      • Питание VH должно быть 9-12В и обеспечивать хорошие токи. Сейчас на вскидку не скажу сколько, но 1-2 ампера наверняка нужно обеспечить. Иначе светодиоды в печатной головке не создадут мощного излучения и не разогреют бумагу.

        Если Вы попытались запитать принтер вообще от USB, который выдает всего 5 В, и ток не более 0.1 мА (0.5 мА — по запросу), то, естественно, этот вариант не пройдет.

  5. Здравствуйте!
    А у Вас еще сохранилась программа от Shirly для смены скорости передачи этого принтера?

  6. Надежды мало, но всё же попрошу и в меня кинуть сию чудную программу. d——-t@me.com

Ответить на zhevak Отменить ответ