You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python操作Star TSP100 USB热敏打印机写入数据报错排查

python-escpos连接Star TSP100打印机报错排查方案

报错核心由三个常见问题叠加导致:打印机仿真模式不兼容、Windows下USB驱动被独占、默认USB端点参数不匹配,按以下顺序排查即可解决:

1. 先切换打印机到ESC/POS兼容模式

Star TSP100出厂默认用私有Star指令集,完全不兼容ESC/POS协议,这是最多人踩的坑:

  • 关机状态下按住FEED走纸键不放开机,等自检页打印完成后松手,查看自检页上的Emulation字段
  • 如果显示不是ESC/POS,打开TSP100 Configuration Utility配置工具,在打印控制设置项里把仿真模式切换为ESC/POS,保存配置后重启打印机。

2. 解决libusb访问设备被占用的问题

报错里的libusb0-dll:err [os_open] failed to open是典型的驱动冲突:

  • Star原厂USB打印驱动会独占设备端口,导致pyusb依赖的libusb无法获取设备访问权限
  • 解决步骤:
    • 打开设备管理器,在通用串行总线设备分类下找到Star TSP100
    • 右键选更新驱动程序→浏览本地查找驱动→从可用驱动列表选择,将驱动替换为libusb-win32(没有对应驱动的话用zadig工具,选中TSP100设备后直接替换为libusb-win32驱动即可)
    • 注意:替换为libusb驱动后,系统自带的打印队列将无法直接访问该打印机,仅能通过pyusb/python-escpos调用。

3. 修正USB连接参数,解决KeyError: 1报错

初始化Usb对象时仅传VID/PID会使用默认端点地址0x01,和TSP100实际端点不匹配就会触发该错误:

  • 先运行以下代码查询设备实际的接口号、端点地址:
import usb.core
import usb.util

dev = usb.core.find(idVendor=0x0519, idProduct=0x0003)
if not dev:
    raise RuntimeError("未检测到打印机,请检查接线和VID/PID")
dev.set_configuration()

for cfg in dev:
    for intf in cfg:
        print(f"接口编号: {intf.bInterfaceNumber}")
        for ep in intf:
            ep_dir = "输入端点" if usb.util.endpoint_direction(ep.bEndpointAddress) == usb.util.ENDPOINT_IN else "输出端点"
            print(f"  {ep_dir}地址: {hex(ep.bEndpointAddress)}")
  • 用查询到的实际参数初始化打印机,例如查询到接口号为0、输入端点为0x81、输出端点为0x02时,初始化代码改为:
from escpos.printer import Usb

# 参数顺序:VID, PID, 接口号, 输入端点地址, 输出端点地址
p = Usb(0x0519, 0x0003, 0, 0x81, 0x02)
p.text("Hello World!\n")
p.cut()  # 测试走纸切纸

其他注意事项

  • 运行脚本前清空所有待打印任务,关闭Star配置工具等可能占用打印机的程序
  • 仍报权限错误时,用管理员权限启动终端/PyCharm再运行脚本
  • USB模式调试不通的话,优先换用网口/串口连接TSP100,兼容性比USB直连高很多,不需要折腾驱动替换。

内容的提问来源于stack exchange,提问作者Life of Madness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:31:04