Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上使用Python通过蓝牙发送ESC打印命令?_Python_Android_Python 3.x_Bluetooth_Printer Control Language - Fatal编程技术网

如何在Android上使用Python通过蓝牙发送ESC打印命令?

如何在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

这就是我最初的问题:我尝试通过蓝牙使用CPCL命令打印PIL条形码图像。该打印机是一台Rongta RPP320蓝牙打印机,支持CPCL和ESC/POS。我之所以选择CPCL,是因为我有另一台打印机只运行CPCL,为了缩短开发时间,我至少目前使用CPCL。现在我只是测试一个基本的“helloworld”命令。因此,在阅读了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或拉丁语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()