Pytohon 인쇄 성공 열 감지 프린터 "PAPERANG"(Windows 10, Python 3.6)
열 감지 프린터 PAPERANG이 성공적으로 인쇄되었습니다.
샘플 코드
에서 다운로드하십시오.
환경 구조 $ conda create -n paperang python=3.6
$ conda activate paperang
$ cd miaomiaoji-tool
$ pip install PyBluez-win10
$ pip install opencv-python
실행 $ python message_process.py
해설
여기. 포크가 변경되었습니다.
message_process.py를 실행하면 Filter 함수에 오류가 발생합니다.47행과 64행의 Filter 함수를 list로 정리합니다.여기. valid_devices = list(filter(lambda d: len(d) == 2 and d[1] in valid_names, nearby_devices))
・・・
valid_service = list(filter(
lambda s: 'protocol' in s and 'name' in s and s['protocol'] == 'RFCOMM' and s['name'] == 'SerialPort',
service_matches
))
pybluez면 63행find.서비스가 있는 곳에서 OSError가 나오기 때문에 PyBluez-win10을 사용했습니다.Python3에서 맵/filter 사용 방법 service_matches = find_service(uuid=self.uuid, address=self.address)
서비스 이름을 찾을 수 없는 오류가 발생했습니다. 서비스matches를 print로 표시해 보세요.[{'host': '00:15:83:B7:11:AF', 'name': b'SerialPort', 'description': '', 'port': 1, 'protocol': 'RFCOMM', 'rawrecord': b'5J\t\x00\x00\n\x00\x01\x00\x0f\t\x00\x015\x03\x19\x11\x01\t\x00\x045\x0c5\x03\x19\x01\x005\x05\x19\x00\x03\x08\x01\t\x00\x055\x03\x19\x10\x02\t\x00\x08\x08\xff\t\x00\t5\x085\x06\x19\x11\x01\t\x01\x02\t\x01\x00%\nSerialPort', 'service-classes': [b'1101'], 'profiles': [(b'1101', 258)], 'provider': None, 'service-id': None, 'handle': 65551}, {'host': '00:15:83:B7:11:AF', 'name': b'WeChat', 'description': '', 'port': 8, 'protocol': 'RFCOMM', 'rawrecord': b'5T\t\x00\x00\n\x00\x01\x00\x0e\t\x00\x015\x11\x1c\xe5\xb1R\xedkF\t\xe9Fxf^\x9a\x97,\xbc\t\x00\x045\x0c5\x03\x19\x01\x005\x05\x19\x00\x03\x08\x08\t\x00\x055\x03\x19\x10\x02\t\x00\x08\x08\xff\t\x00\t5\x085\x06\x19\x11\x01\t\x01\x02\t\x01\x00%\x06WeChat', 'service-classes': ['E5B152ED-6B46-09E9-4678-665E9A972CBC'], 'profiles': [(b'1101', 258)], 'provider': None, 'service-id': None, 'handle': 65550}]
'name':b'SerialPort'이기 때문에 65행의'SerialPort'에 b를 붙인다.lambda s: 'protocol' in s and 'name' in s and s['protocol'] == 'RFCOMM' and s['name'] == b'SerialPort',
그리고 서비스print matches에서 다음 struct.패키지 오류가 발생했습니다. File "message_process.py", line 88, in packPerBytes
result += struct.pack('<i', self.crc32(bytes))
struct.error: argument out of range
88행의 ※OSError when program try to use functions from bluetooth._msbt #279 result += struct.pack('<I', self.crc32(bytes))
왜냐하면 이어서 엔코드가 오류가 났어요.File "message_process.py", line 110, in recv
logging.info("Recv: " + raw_msg.encode('hex'))
AttributeError: 'bytes' object has no attribute 'encode'
110행과 122행.엔코드를.hex()가 됩니다.struct — Interpret bytes as packed binary data logging.info("Recv: " + raw_msg.hex())
・・・
, self.payload_length, self.payload.hex()
image_process.py에서 맵 함수 오류가 발생했기 때문에list로 32줄의 맵 함수를 묶습니다.File "\miaomiaoji-tool\image_process.py", line 20, in frombits
for b in range(len(bits) / 8):
TypeError: object of type 'map' has no len()
또한 20행 for문장의range 범위는flat입니다. int에서 캐릭터를 분배하십시오.for b in range(int(len(bits) / 8)):
153행의 struct.팩에 오류가 발생할 수 있기 때문에 리뷰를 할 수 있습니다.# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
300줄의 줄을 인쇄하려면 이진법이 필요합니다.sendImageToBt의 내용은 msg에 바이너리 문자열을 직접 추가합니다.def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
msg = binary_img
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
# Print a pure black image with 300 lines
img = b'\xff' * 48 * 300
mmj.sendImageToBt(img)
프린트 됐습니다.
How do I fix AttributeError: 'bytes' object has no attribute 'encode'?
사실,self.각 라인은 sendToBt로 보내야 합니다.def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
msgs = [binary_img[x: x+192] for x in range(0, len(binary_img), 192)] # 4*48
for msg in msgs:
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
이게 진짜 300라인이야.sendBinaryToBt라는 함수명으로 바뀌었습니다.
\xff는 검정색,\x00은 흰색입니다.\xff를 2진법으로 하면 이해하기 쉬워요.\xff는 0b11111로 검은색 세로줄 8개를 그립니다.따라서 8비트는 이미지의 8픽셀 양을 나타냅니다.가로선의 폭은 "\xff"로 최대 48개입니다.즉, 이미지 폭은 8입니다.×48=384 픽셀.
이미지 크기 조정, 이치화, [0, 1] 값으로 변환, 8개의 픽셀마다 16진수로 변환, 줄마다 인쇄.def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
height, width = binary_img.shape[:]
for line in range(height):
bits = [0 if x > 0 else 1 for x in binary_img[line]]
bits = [bits[x:x+8] for x in range(0, len(bits), 8)]
msg = ''
for bit in bits:
bin = '0b'+''.join(str(x) for x in bit)
msg += '{:02x}'.format(int(bin, 0))
msg = bytes.fromhex(msg)
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
・・・
# Print an existing image(need opencv):
img = cv2.imread('kumamcn.png', 0)
ret, binary_img = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
height, width = binary_img.shape[:]
binary_img = cv2.resize(binary_img, (384, int(height*384.0/width)), cv2.INTER_AREA)
mmj.sendImageToBt(binary_img)
완성이렇게 하면 임의의 그림을 인쇄할 수 있다.
Reference
이 문제에 관하여(Pytohon 인쇄 성공 열 감지 프린터 "PAPERANG"(Windows 10, Python 3.6)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SatoshiGachiFujimoto/items/0b34461c8a975b459bc9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ conda create -n paperang python=3.6
$ conda activate paperang
$ cd miaomiaoji-tool
$ pip install PyBluez-win10
$ pip install opencv-python
실행 $ python message_process.py
해설
여기. 포크가 변경되었습니다.
message_process.py를 실행하면 Filter 함수에 오류가 발생합니다.47행과 64행의 Filter 함수를 list로 정리합니다.여기. valid_devices = list(filter(lambda d: len(d) == 2 and d[1] in valid_names, nearby_devices))
・・・
valid_service = list(filter(
lambda s: 'protocol' in s and 'name' in s and s['protocol'] == 'RFCOMM' and s['name'] == 'SerialPort',
service_matches
))
pybluez면 63행find.서비스가 있는 곳에서 OSError가 나오기 때문에 PyBluez-win10을 사용했습니다.Python3에서 맵/filter 사용 방법 service_matches = find_service(uuid=self.uuid, address=self.address)
서비스 이름을 찾을 수 없는 오류가 발생했습니다. 서비스matches를 print로 표시해 보세요.[{'host': '00:15:83:B7:11:AF', 'name': b'SerialPort', 'description': '', 'port': 1, 'protocol': 'RFCOMM', 'rawrecord': b'5J\t\x00\x00\n\x00\x01\x00\x0f\t\x00\x015\x03\x19\x11\x01\t\x00\x045\x0c5\x03\x19\x01\x005\x05\x19\x00\x03\x08\x01\t\x00\x055\x03\x19\x10\x02\t\x00\x08\x08\xff\t\x00\t5\x085\x06\x19\x11\x01\t\x01\x02\t\x01\x00%\nSerialPort', 'service-classes': [b'1101'], 'profiles': [(b'1101', 258)], 'provider': None, 'service-id': None, 'handle': 65551}, {'host': '00:15:83:B7:11:AF', 'name': b'WeChat', 'description': '', 'port': 8, 'protocol': 'RFCOMM', 'rawrecord': b'5T\t\x00\x00\n\x00\x01\x00\x0e\t\x00\x015\x11\x1c\xe5\xb1R\xedkF\t\xe9Fxf^\x9a\x97,\xbc\t\x00\x045\x0c5\x03\x19\x01\x005\x05\x19\x00\x03\x08\x08\t\x00\x055\x03\x19\x10\x02\t\x00\x08\x08\xff\t\x00\t5\x085\x06\x19\x11\x01\t\x01\x02\t\x01\x00%\x06WeChat', 'service-classes': ['E5B152ED-6B46-09E9-4678-665E9A972CBC'], 'profiles': [(b'1101', 258)], 'provider': None, 'service-id': None, 'handle': 65550}]
'name':b'SerialPort'이기 때문에 65행의'SerialPort'에 b를 붙인다.lambda s: 'protocol' in s and 'name' in s and s['protocol'] == 'RFCOMM' and s['name'] == b'SerialPort',
그리고 서비스print matches에서 다음 struct.패키지 오류가 발생했습니다. File "message_process.py", line 88, in packPerBytes
result += struct.pack('<i', self.crc32(bytes))
struct.error: argument out of range
88행의 ※OSError when program try to use functions from bluetooth._msbt #279 result += struct.pack('<I', self.crc32(bytes))
왜냐하면 이어서 엔코드가 오류가 났어요.File "message_process.py", line 110, in recv
logging.info("Recv: " + raw_msg.encode('hex'))
AttributeError: 'bytes' object has no attribute 'encode'
110행과 122행.엔코드를.hex()가 됩니다.struct — Interpret bytes as packed binary data logging.info("Recv: " + raw_msg.hex())
・・・
, self.payload_length, self.payload.hex()
image_process.py에서 맵 함수 오류가 발생했기 때문에list로 32줄의 맵 함수를 묶습니다.File "\miaomiaoji-tool\image_process.py", line 20, in frombits
for b in range(len(bits) / 8):
TypeError: object of type 'map' has no len()
또한 20행 for문장의range 범위는flat입니다. int에서 캐릭터를 분배하십시오.for b in range(int(len(bits) / 8)):
153행의 struct.팩에 오류가 발생할 수 있기 때문에 리뷰를 할 수 있습니다.# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
300줄의 줄을 인쇄하려면 이진법이 필요합니다.sendImageToBt의 내용은 msg에 바이너리 문자열을 직접 추가합니다.def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
msg = binary_img
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
# Print a pure black image with 300 lines
img = b'\xff' * 48 * 300
mmj.sendImageToBt(img)
프린트 됐습니다.
How do I fix AttributeError: 'bytes' object has no attribute 'encode'?
사실,self.각 라인은 sendToBt로 보내야 합니다.def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
msgs = [binary_img[x: x+192] for x in range(0, len(binary_img), 192)] # 4*48
for msg in msgs:
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
이게 진짜 300라인이야.sendBinaryToBt라는 함수명으로 바뀌었습니다.
\xff는 검정색,\x00은 흰색입니다.\xff를 2진법으로 하면 이해하기 쉬워요.\xff는 0b11111로 검은색 세로줄 8개를 그립니다.따라서 8비트는 이미지의 8픽셀 양을 나타냅니다.가로선의 폭은 "\xff"로 최대 48개입니다.즉, 이미지 폭은 8입니다.×48=384 픽셀.
이미지 크기 조정, 이치화, [0, 1] 값으로 변환, 8개의 픽셀마다 16진수로 변환, 줄마다 인쇄.def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
height, width = binary_img.shape[:]
for line in range(height):
bits = [0 if x > 0 else 1 for x in binary_img[line]]
bits = [bits[x:x+8] for x in range(0, len(bits), 8)]
msg = ''
for bit in bits:
bin = '0b'+''.join(str(x) for x in bit)
msg += '{:02x}'.format(int(bin, 0))
msg = bytes.fromhex(msg)
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
・・・
# Print an existing image(need opencv):
img = cv2.imread('kumamcn.png', 0)
ret, binary_img = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
height, width = binary_img.shape[:]
binary_img = cv2.resize(binary_img, (384, int(height*384.0/width)), cv2.INTER_AREA)
mmj.sendImageToBt(binary_img)
완성이렇게 하면 임의의 그림을 인쇄할 수 있다.
Reference
이 문제에 관하여(Pytohon 인쇄 성공 열 감지 프린터 "PAPERANG"(Windows 10, Python 3.6)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SatoshiGachiFujimoto/items/0b34461c8a975b459bc9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ python message_process.py
여기. 포크가 변경되었습니다.
message_process.py를 실행하면 Filter 함수에 오류가 발생합니다.47행과 64행의 Filter 함수를 list로 정리합니다.여기.
valid_devices = list(filter(lambda d: len(d) == 2 and d[1] in valid_names, nearby_devices))
・・・
valid_service = list(filter(
lambda s: 'protocol' in s and 'name' in s and s['protocol'] == 'RFCOMM' and s['name'] == 'SerialPort',
service_matches
))
pybluez면 63행find.서비스가 있는 곳에서 OSError가 나오기 때문에 PyBluez-win10을 사용했습니다.Python3에서 맵/filter 사용 방법 service_matches = find_service(uuid=self.uuid, address=self.address)
서비스 이름을 찾을 수 없는 오류가 발생했습니다. 서비스matches를 print로 표시해 보세요.[{'host': '00:15:83:B7:11:AF', 'name': b'SerialPort', 'description': '', 'port': 1, 'protocol': 'RFCOMM', 'rawrecord': b'5J\t\x00\x00\n\x00\x01\x00\x0f\t\x00\x015\x03\x19\x11\x01\t\x00\x045\x0c5\x03\x19\x01\x005\x05\x19\x00\x03\x08\x01\t\x00\x055\x03\x19\x10\x02\t\x00\x08\x08\xff\t\x00\t5\x085\x06\x19\x11\x01\t\x01\x02\t\x01\x00%\nSerialPort', 'service-classes': [b'1101'], 'profiles': [(b'1101', 258)], 'provider': None, 'service-id': None, 'handle': 65551}, {'host': '00:15:83:B7:11:AF', 'name': b'WeChat', 'description': '', 'port': 8, 'protocol': 'RFCOMM', 'rawrecord': b'5T\t\x00\x00\n\x00\x01\x00\x0e\t\x00\x015\x11\x1c\xe5\xb1R\xedkF\t\xe9Fxf^\x9a\x97,\xbc\t\x00\x045\x0c5\x03\x19\x01\x005\x05\x19\x00\x03\x08\x08\t\x00\x055\x03\x19\x10\x02\t\x00\x08\x08\xff\t\x00\t5\x085\x06\x19\x11\x01\t\x01\x02\t\x01\x00%\x06WeChat', 'service-classes': ['E5B152ED-6B46-09E9-4678-665E9A972CBC'], 'profiles': [(b'1101', 258)], 'provider': None, 'service-id': None, 'handle': 65550}]
'name':b'SerialPort'이기 때문에 65행의'SerialPort'에 b를 붙인다.lambda s: 'protocol' in s and 'name' in s and s['protocol'] == 'RFCOMM' and s['name'] == b'SerialPort',
그리고 서비스print matches에서 다음 struct.패키지 오류가 발생했습니다. File "message_process.py", line 88, in packPerBytes
result += struct.pack('<i', self.crc32(bytes))
struct.error: argument out of range
88행의 ※OSError when program try to use functions from bluetooth._msbt #279 result += struct.pack('<I', self.crc32(bytes))
왜냐하면 이어서 엔코드가 오류가 났어요.File "message_process.py", line 110, in recv
logging.info("Recv: " + raw_msg.encode('hex'))
AttributeError: 'bytes' object has no attribute 'encode'
110행과 122행.엔코드를.hex()가 됩니다.struct — Interpret bytes as packed binary data logging.info("Recv: " + raw_msg.hex())
・・・
, self.payload_length, self.payload.hex()
image_process.py에서 맵 함수 오류가 발생했기 때문에list로 32줄의 맵 함수를 묶습니다.File "\miaomiaoji-tool\image_process.py", line 20, in frombits
for b in range(len(bits) / 8):
TypeError: object of type 'map' has no len()
또한 20행 for문장의range 범위는flat입니다. int에서 캐릭터를 분배하십시오.for b in range(int(len(bits) / 8)):
153행의 struct.팩에 오류가 발생할 수 있기 때문에 리뷰를 할 수 있습니다.# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
300줄의 줄을 인쇄하려면 이진법이 필요합니다.sendImageToBt의 내용은 msg에 바이너리 문자열을 직접 추가합니다.def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
msg = binary_img
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
# Print a pure black image with 300 lines
img = b'\xff' * 48 * 300
mmj.sendImageToBt(img)
프린트 됐습니다.How do I fix AttributeError: 'bytes' object has no attribute 'encode'?
사실,self.각 라인은 sendToBt로 보내야 합니다.
def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
# msg = struct.pack("<%dc" % len(binary_img, *binary_img)
msgs = [binary_img[x: x+192] for x in range(0, len(binary_img), 192)] # 4*48
for msg in msgs:
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
이게 진짜 300라인이야.sendBinaryToBt라는 함수명으로 바뀌었습니다.\xff는 검정색,\x00은 흰색입니다.\xff를 2진법으로 하면 이해하기 쉬워요.\xff는 0b11111로 검은색 세로줄 8개를 그립니다.따라서 8비트는 이미지의 8픽셀 양을 나타냅니다.가로선의 폭은 "\xff"로 최대 48개입니다.즉, 이미지 폭은 8입니다.×48=384 픽셀.
이미지 크기 조정, 이치화, [0, 1] 값으로 변환, 8개의 픽셀마다 16진수로 변환, 줄마다 인쇄.
def sendImageToBt(self, binary_img):
self.sendPaperTypeToBt()
height, width = binary_img.shape[:]
for line in range(height):
bits = [0 if x > 0 else 1 for x in binary_img[line]]
bits = [bits[x:x+8] for x in range(0, len(bits), 8)]
msg = ''
for bit in bits:
bin = '0b'+''.join(str(x) for x in bit)
msg += '{:02x}'.format(int(bin, 0))
msg = bytes.fromhex(msg)
self.sendToBt(msg, BtCommandByte.PRT_PRINT_DATA, need_reply=False)
self.sendFeedLineToBt(self.padding_line)
・・・
# Print an existing image(need opencv):
img = cv2.imread('kumamcn.png', 0)
ret, binary_img = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
height, width = binary_img.shape[:]
binary_img = cv2.resize(binary_img, (384, int(height*384.0/width)), cv2.INTER_AREA)
mmj.sendImageToBt(binary_img)
완성이렇게 하면 임의의 그림을 인쇄할 수 있다.Reference
이 문제에 관하여(Pytohon 인쇄 성공 열 감지 프린터 "PAPERANG"(Windows 10, Python 3.6)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SatoshiGachiFujimoto/items/0b34461c8a975b459bc9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)