利用树莓派完成POS58打印机的无驱动打印(初学者)
导语:网上有很多文章介绍树莓派不用驱动直接用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
利用树莓派完成POS58打印机的无驱动打印(初学者)相关推荐
- java usb 无驱打印_Windows Usb 无驱动打印
\?\USB#VID_8866&PID_0100#0001B0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed} USB小票打印解决办法 一.需要驱动, ...
- java 打印机类printer_GitHub - 505058216/thermal_printer: Java实现网络小票打印机自定义无驱打印...
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...
- java 小票打印_GitHub - SubLuLu/thermal_printer: Java实现网络小票打印机自定义无驱打印...
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...
- java pos打印机_Java实现POS打印机自定义无驱打印
热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印模板为了增强打印效果的通用性,因此需要提 ...
- 利用树莓派完成热敏打印机的无驱打印
引言 "热敏打印机的工作原理是打印头上安装有半导体加热元件,打印头加热并接触热敏打印纸后就可以打印出需要的图案,其原理与热敏式传真机类似.图象是通过加热,在膜中产生化学反应而生成的.这种热敏 ...
- 利用DuplicateHandle()无驱动的另类读写内存方法,理论上可以过游戏保护读写
突发奇想出的原创思路,在理论上经过完善应该可以做到过游戏保护无驱动读写内存 首先看一下MSDN对这个函数的定义 BOOL DuplicateHandle(HANDLE hSourceProcessHa ...
- 光谱仪测试软件死机和电脑系统有关系吗,利用无驱动系统解决光谱仪控制计算机不兼容的问题.pdf...
利用无驱动系统解决光谱仪控制计算机不兼容的问题.pdf 太钢科技 ·33· 利用无驱动系统解决光谱仪 控制计算机不兼容的问题 技术中心 张征宇 赵卫星 刘兆晋 摘 要 将原来的操作系统中的各个驱动程序 ...
- Linux 自己写wifi打印驱动,使用树莓派搭建无线打印机
花了两百多购买了最低配的入门打印机 HP DeskJet 1112 ,买完有点后悔没有多花点钱直接搞一个有无线打印功能的. 于是乎掏出闲置已久的树莓派,准备来一波强行无线打印. 1 下载驱动 树莓派默 ...
- 【利用树莓派制作无线打印服务器】
利用树莓派制作无线打印服务器 文章目录 利用树莓派制作无线打印服务器 一.树莓派是什么? 二.什么是CUPS 树莓派如何启用CUPS 三.电脑端如何连接树莓派打印服务器? 四.手机如何连接树莓派打印服 ...
- [转]Java 实现 POS 打印机无驱打印
来源:http://www.ibm.com/developerworks/cn/java/j-lo-pos/ Java 实现 POS 打印机无驱打印 文档选项 <tr valign=" ...
最新文章
- 对声音信标信号的采样频率
- mysql选择table_mysql – 选择distinct table4_id,table3_id和table2_...
- iis7.5php.2,Windows2008 IIS7.5搭建PHP5.2
- Effective Java之用enum代替int常量(三十)
- redhat6.8链路聚合
- 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器--在深度学习的视觉分类中的,这两个分类器的原理和比较
- 浏览器DNS_PROBE_FINISHED_NXDOMAIN报错解决办法
- Enterprise Library 4.0简介及改进
- 题解 【NOIP2010】关押罪犯
- C#程序加密工具.Net Reactor教程
- 【转载】python中strip(),lstrip(),rstrip()函数的区别
- js上传文件到OSS
- python怎么转换中文_使用Python进行中文繁简转换
- 「维基解密」:西游记死亡人数
- Java集合面试题汇总【附答案】持续更新
- 基因芯片与NGS区别[转载]
- 论坛数据库设计与性能优化
- PDFBox加密和解密PDF文件
- 人工智能——Search搜索问题
- STL系列之四 heap 堆