본문 바로가기
카테고리 없음

python-escpos로 열전사(thermal) 프린터 자동화하기

by PySun 2026. 5. 24.
반응형
python-escpos로 열전사(thermal) 프린터 자동화하기

개요

python-escpos는 ESC/POS 명령어를 이용해 영수증용 열전사(thermal) 프린터를 파이썬에서 제어하는 라이브러리입니다. 텍스트 출력, 이미지/바코드/QR 코드 전송, 페이퍼 커팅, 프린터 리셋 등 하드웨어 기능을 파이썬 코드로 다룰 수 있어 POS 시스템, 키친 프린팅, 라벨 출력 자동화에 유용합니다.

기본 문법 / 주요 파라미터

파라미터설명예시 / 기본값
vendor_idUSB 장치의 Vendor ID (lsusb로 확인)0x04b8 (Epson)
product_idUSB 장치의 Product ID (lsusb로 확인)0x0202
interfaceUSB 인터페이스 번호 (lsusb -vvv로 확인)0 (기본)
in_ep / out_epUSB 입력/출력 엔드포인트 주소0x81 / 0x01 (기본 예시)
ip네트워크 프린터의 IP 주소"192.168.1.99"
port네트워크 포트 (메이저 프린터는 보통 9100)9100
device시리얼 프린터의 포트 경로"/dev/ttyUSB0"
baudrate / parity / stopbits / bytesize시리얼 통신 설정9600, N, 1, 8 (기본값 예시)
profile프린터 모델 프로파일 (자동 설정 보완용)"TM-T88III"

기본 사용 예시

가장 간단한 USB 프린터 예제입니다. 먼저 lsusb로 vendor/product를 확인한 뒤 인스턴스를 생성하고 텍스트를 보냅니다.

from escpos.printer import Usb

# Vendor ID, Product ID는 lsusb로 확인
p = Usb(0x04b8, 0x0202)

p.text("Hello World\n")
p.cut()

실전 활용 예시

아래 예제들은 실제 서비스에 자주 쓰이는 패턴들입니다.

1) 네트워크 프린터에 이미지와 바코드 함께 출력하기

from escpos.printer import Network

kitchen = Network("192.168.1.100", port=9100, profile="TM-T88III")

kitchen.text("주문번호: 12345\n")
kitchen.image("/path/to/logo.png")
kitchen.barcode('4006381333931', 'EAN13', 64, 2)
kitchen.cut()

2) USB 프린터에 로고와 QR코드 출력 (Pillow, qrcode 필요)

from escpos.printer import Usb
import qrcode

p = Usb(0x04b8, 0x0202, profile="TM-T88III")

# QR 코드 만들기
qr = qrcode.make('https://example.com/order/12345')
qr.save('/tmp/qr.png')

p.image('/path/to/logo.png')
p.text('상품명: 키보드\n')
p.image('/tmp/qr.png')
p.cut()

3) 시리얼(Serial) 프린터 설정 예시

from escpos.printer import Serial

s = Serial(devfile='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1)

s.text('라벨 출력 테스트\n')
s.cut()

주의사항 / 자주 하는 실수

  • lsusb로 Vendor ID/Product ID, 인터페이스와 엔드포인트를 정확히 확인하세요. 잘못된 값은 출력 실패 원인입니다.
  • USB 권한 문제: 일반 계정에서 접근하려면 udev 규칙을 추가하거나 루트 권한이 필요합니다. (권한 에러가 흔함)
  • 의존성 설치: pyusb, Pillow, qrcode, pyserial, python-barcode 등이 필요합니다. 이미지 출력이나 QR/바코드 생성은 해당 라이브러리가 설치되어 있어야 합니다.
  • 이미지 크기/흑백 변환: 프린터 폭에 맞게 이미지를 리사이즈하고 흑백 변환해야 깨끗하게 나옵니다. Pillow로 사전 처리하세요.
  • 엔코딩/줄바꿈: 텍스트 엔코딩(특히 한글)과 줄바꿈 문자(\n) 처리를 확인하세요. 폰트/프로파일에 따라 한글 출력이 안 될 수 있습니다.
  • 커팅 지원 여부: 모든 프린터가 자동 커팅을 지원하지 않습니다. p.cut()이 동작하지 않으면 문서나 모델 사양을 확인하세요.
  • 네트워크 프린터 IP/포트: DHCP 환경에서는 IP가 바뀔 수 있으니 고정 IP 또는 DNS/예약을 사용하세요.

마무리

python-escpos는 열전사 프린터 자동화를 빠르게 구현할 수 있는 실용적인 툴입니다. 장치 정보(lsusb) 확인, 권한/의존성 설치, 이미지 전처리만 신경 쓰면 POS나 키친 프린팅 같은 자동화 작업을 안정적으로 만들 수 있습니다.

참고 자료

반응형