1.开发环境
树莓派系统
python2.7
2.开发目的
使用树莓派usb不用驱动程序直接使用打印机打印。
3.安装python库
①escpos
Python ESC/POS 是一个库,它允许用户从 Python 应用程序访问由 Epson 定义的 ESC/POS 命令处理的所有打印机。
详细内容以及安装对应环境的库的版本在如下链接:

https://pypi.org/project/python-escpos/

②pyusb
pyusb是一个python库,可以方便地使用python操作usb设备
详细内容以及安装对应环境的库的版本在如下链接:

https://pypi.org/project/pyusb/

4.开发示例
①获取打印机设备的 vendor ID和product Id
先在树莓派的命令行终端使用lsusb命令查看当前存在的usb设备,在将打印机连接树莓派再次使用lsusb命令查看存在的usb设备,两次对比多出来的就是打印机设备的详细信息,我的信息如下:

Bus 005 Device 001: ID 0fe6:811e
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 006: ID 15d9:0a37
Bus 002 Device 001: ID 0000:0000

ID后面对应的就是打印机设备的 vendor ID和product Id
② 具体代码实现

def action_print():
    import usb.core
    import usb.util
    from escpos import printer
    # 打印的文本
    rs = ['da', 's', 'sdfgg']
    # 查找对应的设备并将vendor ID和product Id转换为16进制
    dev = usb.core.find(idVendor=0x0fe6, idProduct=0x811e)
    if dev is not None:
        # 匹配端口获取
        cfg = dev.get_active_configuration()
        intf = cfg[(0, 0)]
        # 获取out_ep值
        ep = usb.util.find_descriptor(
            intf,
            # match the first OUT endpoint
            custom_match= \
                lambda e: \
                    usb.util.endpoint_direction(e.bEndpointAddress) == \
                    usb.util.ENDPOINT_OUT
        )
        dev.reset()
        # 绑定对应的信息
        usb = printer.Usb(0x0fe6, 0x811e, 0, out_ep=ep.bEndpointAddress)
        # 循环打印文本
        for r in rs:
            # 设置文本打印的格式
            usb.set(codepage=None, align='left')
            # 设置打印的文本内容
            usb.text(str(r + '\n').encode('gbk'))
        
        # 切断打印小票
        usb.cut()
        usb.close()


if __name__ == '__main__':
    action_print()

注:
out_ep的值也可以在命令行输入:lsusb -v ,其中的bEndpointAddress值就是

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐