写下这篇博客的原因:公司要求用树莓派驱动TSC打印机,在完成这个任务的过程中主要遇到了以下几个问题:

  • 官网提供TSC打印机的linux驱动只适用于x86_64,x86架构,树莓派是armV7架构
  • 官网提供的驱动TSC打印机的库都是.dll动态库,无法再linux系统下调用,且无法反编译

基于以上两个原因,我最后只好选择使用TSC打印机的指令集来驱动TSC打印机。

  1. TSC打印机官网地址:TSC打印机

  2. 使用TSC打印指令集驱动TSC打印机原理:
    在linux系统下,打印机使用USB接入后,会在/dev/usb/目录下,生成一个lp0文件,这个lp0文件就是TSC打印机的设备文件,要驱动TSC打印机就得向这个文件中写入TSC打印机指令集来打印指定打印内容。

  3. TSC打印编程之前的测试:
    既然知道了可以用指令集写入TSC打印机设备文件的方式,那么就得先熟悉TSC打印机指令,这里推荐使用官网的提供的DiagTool_V163工具进行测试,这个工具是windows系统下安装的,只是用来测试,需要安装官网提供的windows驱动:

    通过这个工具,可以直接使用发送指令集(点击图中的通信工具)的方式与TSC打印机进行通信。
    这里我有一个简单的使用这个工具,通过发送指令集来驱动TSC打印机的例子,供参考:

点击传送数据,即可驱动TSC打印机打印相关内容。

  1. 中文字符的打印实现:
    通过阅读TSC打印指令集文档后,我知道公司购买的打印机内的FLASH内存(2560KB)太小,无法存储中文字体(一般3000KB以上),因此虽然指令集文档中说明了有简体中文字体的支持,我也没办法使用。
    因此,为了解决这个中文字符打印的问题,仍然需要使用DiagTool_V163工具,通过这个工具,可以制作一个点阵型的字体,然后写入打印机中的FLASH即可使用中文字体,下面是我自己制作的一个微软雅黑字体:

    选择好要制作的字体之后,先点击“储存字形文件”来查看字体文件的大小(不能超过剩余的FLASH空间的大小),我的这个字体是2230KB,然后点击“传送字形文件”将字体写入打印机中,接下来就能够使用这个字体了:
    TEXT 100, 60, "字体名称“,0,1,1,2,”TSC打印机“
    PS:查看打印机FLASH剩余内存大小,可以点击“档案管理”,选择读取FLASH内存大小即可:
  2. Golang编程实现:
    打印机编程部分,我选择了自己熟悉的Go语言来进行编程,代码如下:
package tscimport ("bufio""bytes""fmt""golang.org/x/text/encoding/simplifiedchinese""os""printer""strconv"
)// TSC打印机设备文件路径
const DEV_FILE = "/dev/usb/lp0"//const DEV_FILE = "/home/toothless/golang/src/tsc/logic.txt"// 全局文件描述符
var gfd *os.File// 向打印机发送TSC指令
func TSCSendCommand(comm string) {var buf bytes.Buffer// 1. 构建写入器writer := bufio.NewWriter(gfd)// 2. 构建字符串buf.WriteString(comm)buf.WriteString("\r\n")// 3. 输出最后的命令字符串str := buf.String()command, err := simplifiedchinese.GBK.NewEncoder().String(str)if err != nil {fmt.Println(err)}//codefmt := mahonia.NewDecoder("gbk2312")//command := codefmt.ConvertString(str)// 4. 写入命令if _, err := writer.WriteString(command); nil != err {fmt.Println("[WRITE ERROR]:", err)return}writer.Flush()}// 构建打印内容git clone --depth 1 https://github.com/golang/text.git
func TSCText(x, y, font, content string) string {var comm string = ""switch font {case "MicroFont":comm = "TEXT " + x + "," + y + "," + FormatString(font) + "," + "0,2,2,1" + "," + FormatString(content)default:comm = "TEXT " + x + "," + y + "," + FormatString(font) + "," + "0,1,1,1" + "," + FormatString(content)}return comm
}// 构建条形码内容
func TSCBarcode(x, y, codeType, content string) string {// 1. 构建字符串comm := "BARCODE " + x + "," + y + "," + FormatString(codeType) + "," + "200,2,0,5,2" + "," + FormatString(content)return comm
}// 执行打印
func TSCPrint(print_num int) {comm := "PRINT 1," + strconv.Itoa(print_num)TSCSendCommand(comm)
}// 生成"string"格式的字符串
func FormatString(content string) string {return "\"" + content + "\""
}// 打印机初始化设置:设定纸张大小SIZE,间隙GAP等
func TSCInit() {// 打开打印机设备文件if fd, err := os.OpenFile(DEV_FILE, os.O_RDWR|os.O_APPEND, 0666); nil != err {panic(err)} else {gfd = fd}TSCSendCommand("SIZE 3.94,5.91")TSCSendCommand("GAP 0.08, 0")TSCSendCommand("SPEED 4")TSCSendCommand("DIRECTION 1")TSCSendCommand("CLS")
}// 结束一次打印
func TSCStop() {TSCSendCommand("EOP")gfd.Close()
}测试代码如下:
func TestTacPrinter(t *testing.T) {TSCInit()comm := TSCText("120", "220", "MicroFont", "一起学编程")TSCSendCommand(comm)comm = TSCText("120", "340", "MicroFont", "好好学习,天天向上")TSCSendCommand(comm)comm = TSCBarcode("120", "800", "128", "58167667390")TSCSendCommand(comm)TSCPrint(2)TSCStop()
}

在实现打印机编程的过程中,会遇到/dev/usb/lp0 不可读写的情况,这个就直接使用:
sudo chmod 666 /dev/usb/lp0 命令修改权限即可,但这种方式只能暂时修改权限,每次打印机重新连接就得重新执行这个命令,这里推荐这位博主的文章来进行永久权限修改:
永久修改权限

  1. 树莓派驱动TSC打印机:
    Golang是支持跨平台编译的,因此只需要将go源码文件编译成arm平台可用的可执行文件,再放入树莓派中执行即可。具体编译命令如下:
    GOOS=linux GOARCH=amd64 go build tsc.go

以上,就是树莓派使用指令集的方式驱动TSC打印机的全部内容,谢谢!

/dev/ttyUSB0 permission denied解决办法:https://blog.csdn.net/zbrj12345/article/details/79752221

树莓派使用指令集驱动TSC打印机相关推荐

  1. TSC打印机驱动问题

    TSC打印机驱动问题 这次是在一个条码扫描项目中,每扫描一箱产品,要产生一个箱标签与产品条码相关联. 前辈们使用的是 TSC TTP-243E Plus 这款条码打印机,TSCDLL.lib库程序调用 ...

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

    不要驱动,简单粗暴的用树莓派驱动USB打印机 admin 2015年4月14日   5 Comments 网上很多文章都是再说如何用树莓派来做一个通用打印服务器,但是在很多应用场景下,配置CUPS什么 ...

  3. TSC打印机使用教程终极版

    最近公司做一个资产采集的项目,之前做过此类项目,不过没有整理资料,借这次机会写一下,做个记录. 本教程使用的打印机型号:TSC TTP-244 Plus     官方文档 一.TSC打印机安装 1.机 ...

  4. JAVA调用TSC打印机打印标签(二维码,数据等)超详细!!

    本文打印机型号: TSC MA3400P 后端调用tsc打印机是通过DLL来进行调用的,首先你需要两个TSC文件直接复制到项目目录下边即可 可以直接去官网下载:https://www.chinatsc ...

  5. java 调用TSC打印机

    JNA 依赖 <dependency><groupId>com.sun.jna</groupId><artifactId>jna</artifac ...

  6. TSC打印机ttp-247(java)

    1.所需物品:java项目(jdk1.8),TTP-247打印机(1台),标签纸90*50(1卷) 本项目打印结果:不需要打印二维码,条形码.当前项目用到以标签的形式打印 2.连接打印机并调试打印机( ...

  7. TSC打印机打印条形码和二维码,JS实现方式

    自上一篇TSC打印条形码和二维码的文章发布以来,有不 少网友咨询相关技术, 今天全部整理一下,实现的源码和文件也全部公开. -- 2019.03.28  整理最新的js打印的实现方式 说明: 1.以下 ...

  8. 佳博 TSC打印机 TSPL指令开发

    如何在电脑上使用C# 调用佳博 TSC打印机指令控制打印 踩了不少坑 跟大家分享下开发需要注意的地方 1. 佳博和TSC的 BARCODE 指令有出入,TSC多了一个参数,直接用佳博的打印是扫码不出二 ...

  9. TSC打印机,利用javascript实现连续扫码自动打印,配置说明

    TSC打印机,利用javascript打印配置说明 页面预览: 页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...

  10. Windows应用程序如何调用驱动:打印机举例

    1. 什么是打印语言? 打印机语言指的是控制打印机工作的命令,它告诉打印机如何组织被打印的文档,打印机按照这些命令来处理计算机传来的打印数据,并最终准确的打印出文字与图像. 打印机语言大体上可分为两类 ...

最新文章

  1. struts文件异常Included file cannot be found
  2. Android Binder基本概念流程学习
  3. spring Boot Actuator使用
  4. 回复《我要阻止做java开发的男朋友去创业型公司工作吗?》园友问题
  5. 爬虫-cookie与session的功能与用途
  6. 3.Python配套习题
  7. Java 中的细节补充
  8. mahout0.7 示例运行纪实
  9. hadoop JOB的性能优化实践
  10. 关于协程及其锁的一些认识
  11. Vert.x 异步访问数据库 MySQL
  12. Springboot集成urule
  13. Android 手机如何改造成 Linux 服务器?
  14. 磁珠 符号_电子元件磁珠该如何使用呢?
  15. android两个app合并
  16. 17-11-01模拟赛
  17. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part6基于图谱的问答实现
  18. 戴维解惑——用iTestin云测做测试怎样拿大奖
  19. 我是这么绕过苹果ID锁的
  20. Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)

热门文章

  1. 手机怎么打开html.chm,chm格式文件怎么打开,华为手机chm阅读器哪个好
  2. 计算机网络asp视频教程,ASP.net动态网页制作视频教程
  3. 颜色对照表(四)(16进制、RGB、CMYK、HSV、中英文名)
  4. rpm命令卡主,无法执行
  5. 如何找python 包的位置
  6. 2019年苏大计算机考研872真题及解析
  7. 打印机 计算机 usb,电脑没法识别打印机(USB接口)
  8. Programe_Of_Beauty:2.17 数组循环位移
  9. 连锁零售多门店收银系统源码
  10. 战神笔记本安装win7,解决USB3.0、核显驱动、独显驱动