通过蓝牙或USB与打印机设备进行通信和控制

5
这个设备是一个标签打印机,可以通过蓝牙和USB连接。我想它应该运行某种Linux系统,因为它有一个相当复杂的界面/屏幕,但我不确定。实际上,这是我想确定的事情。但是我的目标是获取一个shell或某种“有意义”的连接,通过它可以发送命令/数据,触发打印机的打印事件,而不使用制造商的软件
在Ubuntu中通过USB连接到设备会创建/dev/usb/lp0。我尝试使用Python的serial模块连接到它,但无法连接到串行端口。
通过蓝牙,我也能够连接,使用hcitool scan获取设备的MAC地址,然后使用rfcomm连接(使用此方法)。这将创建/dev/rfcomm0,我可以使用Python连接并发送数据。 是否有可能模仿制造商软件通常发送的USB /蓝牙数据进行打印,而不使用该软件?我认为,通过“嗅探”制造商软件发送的普通打印命令时发送的数据可以实现这一点(尽管我认为它可能对人类来说不可理解)。 如果这种模仿是可能的,我想知道是否只需通过蓝牙发送相应的数据就会导致打印事件。到目前为止,我没有理由认为我通过蓝牙连接发送的数据没有被接收,但我还没有从蓝牙连接中得到任何响应(数据或物理上的)。
任何有关如何实现我的总体目标的建议/建议将不胜感激。

1
通常这些设备使用一些特定的协议,例如爱普生有其协议定义得很清楚。他们提供程序员指南和所有命令,这些命令通过串行发送,可供开发人员使用。我认为创建模仿他们协议的软件需要认证。因为您的 udev 创建了 /dev/usb/lp0 设备,这意味着它知道您连接了打印机。附上 dmesg|tail 的输出可能会有用。知道打印机的供应商和型号,您可以寻找正确的驱动程序和如何向打印机提供数据的方法。我对蓝牙不是很熟悉,所以无法提供建议。 - Piotr Król
@PiotrKról 这是一个非常有帮助的评论,我能够找到制造商发布的开发人员参考文档,描述了打印机使用的通信协议。我会尝试操作并报告我的进展情况。 - Ryan
2个回答

2
这是完全可能的(很抱歉回答晚了6年,但希望这能帮助后来需要的人)。我有类似的问题,以下是我的解决方法。
我有一台MHT-P80F热敏打印机。我在设置中发现它支持一个叫做TSPL的协议。这些是你需要发送给打印机的指令,告诉它进行原始文本打印,甚至位图打印。
你需要做的就是构建正确的字节流(大多数是人类可读的ASCII码),并将其发送到/dev/usb/lp0。我没有通过蓝牙测试过,但我认为应该是类似的。
例如,如果你想打印出一个“Hello World”,这些指令就足够了。
CLS
SIZE 80mm,50mm
GAP 5mm,0mm
HOME
TEXT 0,0,"0",0,1,1,"Hello World"
PRINT 1

每行都用"\n"分隔。
说明(可以通过搜索TSPL找到更多):
- CLS 告诉打印机清除所有之前的命令。 - SIZE 告诉打印机每个标签的尺寸(宽度、高度)。 - GAP 每个标签之间有5mm的空白。 - HOME 重新定位纸卷以进行新的打印。 - PRINT 开始打印1份。
请注意,这些指令适用于离散标签的使用。对于整个纸卷可能会有所不同。不同打印机上的TSPL实现可能不同,因此您可能需要进行一些实验。
通常,如果您可以打印位图,则几乎可以打印任何文档(例如使用Python中的PIL或Node.js中的Jimp预先生成图像)。因此,以下是最有用的BITMAP命令: BITMAP 16,24,40,256,0,<BYTE STREAM> 其中,
- 16:您的位图的起始(最左侧)X坐标 - 24:您的位图的起始(最顶部)Y坐标 - 40:位图的宽度,以字节为单位(见下文) - 256:位图的高度,以为单位 - 0:打印模式,0表示覆盖该区域中的任何内容 <BYTESTREAM>是此图像的二进制数据(黑/白),从左到右,从上到下。
位图宽度以字节为单位给出,因此每个字节表示图像中8个水平连续点。最高位7在最左侧,最低位0在最右侧。因此,如果我们在此参数中写入40,则图像的宽度为40x8 = 320点。
相反,位图高度以点为单位给出。
大多数这样的热敏打印机具有203 DPI。这是一个有趣的起点进行调查:203/25.4=7.99,或者四舍五入为8。因此,对于打印机,每8个点等于1毫米。在上面的示例中,X = 16和Y = 24(都以点为单位)对应于起始位置X = 2mm和Y = 3mm。
最后,您通常不需要颜色的反转。在BITMAP命令中,位中的1表示正确的白色或未打印的点,而0表示黑色或加热的点。

1
我不确定蓝牙是否可用,但对于USB打印,您可以使用cups库(licups)并使用API进行打印。它使用IPP协议。通常,cups使用特定于打印机的.ppd文件(其中包含有关打印机的详细信息)进行安装。对于新的语言版本,例如PCL5、5e、6等,有通用的ppd文件可用于安装任何使用相应语言的打印机。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接