利用树莓派完成POS58打印机的无驱动打印(初学者)

news/2024/11/26 4:26:54/

导语:网上有很多文章介绍树莓派不用驱动直接用USB接口的各类热敏打印机,但是由于硬件环境和Linux版本不同,很难有一篇文章能够完整地讲述如何无驱动打印(我就是因为网上的一篇文章方法有缺陷足足浪费了一天半的时间)。下面我将根据自己的经验详细地介绍如何利用树莓派完成POS58打印机的无驱动打印,让各位少走弯路。

1. 编程语言

在正式开工之前,我觉得有必要介绍一下接下来要用的语言——Python。

 

简单的‘HelloWorld!’

Python命令行

假设你已经安装好了Python,那么在Linux命令行输入:

$python

 

将直接进入python。然后在命令行提示符>>>后面输入:

>>>print('HelloWorld!')

可以看到,随后在屏幕上输出:

Hello World!

print是一个常用函数,其功能就是输出括号中得字符串。

(在Python 2.x中,print还可以是一个关键字,可写成print 'Hello World!',但这在3.x中行不通 )

另一个使用Python的方法,是写一个Python程序。用文本编辑器写一个.py结尾的

文件,比如说hello.py

 

在hello.py中写入如下,并保存:

print('HelloWorld!')

退出文本编辑器,然后在命令行输入:

$python hello.py

来运行hello.py。可以看到Python随后输出

Hello World!

另外还可以把Python程序hello.py改成一个可执行的脚本,直接执行,在这里就不做过多的赘述。

程序模式: 写一段Python程序并运行。python-escpos是一个可以让用户来访问那些支持ESC/POS命令的打印机的Python库。因此利用它即可完成实现在树莓派下的无驱打印功能。

 

本文在Raspbian测试通过

 

2、需要安装的软件

进行下面操作之前要在Linux终端下sudo su,因为有些命令必须拥有权限才能执行。

Pyusb

为了连接打印机,你需要安装python-usb这个库,用于直接通过usb接口来操作usb设备。本文的第一个坑就出在这里,因为pip库里的版本有一个bug的方式在后面的库会用到,所以必须用从github里最新的去除了bug的代码里安装才不会出问题。所以只能用这样子的方式来安装才行。

>git clonehttps://github.com/walac/pyusb.git
>cd pyusb
>python setup.py install


setuptools

> wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
> python ez_setup.py --user

 

Pip

Pip安装用的是很简单粗暴的方法,首先在pip的python官网上下载pip的压缩包。

 

 

然后直接把压缩包拷到树莓派的SD卡中,重新启动树莓派后直接将压缩包cp到/home/pi/下,接着:

>tar -xvf pip-6.1.1.tar.gz
>cd  pip-6.1.1
> sudo python setup.py install


python-qrcode

> git clone https://github.com/lincolnloop/python-qrcode
> cd python-qrcode
> python setup.py build
> sudo python setup.py install


 
 

escpos

上图是网上的方法,但是第一句就执行不下去了,是不是得翻墙才能下载呢?

 

 

所以再次简单粗暴了一回,具体方法和安装PIP时一样,先在浏览器中输入http://python-escpos.googlecode.com/files/python-escpos-1.0.tgz,输完直接会下载压缩包,按照之前讲的方法cp到/home/pi下后:
> tar zxvf python-escpos-1.0.tgz
> cd python-escpos-1.0
> python setup.py build
> sudo python setup.py install


 
当然安装escpos貌似还有一条捷径可走,就是在命令行中直接输入:
>sudo pip install python-escpos
(这也是前面我安装PIP的主要原因,不过我用这条语句没有安装成功)
 
 
以上的工作全部完成后,需要在命令行中在输入:
> apt-get install python-imaging python-usb python2.7-usbtc08 python-serial


 

   添加一些接下来Python程序需要用的库

 

 

定义打印机

先把打印机用usb线接到树莓派上,然后在树莓派执行 lsusb 命令,这个时候会列表连接上的所有usb设备,如下:

这个时候不知道谁是打印机呢!不过不要紧,你拔掉打印机的usb线后再执行一次,看缺谁,谁就是打印机了。

ID后冒号隔开的两个数字就是usb设备的 vendor ID和productId了,记下来先。如上图所示,vendor ID:0x0416     product:0x5011

from escpos import *
pt = printer.Usb(0x0416, 0x5011, 0, out_ep=0x01)


 

此处要注意 out_ep 不能用默认值,默认的铁定打不了,所以下面给一段自动获取 out_ep 的代码:

importusb.core
importusb.util
importsys
dev =usb.core.find(idVendor= 0x0416, idProduct= 0x5011)
cfg =dev.get_active_configuration()
intf =cfg[(0,0)]
ep =usb.util.find_descriptor( intf,
#match the first OUT endpoint
custom_match= \
lambdae: \ u
sb.util.endpoint_direction(e.bEndpointAddress)== \
usb.util.ENDPOINT_OUT)
printep
dev.reset()


 

我手头的打印机获取到的out_ep是0x01,所以我就写的这个值。 另外ESCPOS压缩包README文件里有讲:

issue the following commandso you can get the "Interface" number and "End Point".


lsusb -vvv -dxxxx:xxxx | grep iInterface
lsusb -vvv -d xxxx:xxxx | grep bEndpointAddress| grep OUT

The first commandwill yields the "Interface" number that must

be handy to haveand the second yields the "Output Endpoint"

address.

By default the"Interface" number is "0" and the "OutputEndpoint"

address is"0x82",  if you have other valuesthen you can define

with your instance.

所以在命令行里输入:

lsusb -vvv -d 0416:5011 | grep bEndpointAddress | grepOUT

 

 

 

 

 

 

定义打印机实例

 

# -*- coding: UTF-8 -*-           设置可以打印中文 
from escpos import *
usb = printer.Usb(0x0416, 0x5011, 0, out_ep=0x01)
usb.text(u"树莓派\n\n\n\n\n".encode('gbk'))
usb.image(‘image path’)  #打印图片
usb.barcode                    #打印条形码
usb.barcode('1324354657687','EAN13',64,2,'','')
usb.cut()  #切纸


 

 

 

参考文献:

http://liming.me/post/usb

 

http://blog.csdn.net/Fashionxu/article/details/9000761

 

http://blog.csdn.net/my2010sam/article/details/18315687

 

http://tieba.baidu.com/p/3700342722


http://www.ppmy.cn/news/138089.html

相关文章

ArcGIS中实现土地利用转移矩阵

土地利用转移矩阵,就是根据同一地区不同时相的土地覆盖现状的变化关系,求得一个二维矩阵。通过对得到的转移矩阵进行分析,能够得到2个时相,不同的地类之间相互转化的情况,它描述了不同的土地利用的类型在不…

RealSense D435i 深度相机间断拍摄RGB图片

# -- coding: UTF-8 --import cv2 import pyrealsense2 as rs import numpy as nppipeline rs.pipeline() # 构建一个抽象设备的管道 config rs.config() # 使用非默认配置文件创建配置以配置管道 config.enable_stream(rs.stream.color, 1280, 720, rs.format.bgr8, 30) …

I.MX RT1170:如何在SRAM/SDRAM运行程序

一般Flash为non-XIP时,我们需要在RAM上运行程序。还有一种情况,就是我们不想每次调试都要将程序写入Flash,然后由BootROM进行代码的拷贝和跳转,这样可以减少Flash的烧写次数。本篇文章就来讨论一下如何实现这两种情形的RAM代码运行…

证券从业资格证-考前复习-证券市场基本法律法规

证券市场基本法律法规 此博客用于记录本科目内,部分涉及金额和年限的语句,进行总结记录 证券公司未按规定为客户开立账户的,责令改正,情节严重的,处以20万元以上50万元以下的罚款,并对其他直接责任人&…

南京智慧工厂量产下线, 深蓝S7展现硬核制造品质

以科技之力构建电动出行体验,深蓝S7要用硬核实力树立高价值电动SUV全新标杆。 深蓝S7南京智慧工厂下线 作为深蓝汽车旗下的首款中型SUV,深蓝S7自从5月20日开启预定以来,就一直是许多车友关注的焦点,订单火爆更是远超预期&#xff…

华为OD机试真题B卷 Java 实现【合法IP】,附详细解题思路

一、题目描述 IPV4地址可以用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此正号不需要出现),如10.137.17.1,是我…

联想笔记本怎么进入pe系统_联想笔记本电脑怎么进入PE?

展开全部 联想笔记本进入pe里面,必需先将设置好的u盘插入电脑后,在开机的时候按F1进BIOS设置或是32313133353236313431303231363533e78988e69d8331333365633836用快捷键设置,在开机的时候不停的按F12就会弹出开机启动项设置选框,选…

联想服务器做完raid找不到硬盘,联想服务器RAID配置步骤

《联想服务器RAID配置步骤》由会员分享,可在线阅读,更多相关《联想服务器RAID配置步骤(13页珍藏版)》请在人人文库网上搜索。 1、联想服务器RAID配置步骤联想服务器RAID配置步骤1. 开机按提示F1,进入BIOS菜单2. 第二项选择设置3. 最后一项选择…