[일반] 휴대용 블루투스 포토 프린터 만들기
- HelloMaker
- 0
- 17,497
- 0
- 0
- 글주소
- 12-20
- Link
- https://play.google.com/store/apps/details?id=com.hardcopy.printerlab40
- http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=project_hardcopy&wr_id=329&page=144
- 2018.01.05 업데이트 : 이미지 자동 회전 기능, 연락처(vCard) 출력 기능, 80mm 프린터 지원
보통 영수증을 출력할 때 사용하는 프린터는 열전사 프린터입니다. 아래 이미지처럼 생긴건데, 열(heat)에 감응하는 용지에 열로 글자, 이미지 등을 그려내는 방식이라 보면 됩니다.
DIY 용으로도 쉽게 구매해서 사용해 볼 수 있는 프린터라서 이전에 이 프린터를 활용하는 방법에 대한 글을 올린 적이 있습니다. 보통 아두이노 또는 라즈베리 파이에 연결해서 사용합니다.
http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=tech_etc&wr_id=9
그런데 요즘 aliexpress.com 을 검색해보니 굉장한 열전사 프린터들을 비교적 싼 가격에 판매하는게 눈에 들어오더군요.
동작 방식은 위에서 소개한 프린터와 같지만 더욱 빠르고 충전 가능한 배터리가 있어서 휴대용으로 쓸 수도 있고 블루투스, USB 연결까지 지원해 줍니다. (WiFi, IR 연결은 모델에 따라 옵션) 가격도 30$ ~ 35$ 선에서 구매가 가능합니다. 잉크값 들어갈 일이 없으니 저렴한 전용 용지만 구해두면 맘껏 프린트 할 수 있습니다. (프린터 헤더 수명이 100Km 라고...)
이 제품 보니 딱 휴대용 포토 프린터 용이다 싶어서 직접 만들어 봤습니다.
하드웨어 (프린터)
aliexpress.com 에서 [bluetooth printer] 로 검색하면 유사한 제품들이 주르륵 나옵니다. 제가 사용한 프린터는 아래 스펙을 가지고 있습니다.
- 프로토콜 : ESC/POS
- 용지 가로 폭 : 58mm (80mm 프린터도 있음)
- 용지 롤 직경 : 4cm 이하 사용
- 열전사 프린터 (Thermal paper 사용)
- 블루투스 4.0, 3.0 지원
- 가로 해상도 : 384 dop / line (노멀 사이즈 폰트 사용시 영문 32자 출력)
- 배터리 : 7.4V, 1500mAh
DIY 라곤 하지만 제품만 구입하면 끝. 58mm 용 감열지 (직경 4Cm 이하) 50롤 구매에 15,000원도 안하니 대량구매.
- 주의!! 영수증 용지의 환경 호르몬 문제가 제기된 적이 있습니다. 반드시 BPA free 표시된 제품을 사용하시길 권장합니다.
이제 안드로이드 앱을 만들어 요걸 휴대용 포토 프린터로 써먹어 보겠습니다. :)
이미지 프린트
구글 검색을 해보면 프린터 제작사에서 만들어서 배포하는 안드로이드/iOS 용 앱이 있습니다. 그런데 성능이 너무 떨어져서 그대로 쓸 수가 없는 지경이라 안드로이드 전용 앱 Printer Lab 을 새로 만들었습니다.
블루투스 연결 관리는 이전에 작성해 둔게 있어서 쉽게 구현. 블루투스로 프린터 페어링 할 때 PIN 번호를 물어봅니다. 제가 가진 프린터는 PIN 번호가 0000 으로 설정되어 있던데 1234 로 설정된 경우도 있을겁니다. 테스트를 해보니 빠릿빠릿하게 연결되고 배터리로 구동되는 상태에서도 잘 됩니다.
가장 먼저 이미지 출력 기능을 구현했습니다.
그리고 아들 사진 골라서 출력!!
그런데 흑백으로만 나옵니다. 아들 사진 출력했는데 이래서는 뉘집 아들인지 알 수가...
열전사 프린터는 특성상 1픽셀을 흰색/검은색으로만 표현하기 때문에 명암(grayscale)을 표현할 수 없습니다. 그래서 컬러 이미지를 흑백(grayscale) 이미지로 변환한 뒤, 이미지 전체 grayscale 평균 값을 계산합니다. 그리고 픽셀의 밝기가 평균보다 크면 검은색, 값이 작으면 흰색으로 표현해 버립니다.
그래서 몇 가지 꼼수를 써서 5단계 명암 표현이 가능하도록 수정해 봤습니다. 아래는 수정 후 출력한 결과입니다.
이미지가 한결 보기 좋아졌습니다. 이제 아들이 아들같아 보입니다... 이 방식이 모든 이미지에 최선은 아니라서, 컨트라스트가 강하고 사물과 배경의 경계가 명확한 경우 품질이 좀 떨어져 보이기도 합니다. 하지만 대부분의 이미지에서는 더 좋은 결과를 내줍니다.
위 결과물은 2x2 픽셀에 Ordered dithering 을 적용해서 5단계 명암을 만들었습니다. 요걸 Error diffusion dithering 으로 교체 적용해서 훨씬 근사한 결과물이 출력되도록 만들었습니다.
2018.01.05 업데이트 : 가로로 긴 이미지의 경우 용지 가로 폭에 맞춰 작게 출력되기 때문에 자동 회전하도록 업데이트 했습니다.
결과를 보면 시중에 판매되는 전용 포토 프린터에 비할바가 아니지만 이게 어딥니까. 값비싼 잉크나 포토 프린터 용지를 사지 않고도 싼 값으로 마음껏 프린트해서 놀 수 있으니까요. 핸드폰 카메라로 사진을 찍어서 바로 출력도 가능합니다.
이정도 출력해도 3cm 1롤을 다 못쓸 정도로 경제적입니다. 그리고 열전사 프린터의 진정한 가치는 다음에 소개할 다양한 부가 기능에 있습니다.
다양한 부가 기능
사실 열전사 프린터는 이미지가 아니라 문자 출력용이죠. 그래서 기본 영문 폰트에 몇 가지 효과를 먹여서 출력할 수 있습니다.
영문 출력을 테스트 해보니 속도도 빠르고 깔끔하게 프린트 됩니다. 문제는 한글... 프린터 스펙에 다국어 지원이라 적혀있긴 한데, 중국산이라 그런지 한자(간체, 번체)는 되지만 한글은 출력이 되질 않습니다. 매뉴얼을 뒤져서 한글 code page 설정법은 찾았는데 프린터에 폰트가 탑재되지 않았는지 사용불가.
이래저래 고민을 거듭하다 내린 결론은... 한글도 이미지로 출력해 버리자;;; 아래는 문자열을 이미지로 그려서 출력한 결과입니다.
영문 폰트처럼 깔끔하게 출력되는건 아니지만 상당히 괜찮게 나옵니다. 어쨌든 문제는 해결 됐으니 이걸로 다양한 부가 기능들을 구현해 봤습니다.
# 간단한 메모, 텍스트 출력
메모를 적어서 바로 출력 가능하도록 만들었습니다. 그리고 외부 앱, 예를 들어 카카오 톡이나 일정 관리 앱에서 텍스트(메시지)를 Printer Lab 앱으로 전달해서 출력할 수 있습니다. (외부 앱에서 이미지를 전달받아 출력도 가능)
# QR 코드, 바코드 출력
텍스트를 넣으면 QR 코드를 만들어서 프린트 해줍니다. 즉석에서 원하는 만큼 뽑아서 사람들에게 나눠줄 수 있습니다. 바코드 출력 기능도 구현을 해두긴 했는데... 전 쓸 일이 없어서...
# RSS 뉴스 출력
뉴스를 받아와서 출력할 수 있도록 RSS 기능을 넣었습니다. RSS 주소를 등록하면 RSS 피드를 주기적으로 가져옵니다. 수집된 RSS 피드는 타임라인 탭에 쌓입니다.
RSS 주소 등록이 귀찮아서 주요 RSS URL을 모아두었습니다. 아래 링크를 참고하세요. Printer Lab 내부에서 제공하는 브라우저로 원하는 RSS 주소로 들어간 뒤 버튼을 눌러 바로 등록이 가능합니다.
http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=freeboard&wr_id=1387
RSS 업데이트 주기를 설정해두면 자동으로 피드를 업데이트 해줍니다. 요건 [타임라인(Timeline)] 탭에서 확인 후 한꺼번에 출력 가능합니다.
RSS 피드는 제목만 출력합니다. (본문은 출력하기엔 너무 깁니다) RSS 피드는 최대 10개만 가져옵니다. (너무 많으면 프린터 출력에 부담, 설정에서 변경 가능)
# 일정 출력
구글 캘린더에서 일정을 가져와 출력할 수 있습니다. 먼저 일정 가져오기 버튼을 누르면 원하는 구글 계정을 선택하도록 창이 뜹니다. 계정을 선택하면 지금부터 24시간 이내의 일정을 가져와 타임라인에 등록해줍니다.
# 연락처 출력
2018.01.05 업데이트 : 전화번호부에서 연락처를 1개 이상 공유하는 경우 Printer Lab 에서 연락처를 받아 출력할 수 있습니다. Printer Lab에서 버튼을 눌러 연락처를 가져와 프린트 하거나 직접 입력해서 프린트 할 수 있습니다.
# 타임라인
업데이트 된 RSS 피드, 일정 데이터를 모아서 보여주고 한꺼번에 출력할 수 있습니다. 한번 프린트 한건 다시 출력되지 않으며 24시간이 지난 데이터는 자동으로 지워집니다.
# 기타
- 앱 실행시 프린터 자동 연결 기능 - 요건 PIN 코드를 미리 입력해둬야 합니다.
- 자동 프린트 - 일정 간격으로 타임라인 탭에 쌓인 데이터를 자동 출력합니다. 프린터 자동 연결이 설정되어 있어야 합니다.
- 2018.01.05 업데이트 : 80mm 프린터를 지원합니다. 이 경우 프린터가 576 dot/line 을 지원해야 합니다.
처음에는 열전사 프린터로 포토 프린터를 만들어보자는 취지로 시작했는데 앱을 만들다보니 점점 일이 커져서... 이런저런 기능들을 추가하게 되었네요. 여기 있는 기능외에 더 좋은 아이디어 있으면 제게도 알려주세요.
열전사 프린터 구매해서 활용해 보고 싶으시다면 Printer Lab 앱을 다운받아 꼭 써보세요. But... 안드로이드 v5.0 이상만 지원합니다.
참고자료
Printer Lab 앱 다운로드 (안드로이드 v5.0 이상만 지원)
- Google play service download page (https://play.google.com/store/apps/details?id=com.hardcopy.printerlab)
- 제작 : godstale@hotmail.com
- 문의 및 건의 : http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=freeboard
블루투스 열전사 프린터 판매 제품 목록
- https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20171227043049&SearchText=bluetooth+printer
전용 용지
- http://search.gmarket.co.kr/search.aspx?selecturl=total&sheaderkey=&gdlc=&SearchClassFormWord=goodsSearch&keywordOrg=%C4%AB%B5%E5+%BF%B5%BC%F6%C1%F5+%B0%A8%BF%AD&keywordCVT=&keywordCVTi=0&keyword=%C4%AB%B5%E5+%BF%B5%BC%F6%C1%F5+%B0%A8%BF%AD%C1%F6
- 주의!! 영수증 용지의 환경 호르몬 문제가 제기된 적이 있습니다. 반드시 BPA free 표시된 제품을 사용하시길 권장합니다.
안드로이드 ESC/POS 프린팅 How-To