因此,这不仅仅是一个问题,也是一个答案。我有一台58毫米的收据打印机,我正在尝试使用escpos sdk进行设置,到目前为止,我花了一整天的时间来处理冗余错误,比如“未实现”的raise错误,并且没有太多关于它的信息。因此,我将发布我所做的,以使其发挥作用
首先,阅读this guide的第一步,并从依赖项步骤安装所有库(我使用anaconda来管理我的虚拟环境,所以我通过anaconda提示符安装)
然后,从最新的windows二进制文件here下载libusb,解压并根据您的操作系统搜索32位或64位dll(显然这对于工作很重要),对于64位选择MS64/dll文件,并将其复制到windows/system32中,对于32位MS32/dll文件,在windows/SYSWOW64中,文件夹路径应位于windows配置中的%path%变量中。如果您正在使用anaconda并激活虚拟环境,请将其复制到“X:\USERS\USER\Anaconda3\env\DLLs”和“X:\USERS\USER\Anaconda3\envs\env\Library\bin”中,其中X、USER和env应与您的虚拟环境路径文件夹相匹配(如果您为所有用户安装了anaconda,则用户应位于“all USERS”文件夹中,并且默认情况下它是隐藏的)
在python中运行此代码,将提示所有设备的vid's和pid's列表,如果需要搜索pid's和vid's(后面只有4位数字),则需要选择打印机vid和pid,然后搜索每个设备以找到打印机id,并在获得这些信息后将其存储到某个位置。注意,如果在安装驱动程序后执行此操作,则可能看不到此处列出的打印机。在我的案例中,是VID_0483&;PID_070B
import win32com.client
wmi = win32com.client.GetObject ("winmgmts:")
for usb in wmi.InstancesOf ("Win32_USBHub"):
print(usb.DeviceID)
获取Zadig并安装它,安装后打开它和clic选项菜单,然后列出所有设备,(如果不这样做,您将看不到任何设备),然后搜索您的设备,我的设备列在“Usb打印支持”下选择它,验证pid和vid供应商与您的匹配,然后选择WinUsb驱动程序,然后按安装/重新安装按钮,做这件事需要一段时间(要有耐心)
此时,您应该完成库和驱动程序的安装,并且应该毫无问题地运行此代码,并获得如下内容<;libusb1.\u LibUSB对象位于0x000001F74D7BD688>
import usb.core
import usb.util
import usb.backend.libusb1
backend = usb.backend.libusb1.get_backend()
print(backend)
这是棘手的部分。如果运行此代码:
from escpos.printer import Usb
import usb.core
import usb.util
import usb.backend.libusb1
p = Usb(0x0483, 0x070B, 0, 0x81, 0x02)
p.text("Hello World Hola 1\n")
通常会出现“未实现”raise错误,因为escpos库不是为windows编写的!:/。因此,回到env文件夹或python安装文件夹,转到env/lib/site packages/escpos/并打开printer.py文件。从第61行到第71行进行评论或删除,但如果你是像我一样的新手,只需在每行中键入a。应在同一列中,以避免识别错误。在“check_driver=None”行下方和第73行上方执行,如下所示:
check_driver = None
#try:
# check_driver = self.device.is_kernel_driver_active(0)
#except NotImplementedError:
# pass
#if check_driver is None or check_driver:
# try:
# self.device.detach_kernel_driver(0)
# except usb.core.USBError as e:
# if check_driver is not None:
# print("Could not detatch kernel driver: {0}".format(str(e)))
try:
self.device.set_configuration()
self.device.reset()
except usb.core.USBError as e:
print("Could not set configuration: {0}".format(str(e)))
def _raw(self, msg):
然后你就可以和你的打印机通信了。再次运行:
from escpos.printer import Usb
import usb.core
import usb.util
import usb.backend.libusb1
#remember to change pid and vid with your own values!
p = Usb(0x0483, 0x070B, 0, 0x81, 0x02)
p.text("Hello World Hola 1\n")
你应该在打印机中看到一行打印机!,您可能需要按进纸按钮才能看到它。如果得到的端点无效,则需要在vid和pid(0x81,0x02)旁边的Usb()arguments函数中设置自己的端点,并替换它们。通常为0x81和0x82,但可能有所不同
我希望你能找到有用的信息,干杯
目前没有回答
相关问题 更多 >
编程相关推荐