python - 如何在 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 上的蓝牙在打印机上打印条形码的问题。
解决方案
原始问题答案:使用 Utf-8 编码并将所有命令作为编码为bytearray
. 如果您发送字符串,请将它们单独编码并扩展bytearray
.
推荐阅读
- if-statement - 我可以对 put 和 delete 请求使用带有 fetch 的条件吗?
- javascript - 使用 Vanilla JS 添加内联 CSS 属性和后备值
- angular - 如何使用角度选择器将一个组件添加到另一个组件中?
- python - 如何在 Python 中解码 Avro 消息?
- python - 我需要采取的步骤才能让其他人看到我的烧瓶网页
- javascript - 为什么我的状态更新会覆盖现有数据值?
- angular - 未找到 t 的组件工厂。你把它添加到@NgModule.entryComponents 了吗?
- docker - 如何从 Docker 容器内部到外部(本地网络)的 Nginx 反向代理(proxy_pass)
- postgresql - 如何加快请求'SELECT'?
- python - 网页抓取到 .csv