Nuestros Productos

Mi Presupuesto / Cesta

Cargando tu cesta...
Guías de Compra

Anatomía de ESC/POS: el protocolo eterno del TPV, arquitectura técnica y guía maestra de comandos

Redactado por Equipo Especialista HiperTPV
30 30Europe/Madrid octubre, 2026 • 24 min de lectura
WhatsApp LinkedIn

En una industria tecnológica caracterizada por la obsolescencia programada y la sustitución constante de estándares cada lustro, existe una excepción fascinante que desafía el paso del tiempo: el protocolo ESC/POS. Diseñado a principios de la década de 1990 para gobernar las primeras impresoras de recibos para punto de venta, este lenguaje de control de bajo nivel no solo sigue vivo, sino que continúa siendo el estándar absoluto, indiscutible e insustituible sobre el que se imprimen cientos de millones de tickets cada día en todo el planeta.

Desde el quiosco de autoservicio más futurista hasta la comanda expedida por un datáfono Android en una terraza, pasando por terminales Linux, cajas registradoras autónomas y complejas infraestructuras en la nube: casi con total seguridad, detrás de ese ticket crujiente hay una secuencia de bytes binarios que arranca con el código hexadecimal 0x1B.

En esta guía exhaustiva de ingeniería para el sector del punto de venta, desglosamos de forma metódica la anatomía de ESC/POS: sus raíces históricas, los motivos arquitectónicos de su inmortalidad, cómo funciona su intérprete de flujo de datos (*byte-stream*), un diccionario completo de sus comandos fundamentales con ejemplos reales, el clásico quebradero de cabeza de las páginas de códigos en español y cómo enviar secuencias directamente desde cualquier lenguaje y sistema operativo contemporáneo.

Guía Técnica para Desarrolladores e Integradores: Este artículo está concebido tanto para programadores de software TPV que necesitan controlar el hardware al milisegundo como para integradores de sistemas y técnicos de mantenimiento que buscan diagnosticar fallos de comunicación en impresoras térmicas de tickets. Si buscas renovar tu parque de hardware, consulta nuestro catálogo de impresoras térmicas de sobremesa y bobinas de papel térmico homologado.

1. Génesis e historia: del carro continuo al punto de venta térmico

Para comprender la genialidad de ESC/POS es imprescindible retroceder a 1980. En aquel momento, la corporación japonesa Seiko Epson dominaba el mercado de la informática personal con sus míticas impresoras matriciales de impacto de la serie MX-80. Para controlar el avance de carro, el espaciado de agujas y las fuentes tipográficas mecánicas, Epson introdujo un conjunto de secuencias de control bautizado como ESC/P (Epson Standard Code for Printers).

El concepto era tan simple como brillante: el flujo de datos contenía texto ASCII estándar para imprimir, pero cuando el procesador de la impresora encontraba el carácter de control Escape (código ASCII 27, en hexadecimal 0x1B), sabía que los siguientes bytes no debían imprimirse en el papel, sino interpretarse como una orden de configuración interna (por ejemplo: activar negrita, modificar el espaciado entre líneas o avanzar de página).

A principios de los 90, con la explosión del comercio minorista automatizado y la transición de las pesadas cajas registradoras electromecánicas hacia los terminales punto de venta (TPV) conectados a PC, las necesidades cambiaron radicalmente:

  • Ya no se imprimía en papel continuo perforado tamaño A4 con tractores de arrastre, sino en bobinas estrechas de papel térmico continuo (habitualmente de 58 mm u 80 mm).
  • Apareció la necesidad de accionar componentes periféricos específicos: una guillotina electromecánica para el corte automático de papel (*autocutter*) y un solenoide eléctrico de 24V para la apertura automática del cajón portamonedas.
  • El tiempo era dinero: imprimir una factura simplificada no podía demorarse 15 segundos ruidosamente; debía ser una operación instantánea y silenciosa mediante cabezales de resistencia térmica.

Así nació ESC/POS (Epson Standard Code for Point of Sale). Introducido junto con la histórica familia de impresoras térmicas Epson TM-T88, el protocolo definió un lenguaje binario optimizado para el punto de venta que rápidamente fue adoptado, licenciado o emulado por todos los grandes fabricantes mundiales del sector: Bixolon (Samsung), Citizen, Star Micronics, Sewoo, Custom, Rongta, Xprinter y los fabricantes de movilidad como Sunmi.

2. Por qué es el protocolo eterno: las razones técnicas de su supremacía

¿Cómo es posible que en pleno 2026, en la era de los microservicios en la nube, Docker, Flutter, WebAssembly y la inteligencia artificial, sigamos enviando secuencias hexadecimales diseñadas hace más de treinta años? La respuesta no es inercia tecnológica, sino pura superioridad arquitectónica en su caso de uso:

A. Cero dependencia del sistema operativo y de los controladores (*Driverless*)

En la ofimática tradicional (impresión en hojas DIN A4), el sistema operativo juega un papel masivo y pesado: Windows utiliza su arquitectura GDI (Graphics Device Interface) o XPS, macOS y Linux dependen de CUPS (Common Unix Printing System). Para imprimir un documento, una suite ofimática debe consultar un driver complejo, renderizar una página completa como un mapa de bits gráfico gigantesco y enviarlo en tramas de cientos de kilobytes o megabytes.

ESC/POS destruye esa complejidad. A la impresora térmica no le importa qué sistema operativo esté al otro lado:

  • Un microcontrolador de 8 bits con 2 KB de RAM (como un Arduino o un chip ESP32) puede gobernar la impresora.
  • Un servidor Linux remoto en un centro de datos de Frankfurt puede emitir un ticket directamente a través de un socket de red.
  • Una tablet iPad con iOS o un comandero móvil Android pueden escupir una orden de cocina por Bluetooth en milisegundos.

Todo lo que se requiere es la capacidad de abrir un canal de entrada/salida y transmitir una cadena de bytes brutos (*raw bytes*).

B. Independencia total de la interfaz física de transporte

ESC/POS es un protocolo de nivel de aplicación puro. Es completamente agnóstico al canal físico por el que viajan los electrones o las ondas de radio. A lo largo de cuatro décadas ha transitado sin mutar por todas las tecnologías de conexión conocidas:

Medio de Transporte Mecanismo de Envío Contexto de Uso Habitual
Puerto Serie RS-232 Línea asíncrona TX/RX (9600 a 115200 bps, 8-N-1, control DTR/DSR o XON/XOFF) Cajas de supermercado industriales, terminales de báscula y maquinaria desasistida.
Paralelo IEEE 1284 Bus Centronics de 8 bits por estrobos de reloj Instalaciones heredadas (*legacy*) de hostelería y comercio clásico.
USB (Direct / Virtual COM) Puntos de acceso USB Bulk Out (Endpoint 0x01) o emulación CDC ACM El estándar reinante en terminales TPV táctiles modernos de mostrador.
Ethernet TCP/IP / Wi-Fi Conexión directa por socket TCP al puerto estándar 9100 (JetDirect / RAW) Impresoras de pase de cocina, cafeterías grandes y comanderos distribuidos.
Bluetooth (SPP / BLE) Serial Port Profile (RFCOMM canal 1) o características GATT en BLE Impresoras portátiles de cinturón para venta en mesa, delivery y parkings.

C. Eficiencia extrema de ancho de banda y latencia milimétrica

Comparemos qué ocurre cuando un software de TPV ordena imprimir un ticket de venta típico de 40 líneas con 2 artículos, total, desglose de IVA y un código QR:

  • Vía Driver de Windows (Gráfico / GDI / XPS): El sistema rasteriza una imagen monocroma de 576 x 1200 puntos. Incluso comprimida, la trama gráfica transmitida suele superar los 150 KB a 400 KB. En una conexión USB rápida esto tarda cientos de milisegundos, pero sobre una red Wi-Fi congestionada o un enlace Bluetooth móvil, el retraso puede ser de 3 a 5 segundos con riesgo de interrupciones o búferes bloqueados.
  • Vía ESC/POS Nativo: Se transmiten los caracteres de texto plano y las órdenes de control de 2 o 3 bytes. El peso total del ticket oscila entre 1,2 KB y 3,5 KB. La transmisión se completa en menos de 10 milisegundos y el microcontrolador de la impresora proyecta las líneas térmicas a su velocidad física máxima (hasta 350 mm por segundo).

D. Ahorro crítico de consumible térmico

En un gran supermercado o franquicia de comida rápida que expide 1.500 tickets al día por caja, el consumo de papel térmico representa un gasto operativo anual mayúsculo. Con los drivers gráficos del sistema operativo, el margen superior, el interlineado y el margen inferior tras el corte vienen fijados de forma genérica.

Con ESC/POS, el desarrollador tiene control absoluto sobre la densidad interlineal en unidades de micro-puntos (*dots*) mediante comandos como ESC 3 n. Esto permite comprimir las líneas no esenciales del ticket, suprimir avances en blanco innecesarios y reducir la longitud media del recibo en un 20% a 25%, lo que se traduce en miles de euros ahorrados anualmente en rollos de papel térmico.

3. Anatomía binaria: cómo piensa y procesa una impresora ESC/POS

Una impresora térmica de tickets no tiene un sistema operativo con memoria virtual ni un motor de renderizado HTML. Funciona mediante un autómata de estados finitos que consume un flujo secuencial de bytes (*Byte Stream*) almacenados en un búfer circular FIFO (típicamente de 4 KB a 64 KB de memoria interna).

A medida que los bytes entran desde el puerto USB, Ethernet o Serie:

  1. Si el byte recibido es un carácter imprimible (rango ASCII 0x20 a 0xFF): La impresora lo deposita en su búfer de línea activo, convirtiendo el código del carácter en una matriz de puntos térmicos mediante la tabla de fuentes cargada en su ROM (por ejemplo, la Fuente A de 12×24 puntos o la Fuente B de 9×17 puntos).
  2. Si el byte es un carácter de control directo:
    • LF (Line Feed, 0x0A / dec: 10): Ordena imprimir inmediatamente los caracteres acumulados en el búfer de línea y avanzar el papel la altura de una línea.
    • CR (Carriage Return, 0x0D / dec: 13): Retorno de carro (en la mayoría de impresoras modernas configuradas en modo estándar se ignora o equivale a un salto de línea).
    • HT (Horizontal Tab, 0x09 / dec: 9): Desplaza el puntero de impresión a la siguiente posición de tabulación predefinida.
  3. Si el byte es un prefijo de escape (0x1B, 0x1D, 0x1C o 0x10): El autómata cambia de estado temporalmente; el siguiente byte recibido no se imprimirá jamás, sino que definirá el código de operación (OpCode), seguido opcionalmente de uno o más bytes de argumentos o parámetros numéricos.
Modo Estándar vs. Modo Página (*Page Mode*): Por defecto, una impresora ESC/POS trabaja en Modo Estándar (imprime línea a línea de forma continua a medida que recibe un salto LF). Sin embargo, casi todos los modelos soportan también el Modo Página (activado con ESC L), que crea un lienzo en memoria de coordenadas (X, Y) donde se pueden posicionar textos en vertical, rotar códigos de barras 90° o 270° y montar maquetaciones complejas antes de volcar todo el ticket al papel con ESC FF.

4. El gran diccionario metódico de comandos ESC/POS esenciales

A continuación recopilamos de forma estructurada los comandos que todo profesional del hardware y software de punto de venta debe dominar con soltura:

A. Inicialización y Control General del Dispositivo

Comando Hexadecimal Decimal Función y Efecto Técnico
ESC @ 1B 40 27 64 Inicializar Impresora (Hardware Reset Lógico): Limpia el búfer de impresión, cancela modos anteriores (negrita, tamaño doble, etc.) y restaura los valores por defecto guardados en la memoria no volátil. Buenas prácticas: enviarlo siempre al principio de cada ticket.
ESC = n 1B 3D n 27 61 n Habilitar/Deshabilitar Dispositivo: Permite que la impresora ignore o atienda los datos que circulan por una línea de bus serie compartida con otros periféricos (visores de cliente, etc.).

B. Formateo de Texto, Fuentes y Estilos Tipográficos

Comando Hexadecimal Parámetros / Rango Descripción Técnica
ESC ! n 1B 21 n 0 ≤ n ≤ 255 Selector Maestro de Modo de Impresión (Bitmask): Permite activar simultáneamente múltiples atributos con un solo byte. Bit 0: Fuente B (1) o Fuente A (0). Bit 3: Negrita (1). Bit 4: Doble altura (1). Bit 5: Doble anchura (1). Bit 7: Subrayado (1). Por ejemplo, 0x38 activa negrita + doble altura + doble anchura para el total del ticket.
ESC E n 1B 45 n n = 0 (OFF), 1 (ON) Activar / Desactivar Negrita (Emphasized Mode): Incrementa la corriente térmica en los micropuntos para oscurecer el trazo de los caracteres.
GS ! n 1D 21 n 0 ≤ n ≤ 255 Ampliación Arbitraria de Caracteres: Los 4 bits bajos definen el multiplicador de altura (1x a 8x) y los 4 bits altos el de anchura (1x a 8x). Fundamental para títulos de llamada o números de turno en cocina.
ESC – n 1B 2D n n = 0 (OFF), 1 (1 dot), 2 (2 dots) Subrayado de Texto: Dibuja una línea continua bajo los caracteres impresos con grosor de 1 o 2 micropuntos.
GS B n 1D 42 n n = 0 (Normal), 1 (Invertido) Modo Negativo (White on Black): Imprime texto en blanco sobre fondo negro sólido. Ideal para avisos de “MESA”, “URGENTE” o “ANULACIÓN” en comandas de cocina.
ESC { n 1B 7B n n = 0 (OFF), 1 (ON) Impresión Invertida de Cabeza abajo (*Upside-down*): Rota todo el texto 180°. Se utiliza cuando la impresora está montada en la pared boca abajo o en quioscos verticales para que el cliente lea el ticket en la dirección correcta según sale.

C. Alineación, Posicionamiento y Espaciado de Línea

Comando Hexadecimal Argumentos Acción en la Impresora
ESC a n 1B 61 n n = 0 (Izq), 1 (Centro), 2 (Der) Justificación de Línea: Centra logotipos o títulos, alinea artículos a la izquierda e importes a la derecha. Nota: solo surte efecto al principio de una línea nueva.
ESC d n 1B 64 n 0 ≤ n ≤ 255 Imprimir y Alimentar n Líneas (*Print and feed*): Vacía el búfer de línea y avanza físicamente el papel n renglones en blanco.
ESC 2 1B 32 Ninguno Espaciado de Línea Estándar: Fija el interlineado a 1/6 de pulgada (aproximadamente 4.23 mm o 30 dots).
ESC 3 n 1B 33 n 0 ≤ n ≤ 255 Espaciado de Línea en Micropuntos (*Dots*): Fija el interlineado a exactamente n/203 o n/180 de pulgada. Reducir n a 18 o 20 permite compactar tickets largos de forma drástica.

D. Corte de Papel (La Guillotina Automática)

El corte de papel es una de las funciones más críticas de un TPV. Si se corta el papel mientras el cabezal aún está imprimiendo o antes de avanzar la distancia física que separa el cabezal térmico de la cuchilla (habitualmente entre 12 y 18 mm), el último renglón quedará guillotinado.

Comando Hexadecimal Variante / Parámetros Comportamiento
GS V m 1D 56 m m = 0 / 48 (Total), m = 1 / 49 (Parcial) Corte Directo: Corta el papel en la posición actual de la cuchilla. El corte parcial deja un minúsculo puente de papel en el centro para evitar que el ticket caiga al suelo.
GS V m n 1D 56 m n m = 65 (Total + feed), m = 66 (Parcial + feed) Alimentar y Cortar (El estándar recomendado): Avanza automáticamente los puntos necesarios (n) para salvar la distancia física entre el cabezal y la cuchilla y ejecuta el corte. La combinación 0x1D 0x56 0x42 0x00 (o GS V 66 0) es la más empleada en la industria.

E. Apertura de Cajón Portamonedas (Disparo de Pulso RJ11/RJ12)

La inmensa mayoría de cajones portamonedas no se conectan por USB al PC, sino mediante un cable con conector modular RJ11/RJ12 enchufado a la trasera de la impresora de tickets. Dentro del cajón hay un electroimán (solenoide de 24 voltios).

Para abrir el cajón, la impresora aplica un pulso de corriente eléctrica controlado por el comando:

ASCII: ESC p m t1 t2
HEX: 1B 70 m t1 t2
DEC: 27 112 m t1 t2
  • m (Pin conector): 0 (o 48) para el Pin 2 del conector RJ11 (Cajón 1); 1 (o 49) para el Pin 5 (Cajón 2, en instalaciones con dos cajones en cascada).
  • t1 (Tiempo ON): Duración del pulso eléctrico en intervalos de 2 milisegundos. Un valor típico es t1 = 25 (25 × 2 ms = 50 ms).
  • t2 (Tiempo OFF): Tiempo de reposo antes de poder volver a energizar el solenoide en intervalos de 2 ms (típicamente t2 = 50, 100 ms).

Secuencia universal recomendada para abrir el cajón 1: 0x1B 0x70 0x00 0x19 0xFA.

F. Códigos de Barras 1D y Códigos QR 2D Nativos

Muchas aplicaciones novatas cometen el error de generar una imagen bitmap del código de barras en el ordenador y enviarla como imagen. Eso es lento y produce bordes borrosos. Las impresoras térmicas contienen algoritmos vectoriales en su propio firmware para renderizar códigos de barras y QR con nitidez micrométrica absoluta:

1. Códigos de barras lineales 1D (EAN-13, Code 128, etc.):

  • GS w n (1D 77 n): Define el ancho de los módulos o barras finas (2 a 6 dots).
  • GS h n (1D 68 n): Define la altura vertical del código en micropuntos (habitualmente entre 50 y 120 dots).
  • GS H n (1D 48 n): Posición de los dígitos legibles por humanos (HRI): 0 (no imprimir), 1 (arriba), 2 (abajo), 3 (ambos).
  • GS k m n d1...dn: Imprime el código de barras según el formato m (donde m=73 corresponde al universal Code 128).

2. Códigos QR 2D Nativos (Epson / ESC-POS Standard):

La especificación de Epson para generar un código QR nativo consta de 5 pasos consecutivos usando la familia de comandos GS ( k:

  1. Seleccionar Modelo de QR (Modelo 2 estándar):
    1D 28 6B 04 00 31 41 32 00
  2. Definir Tamaño del Módulo (Ancho de cada píxel, ej: 4 dots):
    1D 28 6B 03 00 31 43 04
  3. Fijar Nivel de Corrección de Error (L=7%, M=15%, Q=25%, H=30%):
    1D 28 6B 03 00 31 45 31 (Nivel M, óptimo para recibos térmicos arrugados)
  4. Cargar los Datos en el Búfer del Símbolo:
    1D 28 6B [pL] [pH] 31 50 30 [cadena de texto o URL...]
    (Donde pL y pH indican la longitud de los datos + 3 en formato little-endian).
  5. Imprimir el Símbolo QR Almacenado:
    1D 28 6B 03 00 31 51 30

Con esta secuencia, la impresora calcula la máscara matemática, añade los patrones de alineación e imprime el código QR en un abrir y cerrar de ojos, perfecto para tickets con factura electrónica de Veri*factu, enlaces de pago bizum o encuestas de satisfacción.

G. Comprobación de Estado en Tiempo Real (Real-Time Commands DLE)

¿Qué ocurre si un cliente le da a “Cobrar e Imprimir” en el TPV y la impresora no tiene papel, tiene la tapa abierta o la cuchilla se ha atascado? Si el software se limita a mandar datos por el socket TCP o el puerto serie, el comando se quedará atascado en el búfer del sistema operativo indefinidamente, congelando la caja.

Para solucionar esto, ESC/POS implementó los comandos DLE en tiempo real. A diferencia de todos los demás comandos, estos se procesan incluso si el búfer de entrada de la impresora está completamente lleno o la impresora se encuentra en estado de error:

HEX: 10 04 n
DEC: 16 04 n (DLE EOT n)
  • 10 04 01: Solicita el estado general de la impresora.
  • 10 04 02: Solicita el estado de desconexión (tapa abierta / cerrada).
  • 10 04 03: Solicita el estado de error (error mecánico en cabezal, sobretemperatura, atasco de corte).
  • 10 04 04: Solicita el sensor de papel: la impresora devuelve un byte de respuesta inmediato donde un bit específico indica si el papel está próximo a acabarse (paper near-end sensor) o si ya no queda papel en la bobina (paper out).

Un software de TPV profesional sondea este byte antes de enviar el ticket para avisar al cajero con una alerta emergente en pantalla: “Atención: Coloque un nuevo rollo de papel en la impresora de tickets”.

5. El quebradero de cabeza histórico: páginas de códigos, tildes y el euro (€)

Todo desarrollador que ha programado para impresoras de tickets se ha topado alguna vez con el misterio del ticket embrujado: en la pantalla del TPV el texto muestra “Café con leche — 1,50 €”, pero al salir del papel térmico aparece “CafÚ con leche ʹ 1,50 ?” o caracteres chinos ininteligibles.

¿Por qué sucede esto?

El protocolo ASCII estándar solo contempla caracteres de 7 bits (del 0 al 127, que cubre el alfabeto inglés sin tildes). Para los caracteres del rango alto de 8 bits (del 128 al 255), los microcontroladores de las impresoras térmicas utilizan Páginas de Códigos (Code Pages) indexadas en matrices de memoria fijas.

Si envías una cadena codificada en moderno UTF-8 (donde caracteres como la á, la ñ o el símbolo del euro € ocupan 2 o 3 bytes), la impresora interpreta cada byte de la secuencia multibyte como un carácter independiente de su tabla interna activa, desfigurando el texto por completo.

La Solución Técnica: el comando ESC t n

Antes de imprimir cualquier texto que contenga caracteres españoles o europeos, el software debe seleccionar explícitamente la página de códigos correspondiente en la impresora mediante el comando:

HEX: 1B 74 n
DEC: 27 116 n
Valor de n Página de Códigos Compatibilidad de Caracteres
0 CP437 (USA / OEM) La página por defecto en la mayoría de impresoras al encender. Contiene caracteres gráficos de DOS y algunos acentos, pero carece de la letra ñ mayúscula en su posición natural y no tiene símbolo del Euro.
2 CP850 (Multilingual Latin I) El estándar clásico español e hispanoamericano. Contiene todas las vocales con tilde (á, é, í, ó, ú), diéresis (ü), apertura de interrogación/exclamación (¿, ¡) y la letra ñ / Ñ.
19 (o varía según marca) PC858 (Euro / Latin I + €) Idéntica a la CP850, pero reemplaza el carácter 0xD5 (que antes era una letra ‘ı’ sin punto) por el símbolo oficial del Euro (€). Es la página más recomendada en España y la Unión Europea.
16 Windows-1252 (WCP1252) Muy utilizada en drivers de Windows; el euro se sitúa en la posición 0x80.

El flujo de codificación correcto:

  1. Al iniciar el ticket, enviar 0x1B 0x74 0x13 (seleccionar PC858 o la Code Page de tu modelo).
  2. En tu código fuente (sea PHP, JavaScript, Python o C#), convertir la cadena UTF-8 a bytes individuales codificados en la página de destino antes de transmitir (por ejemplo en PHP mediante iconv('UTF-8', 'CP858//TRANSLIT', $texto)).

6. Disección de un ticket real: el flujo maestro comentado

Veamos cómo se traduce todo lo aprendido en un flujo de bytes real. A continuación se desglosa el payload binario exacto que produce un ticket de venta limpio, estilizado y profesional:

// 1. INICIALIZAR Y CONFIGURAR PÁGINA DE CÓDIGOS
x1Bx40                     // ESC @  : Reset de la impresora
x1Bx74x13                 // ESC t 19: Seleccionar página de códigos PC858 (con Euro)

// 2. ENCABEZADO CENTRADO CON TÍTULO EN DOBLE ALTURA
x1Bx61x01                 // ESC a 1: Alineación centrada
x1Dx21x11                 // GS ! 17: Doble ancho y doble alto (2x2)
RESTAURANTE EL PUERTOx0A    // Texto impreso + Salto de línea
x1Dx21x00                 // GS ! 0 : Volver a tamaño normal 1x1
x1Bx45x01                 // ESC E 1: Negrita activada
NIF: B-12345678x0A
C/ Mayor, 42 - Madridx0A
Tel: 912 345 678x0A
x1Bx45x00                 // ESC E 0: Desactivar negrita

// 3. LÍNEA SEPARADORA
------------------------------------------------x0A

// 4. CUERPO DE ARTÍCULOS ALINEADO A LA IZQUIERDA
x1Bx61x00                 // ESC a 0: Alineación a la izquierda
Cant  Descripción                     Importex0A
------------------------------------------------x0A
 1    Menú del Día                      14,50 xD5x0A   // 0xD5 = símbolo € en PC858
 2    Café Solo                          3,00 xD5x0A
 1    Tarta de Queso Casera              5,20 xD5x0A
------------------------------------------------x0A

// 5. TOTAL DESTACADO A LA DERECHA
x1Bx61x02                 // ESC a 2: Alineación a la derecha
BASE IMPONIBLE: 18,76 xD5x0A
IVA (10%):      2,04 xD5x0A
x1Bx45x01                 // ESC E 1: Negrita
x1Dx21x01                 // GS ! 1 : Doble altura
TOTAL A PAGAR: 22,70 xD5x0A
x1Dx21x00x1Bx45x00     // Reset tamaño y negrita

// 6. CÓDIGO QR CON ENLACE A FACTURA / VERI*FACTU
x1Bx61x01                 // ESC a 1: Centrado
x1Dx28x6Bx04x00x31x41x32x00           // QR Model 2
x1Dx28x6Bx03x00x31x43x05               // Módulo tamaño 5
x1Dx28x6Bx03x00x31x45x31               // Corrección error Nivel M
x1Dx28x6Bx22x00x31x50x30https://tpvbox.com/f/A2026-904 // Cargar URL en buffer (34 bytes)
x1Dx28x6Bx03x00x31x51x30               // Imprimir QR
x0A
¡Gracias por su visita!x0A

// 7. AVANCE, CORTE Y APERTURA DE CAJÓN
x1Dx56x42x00             // GS V 66 0: Alimentar y corte parcial
x1Bx70x00x19xFA         // ESC p 0 25 250: Disparo al solenoide del cajón (Pin 2)

7. Cómo enviar ESC/POS hoy desde cualquier lenguaje de programación

Una de las grandes maravillas de ESC/POS es que no estás atado a un SDK cerrado de ningún fabricante. Cualquier lenguaje de backend, frontend o móvil puede interactuar con una impresora de tickets:

A. En PHP (Entornos Web / Laravel / WordPress / WooCommerce)

La librería de referencia absoluta es mike42/escpos-php. Permite conectarse indistintamente a impresoras compartidas en red (TCP Socket), conectadas por USB local o puerto serie:

use Mike42EscposPrinter;
use Mike42EscposPrintConnectorsNetworkPrintConnector;

// Conexión por socket TCP directo a la IP de la impresora de cocina
$connector = new NetworkPrintConnector("192.168.1.200", 9100);
$printer   = new Printer($connector);

$printer->setJustification(Printer::JUSTIFY_CENTER);
$printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH | Printer::MODE_DOUBLE_HEIGHT);
$printer->text("COMANDA DE COCINA #45n");
$printer->selectPrintMode(); // Reset
$printer->setJustification(Printer::JUSTIFY_LEFT);
$printer->text("1x Solomillo al Punton");
$printer->text("1x Ensalada Mixta (Sin cebolla)n");
$printer->feed(2);
$printer->cut();
$printer->close();

B. En JavaScript / Node.js (Electron / Aplicaciones de Escritorio / Servidores de Impresión)

Con paquetes de Node.js como escpos o mediante sockets TCP nativos (módulo net de Node), es posible emitir tickets sin dependencias externas:

const net = require('net');

const client = new net.Socket();
client.connect(9100, '192.168.1.200', () => {
    // Construir buffer de bytes raw
    const initCmd = Buffer.from([0x1B, 0x40]);
    const textData = Buffer.from('Cobro en Barra TPVn', 'latin1');
    const cutCmd = Buffer.from([0x1D, 0x56, 0x42, 0x00]);

    client.write(Buffer.concat([initCmd, textData, cutCmd]));
    client.end();
});

C. Desde el Navegador Web Moderno (WebUSB y Web Bluetooth API)

Hasta hace pocos años, una aplicación TPV ejecutada en un navegador web (SaaS en la nube) dependía obligatoriamente de instalar un programa residente en segundo plano en el ordenador del cliente para poder hablar con la impresora USB.

Hoy en día, las especificaciones de WebUSB API y Web Serial API implementadas en navegadores como Google Chrome y Microsoft Edge permiten a una aplicación web solicitar permiso al usuario y abrir un canal de comunicación directo con los endpoints del dispositivo USB sin instalar ningún driver ni servicio local. El navegador envía la trama binaria de ESC/POS directamente al hardware con latencia cero.

8. Conclusiones y recomendaciones para tu punto de venta

ESC/POS no es una reliquia del pasado; es una obra maestra de la ingeniería pragmática. Su diseño minimalista basado en secuencias de escape sobre un flujo secuencial de bytes garantiza que, sin importar cuánto evolucione el software en la nube o los sistemas operativos en los próximos veinte años, las impresoras térmicas de tickets seguirán cumpliendo su cometido de forma instantánea, fiable y universal.

Comprender las tripas de este protocolo permite a los desarrolladores optimizar los tiempos de respuesta de sus cajas, eliminar averías por caracteres corruptos, reducir drásticamente el gasto en papel térmico y crear experiencias de cobro impecables.

¿Necesitas equipar tu negocio con impresoras térmicas fiables y 100% compatibles ESC/POS?

En HiperTPV disponemos del mayor catálogo de impresoras de tickets para TPV de los principales fabricantes del mercado (Epson, Bixolon, Citizen, Sunmi, Sewoo) con conectividad USB, Ethernet y Bluetooth. Te asesoramos técnicamente para garantizar la integración perfecta con tu software de gestión y tu cajón portamonedas.

¿Necesitas asesoramiento técnico para tu restaurante o comercio?

En HiperTPV entregamos tu equipo con carta, mesas, periféricos y software adaptado a Veri*factu 100% configurado para empezar a trabajar de inmediato.

HiperTPV

Equipo Técnico y de Consultoría de HiperTPV

Especialistas en soluciones integrales para el punto de venta, hardware TPV industrial, balanzas comerciales homologadas y adaptación a la normativa tributaria en España.