SkillAgentSearch skills...

Pyescpos

Support for Epson ESC/POS printer command system.

Install / Use

/learn @base4sistemas/Pyescpos
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

PyESCPOS

.. image:: https://img.shields.io/pypi/status/pyescpos.svg :target: https://pypi.python.org/pypi/pyescpos/ :alt: Development status

.. image:: https://img.shields.io/pypi/pyversions/pyescpos.svg :target: https://pypi.python.org/pypi/pyescpos/ :alt: Supported Python versions

.. image:: https://img.shields.io/pypi/l/pyescpos.svg :target: https://pypi.python.org/pypi/pyescpos/ :alt: License

.. image:: https://img.shields.io/pypi/v/pyescpos.svg :target: https://pypi.python.org/pypi/pyescpos/ :alt: Latest version


A Python support for Epson |copy| ESC/POS |reg| compatible printers. Read more at Epson ESCPOS_ Command Reference.

The ESC/POS |reg| is a standard that every manufacturer work on and modify to suit their needs. That way, a sequence of commands in one printer does not necessarily works (or does not work as expected) on another. At a distance, you can say that all those tricky commands are identical from model to model (a standard), but when you look just a little bit more deeper, you quickly realize that they can be completely different, even between models belonging to the same manufacturer.

This project aims to simplify the usage of printers, seeking for a lowest common denominator between needed features and providing implementations that meet this minimum for known models, so you do not have to modify the application code.

Current Implementations

Current implementations was tested against following hardware:

+-------------------------+-------------------+-------------------+-----------------------------------------+ | Manufacturer | Models | Firmware Versions | Notes | +=========================+===================+===================+=========================================+ | Bematech S/A_ | MP-2800 TH | 2.2.1BQL | | | | | | | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Bematech S/A_ | MP-4200 TH | 1.3, 1.6 | | | | | | | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Control iD_ | Print iD Touch | 1.3.0 | | | | | | | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Epson_ | TM-T20 | 1.14 | | | | | | | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Elgin_ | Elgin i9 | 1.03.20, | | | | | 1.03.24, | | | | | 1.03.31 | | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Elgin_ | Elgin i7 | 1.00.08 | | | | | | | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Elgin_ | Elgin RM-22 | 1.00.09 | Elgin RM-22 portable thermal mini | | | | | printer | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Nitere_ | NPDV-1020 | - | Multifunction Terminal model TMF-101/IG | | | | | (an alias for CB55-C model) | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Unknown OEM | CB55-C | 1.3.5 | Embedded in Nitere_ NPDV-1020 (model | | | | | TMF-101/IG) | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Urmet Daruma_ | DR700 L/H/M and | 02.51.00, | | | | DR700 L-e/H-e | 01.20.00, | | | | | 01.21.00 | | +-------------------------+-------------------+-------------------+-----------------------------------------+ | Urmet Daruma_ | DR800 L/H | 03.13.01 | | | | | | | | | | | | +-------------------------+-------------------+-------------------+-----------------------------------------+

You can get a list of all available implementations with the following snippet:

.. sourcecode:: python

from escpos import helpers

for impl in helpers.find_implementations(sort_by='model.name'):
    print('{:.<25} {}'.format(impl.model.name, impl.fqname))

Which produces an output similar to::

Bematech MP-2800 TH...... escpos.impl.bematech.MP2800TH
Bematech MP-4200 TH...... escpos.impl.bematech.MP4200TH
CB55-C................... escpos.impl.unknown.CB55C
Daruma DR700............. escpos.impl.daruma.DR700
Daruma DR800............. escpos.impl.daruma.DR800
Elgin I7................. escpos.impl.elgin.ElginI7
Elgin I9................. escpos.impl.elgin.ElginI9
Elgin RM-22.............. escpos.impl.elgin.ElginRM22
Epson TM-T20............. escpos.impl.epson.TMT20
Generic Daruma........... escpos.impl.daruma.DarumaGeneric
Generic ESC/POS.......... escpos.impl.epson.GenericESCPOS
Generic Elgin............ escpos.impl.elgin.ElginGeneric
Nitere NPDV-1020......... escpos.impl.nitere.NitereNPDV1020
Print iD Touch........... escpos.impl.controlid.PrintIdTouch

Usage Examples

Network TCP/IP Example

You can connect to your printer through network TCP/IP interface:

.. sourcecode:: python

from escpos import NetworkConnection
from escpos.impl.epson import GenericESCPOS

conn = NetworkConnection.create('10.0.0.101:9100')
printer = GenericESCPOS(conn)
printer.init()
printer.text('Hello World!')

Serial Example

Support for Serial connections is optional. If you need it you should have PySerial_ library installed. You may do it through PIP issuing pip install PyESCPOS[serial].

Here is how you can make a Serial connection:

.. sourcecode:: python

from escpos import SerialConnection
from escpos.impl.epson import GenericESCPOS

# connect to port 'ttyS5' @ 9600 Bps, assuming RTS/CTS for handshaking
conn = SerialConnection.create('/dev/ttyS5:9600,8,1,N')
printer = GenericESCPOS(conn)
printer.init()
printer.text('Hello World!')

Bluetooth Example

Support for Bluetooth (via RFCOMM) connection is optional. If you need it you should have PyBluez_ library installed. One option may be installing PyESCPOS through PIP issuing pip install PyESCPOS[bluetooth].

Here is how you can make a Bluetooth connection:

.. sourcecode:: python

from escpos import BluetoothConnection
from escpos.impl.epson import GenericESCPOS

# uses SPD (service port discovery) services to find which port to connect to
conn = BluetoothConnection.create('00:01:02:03:04:05')
printer = GenericESCPOS(conn)
printer.init()
printer.text('Hello World!')

If you know in which port you can connect beforehand, just pass its number after device address using a forward slash, for example 00:01:02:03:04:05/4, will connect to port 4 on 00:01:02:03:04:05 address.

USB Example

Support for USB connections is optional. If you need it you should have PyUSB_ library installed. You may do it through PIP issuing pip install PyESCPOS[usb]. Be aware for printers with more than one USB interface, so you may have to configure which interface is active.

Here is how you can make an USB connection:

.. sourcecode:: python

from escpos.ifusb import USBConnection
from escpos.impl.elgin import ElginRM22

conn = USBConnection.create('20d1:7008,interface=0,ep_out=3,ep_in=0')
printer = ElginRM22(conn)
printer.init()
printer.text('Hello World!')

File Print Example

This printer “prints” just into a file-handle. Especially on *nix-systems this comes very handy. A common use case is when you have a parallel port printer or any other printer that are directly attached to the file system. Note that you may want to stay away from using USB-to- Parallel-Adapters since they are extremely unreliable and produce many arbitrary errors.

.. sourcecode:: python

from escpos import FileConnection
from escpos.impl.elgin import ElginI9

conn = FileConnection('/dev/usb/lp1')
p

Related Skills

View on GitHub
GitHub Stars78
CategoryCustomer
Updated20d ago
Forks31

Languages

Python

Security Score

100/100

Audited on Mar 10, 2026

No findings