先把打印机用usb线接到树莓派上,然后在树莓派执行 lsusb 命令,这个时候会列表连接上的所有usb设备,如下:
1
2
3
4
5
6
|
Bus 005 Device 001: ID 0000:0000 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 |
这个时候不知道谁是打印机呢!不过不要紧,你拔掉打印机的usb线后再执行一次,看缺谁,谁就是打印机了。
ID后冒号隔开的两个数字就是usb设备的 vendor ID和product Id了,记下来先,一会儿连接的时候有大用。
为了连接打印机,你需要安装python-usb这个库,用于直接通过usb接口来操作usb设备。本文的第一个坑就出在这里,因为pip库里的版本有一个bug的方式在后面的库会用到,所以必须用从github里最新的去除了bug的代码里安装才不会出问题。所以只能用这样子的方式来安装才行。
1
2
3
|
git clone https: //github .com /walac/pyusb .git cd pyusb python setup.py install |
安装好后我们就可以通过usb接口来操作打印机了,由于大多数打印机都支持EPSON的打印协议(很古老的协议了,所以到处都支持),所以我们可以安装一个叫python-escpos 的库来通过python-usb来用EPSON的协议操作打印机。
1
|
sudo pip install python-escpos |
但是此处还是有坑,因为这货的文档基本上和实际情况就是牛头不对马嘴。所以就别管这货的文档了。
1
2
|
from escpos import * pt = printer.Usb( 0x0fe6 , 0x811e , 0 , out_ep = 0x03 ) |
此处要注意 out_ep 不能用默认值,默认的铁定打不了,但是这里的封装又有问题不能去自动获取,所以下面给一段自动获取 out_ep 的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import usb.core import usb.util import sys dev = usb.core.find(idVendor = 0x5345 , idProduct = 0x1234 ) cfg = dev.get_active_configuration() intf = cfg[( 0 , 0 )] 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() |
手头的打印机获取到的out_ep是0x03,所以就写的这个值。 之后呢就可以愉快的打印了:
1
2
3
4
5
6
7
8
|
from escpos import * usb = printer.Usb( 0x0fe6 , 0x811e , 0 , out_ep = 0x03 ) usb.text(u "终于可以愉快的打印啦\n\n\n\n\n\n\n\n" .encode( 'gbk' )) usb.image(‘image path’) #打印图片(黑白2值) usb.qr(‘值’) #打印二维码 usb. set (codepage = None , align = ‘center’) #设置页面居中 usb.cut() #切纸 usb.close() #关闭连接 |
发表回复
要发表评论,您必须先登录。