这个设备是一个标签打印机。它可以通过蓝牙和USB连接。我可以想象它正在运行某种linux,因为它有相当复杂的界面/屏幕,但不确定。事实上,这是我想要确定的。但是我的目标是获得一个shell,或者某种“有意义的”连接,通过它我可以发送命令/数据,这些命令/数据将触发打印机的打印事件,而不需要使用制造商的软件
通过USB连接到ubuntu中的设备可以创建/dev/usb/lp0。我试着使用python的serial模块连接到这个模块,但是它无法连接到串口。
通过蓝牙I也能够连接,使用hcitool scan获得设备的MAC地址,然后rfcomm连接(使用this方法)。这创建了/dev/rfcomm0,我能够连接到它并将数据发送到使用python。
是否可以模仿制造商的软件通常通过usb/蓝牙发送的数据,以便在没有该软件的情况下打印?--我假设通过“嗅探”通过蓝牙发送的数据,而由制造商的软件发送正常的打印命令(尽管我认为没有理由让人看上去很容易理解)。
--如果这种模仿是可能的话,我想知道是否仅仅通过蓝牙发送等量的数据就会导致打印事件。到目前为止,我没有理由相信我通过蓝牙连接发送的数据没有被接收,但我还没有从蓝牙连接中得到任何类型的响应(数据或物理)。
如能就如何实现我的总体目标提出任何建议或建议,我们将不胜感激。
发布于 2021-12-08 22:45:11
这当然是可能的(对6年后的答案表示遗憾,但希望这将对以后需要帮助的人有所帮助)。我也有类似的问题,我就是这样解决的。
我有一台MHT-P80F热敏打印机。我在设置中发现它支持一个名为TSPL的协议。您需要将这些指令发送到打印机,并告诉它进行原始文本打印,甚至是位图。
您所需要做的就是构造正确的字节流(大部分是人类可读的ASCII),并将其发送到/dev/usb/lp0。我还没有通过蓝牙进行测试,但我认为应该是类似的。
例如,如果您想打印一个"Hello“,这些说明就足够了:
CLS
SIZE 80mm,50mm
GAP 5mm,0mm
HOME
TEXT 0,0,"0",0,1,1,"Hello World"
PRINT 1每一行都由一个"\n"分隔。
解释(可通过搜索TSPL找到更多解释):
注意,这些说明用于离散标签的使用。一整卷纸可能就不一样了。不同打印机上的TSPL实现可能不同,因此您可能需要进行一些实验。
通常,如果您可以打印位图,那么您几乎可以打印任何文档(例如,在Python中使用PIL或在Node.js中使用Jimp生成图像)。下面是最有用的位图命令:
BITMAP 16,24,40,256,0,<BYTE STREAM>
哪里
<BYTESTREAM>是该图像的二进制数据(黑/白),从左到右,从上到下。
位图宽度以字节为单位,因此每个字节表示图像中的8个水平连续点。最高位7是最左边,最低位是0最右边。所以,就像我们在这个参数中写40一样,图像将是宽度的40x8=320点。
坐标上的位图高度以圆点表示。
大多数这种热打印机的DPI为203。这是一个有趣的研究起点:203/25.4 = 7.99,或圆角为8。因此,对于打印机,每8点等于1毫米。在上述示例中,X=16和Y=24 (均为dots)对应于起始位置X=2mm和Y=3mm。
最后,您通常不需要反求此图像的颜色。在位图命令中,1 In a bit表示正确的白色或非打印点,0表示黑色或加热点。
发布于 2015-12-23 10:12:28
我不确定蓝牙,但对于USB打印,您可以使用cups库(许可),并使用API进行恶作剧。它使用IPP协议。通常cups使用特定于打印机的.ppd文件(其中包含打印机的详细信息)来安装它。对于新的语言版本,如PCL5、5e、6等,可以使用通用ppd文件安装任何使用各自语言的打印机。
https://stackoverflow.com/questions/34307459
复制相似问题