不要驱动,简单粗暴的用树莓派驱动USB打印机

admin 2015年4月14日   5 Comments

网上很多文章都是再说如何用树莓派来做一个通用打印服务器,但是在很多应用场景下,配置CUPS什么的真的是自己zuo自己die的好途径,各类linux下的驱动配置起来令人吐血。而驱动各种热敏票据打印机,比如打胶带啊,二维码贴纸啊,小票之类的打印机因为根本找不到linux的驱动,要搞起来更是Mission Imposiable。所以本文的目的就是为了不用驱动直接用USB接口的各类热敏打印机。因为没有驱动,所以我们只能用简单粗暴的方式通过USB直接操作打印机了。下面来看看怎么搞:

首先,你得有一台打印机,淘宝有卖的,几十元到一两百,可以打热敏胶带,所以做个打印服务器标签的东西也不错的,其他用途可以自行开发。

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

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是0×03,所以我就写的这个值。 之后呢就可以愉快的打印了:

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() #关闭连接

祝玩得愉快。

via http://liming.me/post/usb

本文来自: 树莓派实验室
链接地址: http://shumeipai.nxez.com/2015/04/14/raspberry-pi-usb-printer-driver.html

不要驱动,简单粗暴的用树莓派驱动USB打印机相关推荐

  1. 详细到吐血 —— 树莓派驱动开发入门:从读懂框架到自己写驱动

    师承陈立臣 目录 README 一.驱动初步认知 为什么要学会写驱动? 设备号的两个作用? 区分硬件 索引驱动在驱动链表中的位置 从open到设备,从上层到底层,经历了什么? 二.基于内核驱动框架编写 ...

  2. 树莓派驱动6轴传感器MPU6500与SPI初体验(二)

    接前回<< 树莓派驱动6轴传感器MPU6500与SPI初体验 对于一个想做嵌入开发的外围开发者,做硬件相关的应用开发真的是老太太啃骨头.一周以后凭借一点小聪明和给力的度娘,总算在树梅派上实 ...

  3. python物联网驱动_树莓派驱动的物联网滴灌系统

    MAKER:Technovation/译:趣无尽 Cherry(转载请注明出处) 本次介绍的是一个由树莓派驱动的物联网滴灌系统,比往期<用树莓派制作一款自动浇灌系统>的功能更加完备. 利用 ...

  4. 树莓派驱动 WS2812 灯珠 不亮的问题

    前言 树莓派在控制某些硬件外设上坑还真不少,今天就又踩了一个(其实有两天了).其实越复杂的问题往往是有越简单的解决办法. 树莓派驱动ws2812 网上一搜几乎都是 用的 rpi-ws281x 这个库 ...

  5. 有关树莓派驱动1.3寸IPS屏幕的一点经验

    有关树莓派驱动1.3寸IPS屏幕的经验 前言 CS引脚 按键 显示效果 后记 分享最近我用树莓派驱动IPS屏幕及微雪1.3inch LCD HAT的经验 前言 我的树莓派zero w已经吃灰很久了,趁 ...

  6. Linux驱动开发(十)---树莓派输入子系统学习(红外接收)

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  7. 树莓派(十一)树莓派驱动开发入门:从读懂框架到自己写驱动(上)

    嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一.驱动初步认知 为什么要学会写驱动? 设备号的两个作用? 索引驱动在驱动链表中的位置 从open到设备,从上层到底层,经历了什么?(理解透这个工 ...

  8. 简单粗暴方便好用树莓派FTP远程文件服务器

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 鸣谢 (按照DLGG惯例先鸣谢)感谢yoyojacky漂移菌的技术支持感谢igyang ...

  9. 【树莓派】更新系统镜像下载地址,可能是最简单粗暴的树莓派搭建个人网站教程...

    宝塔配置端口8888, 用户名:oat8pitk 密码:和树莓派登录密码都是raspberry 测试网站(非wordpress)端口:80 网盘目录下同名tar.gz文件为镜像的压缩文件,文件大小小很 ...

最新文章

  1. DF-SLAM:一种深度特征提取方法
  2. 想在PyTorch里训练BERT,请试试Facebook跨语言模型XLM
  3. java 求最长子串
  4. mysql2.1.4安装_安装Apache2.2.4+Mysql5.0.27+php5.2.1详细安装说明
  5. linux权限bcd码是6,Linux权限管理(1)基本权限
  6. java sqlite 池_java – SQLite连接池
  7. Jibun 银行:一家纯网络银行,利用智能手机打开金融服务领域的新天地
  8. 微信小程序(云开发)----微信支付
  9. php公众号支付开发,微信公众号支付开发
  10. 抗议浪潮不断,峰会笑声阵阵
  11. java adsl 拨号_Java实现ADSL拨号上网
  12. Multi-UA V Cooperative Exploringfor the Unknown Indoor EnvironmentBased on Dynamic Target Tracking翻译
  13. gojs开发环境去除水印
  14. 计算机学算法的意义,浅析算法在计算机编程中的重要作用
  15. Android 11.0 ActivityManagerService的启动流程
  16. java中final,static,this,supper关键字的异同
  17. apfs扩容_如何在MacOS High Sierra上调整APFS容器的大小
  18. phpcms选择文件无法加载插件怎么办_win7浏览器显示无法加载插件的两种修复方法...
  19. HNOI2018 摸鱼记
  20. 浅谈列控系统的阶梯式分级速度控制中专有名词的表述问题

热门文章

  1. npm ci和npm install区别
  2. 【数据结构】排序算法总结及代码实现
  3. vs2008无法安装
  4. 中北大学计算机学院校长,韩燮
  5. 维基百科,全世界的百科全书—Jimmy Wales
  6. JavaWeb_E家园项目
  7. 栈区数据被飞踩问题定位手段
  8. HTML5 CSS3专题 诱人的实例 CSS3打造百度贴吧的3D翻牌效果 以及图片提交
  9. js中return的用法
  10. JavaScript中scope介绍