如何在Android上使用Python通过蓝牙发送ESC打印命令?
这就是我最初的问题:我尝试通过蓝牙使用CPCL命令打印PIL条形码图像。该打印机是一台Rongta RPP320蓝牙打印机,支持CPCL和ESC/POS。我之所以选择CPCL,是因为我有另一台打印机只运行CPCL,为了缩短开发时间,我至少目前使用CPCL。现在我只是测试一个基本的“helloworld”命令。因此,在阅读了HP和Zebra CPCL pdf手册之后,我想我并不是真的了解所有内容,但足以尝试一下。如何在Android上使用Python通过蓝牙发送ESC打印命令?,python,android,python-3.x,bluetooth,printer-control-language,Python,Android,Python 3.x,Bluetooth,Printer Control Language,这就是我最初的问题:我尝试通过蓝牙使用CPCL命令打印PIL条形码图像。该打印机是一台Rongta RPP320蓝牙打印机,支持CPCL和ESC/POS。我之所以选择CPCL,是因为我有另一台打印机只运行CPCL,为了缩短开发时间,我至少目前使用CPCL。现在我只是测试一个基本的“helloworld”命令。因此,在阅读了HP和Zebra CPCL pdf手册之后,我想我并不是真的了解所有内容,但足以尝试一下。 所以我从中找到了蓝牙脚本 这里是修改后的代码: import bluetooth
所以我从中找到了蓝牙脚本 这里是修改后的代码:
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或拉丁语1或其他编码?因为打印机现在不跟我说话 例如 回答:使用Utf-8并以ASCII小数形式发送所有命令,该小数由数组
编码
编辑以解决原始问题:
因此,经过几个小时后,我得出结论,PyBluez将无法在Android上工作,不再尝试使用CPCL打印条形码PIL图像。我已经解决了与Android的蓝牙连接问题,但我还没有在其他操作系统上尝试完PyBluez。我将打印机切换为接受ESC/POS命令,并使用以下命令打印条形码(这也适用于UROVO K319打印机):
我之所以没有使用escpos python库,是因为我无法在Android环境中使用蓝牙。我知道这不符合我在原始问题中尝试的内容,但它确实解决了我在Android上通过蓝牙在打印机上打印条形码的问题。原始问题答案:使用Utf-8编码,并将所有命令发送为ASCII小数,编码为bytearray
。如果发送字符串,请分别对其进行编码,并扩展字节数组
a = '''!0 200 200 210 1
TEXT 4 0 30 40 Hello World
FORM
OUTPUT'''
enc = a.encode('Latin 1')
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()