Как отправить команду печати ESC через Bluetooth с помощью Python на Android?

Итак, это была моя первоначальная проблема: я попытался распечатать изображения штрих-кода PIL с помощью команд CPCL через Bluetooth. Принтер представляет собой Bluetooth-принтер Rongta RPP320, который поддерживает CPCL и ESC/POS. Я выбрал CPCL, потому что у меня есть другой принтер, который работает только с CPCL, и чтобы сократить время разработки, я использую CPCL, по крайней мере, на данный момент. Пока я просто тестирую базовую команду «Hello World». Итак, прочитав буклеты HP и Zebra CPCL в формате pdf, я думаю, что на самом деле не все понимаю, но достаточно, чтобы попробовать. /bluetooth-programming-with-python-3/" rel="nofollow noreferrer">это очень полезный сайт.

Вот адаптированный код:

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()

После запуска этого сценария я прослушиваю любые отзывы от принтера, используя сценарий сервера по ссылке выше. Любые проблемы с подключением через bluetooth я могу решить.
Я хочу знать, должен ли я отправлять свой текст CPCL в виде шестнадцатеричных байтов или мне следует кодировать его с помощью Utf-8, Latin 1 или чего-то еще? Потому что принтер сейчас со мной не разговаривает.

E.g.

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

Ответ: Используйте Utf-8 и отправляйте все команды в виде десятичных знаков ASCII, закодированных как bytearray.

РЕДАКТИРОВАТЬ, чтобы решить исходную проблему:
Итак, после многих часов я пришел к выводу, что PyBluez не будет работать. на Android и отказался от попыток печатать изображения PIL со штрих-кодом с помощью CPCL. Я решил соединение Bluetooth с проблемами 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()

Причина, по которой я не использовал библиотеку Python escpos, заключается в том, что я не смог заставить ее работать с Bluetooth в среде Android. Я знаю, что это не соответствовало тому, что я пытался задать в своем первоначальном вопросе, но это решило мою проблему с печатью штрих-кодов на моем принтере через Bluetooth на Android.


person Hmerman6006    schedule 02.10.2019    source источник


Ответы (1)


Исходный ответ на вопрос: используйте кодировку Utf-8 и отправьте все команды в виде десятичных знаков ASCII, которые закодированы как bytearray. Если вы отправляете строки, кодируйте их отдельно и расширяйте bytearray.

person Hmerman6006    schedule 01.12.2019