首页 > 解决方案 > 如何在 Android 上使用 Python 通过蓝牙发送 ESC 打印命令?

问题描述

所以这是我最初的问题:我尝试通过蓝牙使用 CPCL 命令打印 PIL 条形码图像。打印机为容大RPP320蓝牙打印机,支持CPCL&ESC/POS。我选择 CPCL 是因为我有另一台只运行 CPCL 的打印机,并且为了缩短开发时间,我至少目前使用 CPCL。现在我只是在测试一个基本的“Hello World”命令。因此,在阅读了 HP 和 Zebra CPCL pdf 小册子后,我想我并没有真正了解所有内容,但足以尝试一下。所以我从这个非常有用的网站上
搜索了蓝牙脚本。

这里改编的代码:

import bluetooth

serverMACAddress = '00:00:12:03:00:12'
port = 3
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.connect((serverMACAddress, port))
while 1:
    a = b'''!0 200 200 210 1
    TEXT 4 0 30 40 Hello World
    FORM
    OUTPUT'''
    byt = bytearray(a)
    for b in byt:
        s.send(hex(b))
sock.close()

运行此脚本后,我使用上面链接中的服务器脚本听取来自打印机的任何反馈。通过蓝牙的任何连接问题我都可以解决。
我想知道的是我应该将我的 CPCL 文本作为十六进制字节发送,还是应该使用 Utf-8 或 Latin 1 或其他东西对其进行编码?因为打印机现在没有和我说话。

例如

a = '''!0 200 200 210 1
TEXT 4 0 30 40 Hello World
FORM
OUTPUT'''
enc = a.encode('Latin 1')

答:使用 Utf-8 并将所有命令作为编码为bytearray.

编辑以解决原始问题:
因此,经过数小时后,我得出结论,PyBluez 将无法在 Android 上运行,并且不再尝试使用 CPCL 打印条形码 PIL 图像。我已经解决了我在另一个线程中遇到的与 Android 问题的蓝牙连接,但我还没有完成在其他操作系统上尝试 PyBluez。我将打印机切换为接受 ESC/POS 命令并使用以下命令打印条形码(这也适用于 UROVO K319 打印机):

gs = 29
esc = 27
bcode = str(1001)
print('Building barcode command')
#extend bytearray
#initialise printer
init_cmd = [esc,64]
wrt_send = bytearray(init_cmd)

#set bcode string placement below barcode 
hri_cmd = [gs,72,2]
wrt_send.extend(bytearray(hri_cmd))
hrif = [gs,102,1]
wrt_send.extend(bytearray(hrif))

#set bcode height
hbcode_cmd = [gs,104,80]
wrt_send.extend(bytearray(hbcode_cmd))
#set bcode width
wbcode_cmd = [gs,119,6]
wrt_send.extend(bytearray(wbcode_cmd))

#print bcode very important is len of bcode for Code128 and linefeed dec 10 at end
prnt_bcode_cmd_pre = [gs,107,73,len(bcode)]
post = bytearray([10])
bar = bcode.encode('utf-8')
prnt_bcode = bytearray(prnt_bcode_cmd_pre)
prnt_bcode.extend(bar)
prnt_bcode.extend(post)
wrt_send.extend(prnt_bcode)
self.send_stream.write(wrt_send)
self.send_stream.flush()

我没有使用 escpos python 库的原因是因为我无法让它在 Android 环境中与蓝牙一起使用。我知道这不符合我在原始问题中尝试的内容,但它确实解决了我通过 Android 上的蓝牙在打印机上打印条形码的问题。

标签: pythonandroidpython-3.xbluetoothprinter-control-language

解决方案


原始问题答案:使用 Utf-8 编码并将所有命令作为编码为bytearray. 如果您发送字符串,请将它们单独编码并扩展bytearray.


推荐阅读