[일반] 휴대용 블루투스 포토 프린터 만들기


  • 2018.01.05 업데이트 : 이미지 자동 회전 기능, 연락처(vCard) 출력 기능, 80mm 프린터 지원

 

보통 영수증을 출력할 때 사용하는 프린터는 열전사 프린터입니다. 아래 이미지처럼 생긴건데, 열(heat)에 감응하는 용지에 열로 글자, 이미지 등을 그려내는 방식이라 보면 됩니다.

a6

DIY 용으로도 쉽게 구매해서 사용해 볼 수 있는 프린터라서 이전에 이 프린터를 활용하는 방법에 대한 글을 올린 적이 있습니다. 보통 아두이노 또는 라즈베리 파이에 연결해서 사용합니다.

http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=tech_etc&wr_id=9

 

그런데 요즘 aliexpress.com 을 검색해보니 굉장한 열전사 프린터들을 비교적 싼 가격에 판매하는게 눈에 들어오더군요.

ali_bt_printer_resized

동작 방식은 위에서 소개한 프린터와 같지만 더욱 빠르고 충전 가능한 배터리가 있어서 휴대용으로 쓸 수도 있고 블루투스, 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

bt_printer_sample

DIY 라곤 하지만 제품만 구입하면 끝.  58mm 용 감열지 (직경 4Cm 이하) 50롤 구매에 15,000원도 안하니 대량구매.

  • 주의!!  영수증 용지의 환경 호르몬 문제가 제기된 적이 있습니다. 반드시 BPA free 표시된 제품을 사용하시길 권장합니다.

이제 안드로이드 앱을 만들어 요걸 휴대용 포토 프린터로 써먹어 보겠습니다.  :)

 

 

이미지 프린트

 

구글 검색을 해보면 프린터 제작사에서 만들어서 배포하는 안드로이드/iOS 용 앱이 있습니다. 그런데 성능이 너무 떨어져서 그대로 쓸 수가 없는 지경이라 안드로이드 전용 앱 Printer Lab 을 새로 만들었습니다.

PrinterLab_title_small

블루투스  연결 관리는 이전에 작성해 둔게 있어서 쉽게 구현. 블루투스로 프린터 페어링 할 때 PIN 번호를 물어봅니다. 제가 가진 프린터는 PIN 번호가 0000 으로 설정되어 있던데 1234 로 설정된 경우도 있을겁니다. 테스트를 해보니 빠릿빠릿하게 연결되고 배터리로 구동되는 상태에서도 잘 됩니다.

 

가장 먼저 이미지 출력 기능을 구현했습니다.

app_image_ss

그리고 아들 사진 골라서 출력!!

bw_print_sample1

그런데 흑백으로만 나옵니다. 아들 사진 출력했는데 이래서는 뉘집 아들인지 알 수가...

 

열전사 프린터는 특성상 1픽셀을 흰색/검은색으로만 표현하기 때문에 명암(grayscale)을 표현할 수 없습니다. 그래서 컬러 이미지를 흑백(grayscale) 이미지로 변환한 뒤, 이미지 전체 grayscale 평균 값을 계산합니다. 그리고 픽셀의 밝기가 평균보다 크면 검은색, 값이 작으면 흰색으로 표현해 버립니다.

그래서 몇 가지 꼼수를 써서 5단계 명암 표현이 가능하도록 수정해 봤습니다. 아래는 수정 후 출력한 결과입니다.

bw_print_sample2

bw_print_sample3

bw_print_sample4

bw_print_sample5

이미지가 한결 보기 좋아졌습니다. 이제 아들이 아들같아 보입니다... 이 방식이 모든 이미지에 최선은 아니라서, 컨트라스트가 강하고 사물과 배경의 경계가 명확한 경우 품질이 좀 떨어져 보이기도 합니다. 하지만 대부분의 이미지에서는 더 좋은 결과를 내줍니다.

bw_print_sample6

bw_print_sample7

 

위 결과물은 2x2 픽셀에 Ordered dithering 을 적용해서 5단계 명암을 만들었습니다. 요걸 Error diffusion dithering 으로 교체 적용해서 훨씬 근사한 결과물이 출력되도록 만들었습니다.

dithered_1

dithered_2

2018.01.05 업데이트 : 가로로 긴 이미지의 경우 용지 가로 폭에 맞춰 작게 출력되기 때문에 자동 회전하도록 업데이트 했습니다.

 

결과를 보면 시중에 판매되는 전용 포토 프린터에 비할바가 아니지만 이게 어딥니까. 값비싼 잉크나 포토 프린터 용지를 사지 않고도 싼 값으로 마음껏 프린트해서 놀 수 있으니까요. 핸드폰 카메라로 사진을 찍어서 바로 출력도 가능합니다.

print_sample_all

이정도 출력해도 3cm 1롤을 다 못쓸 정도로 경제적입니다. 그리고 열전사 프린터의 진정한 가치는 다음에 소개할 다양한 부가 기능에 있습니다.

 

 

다양한 부가 기능

 

사실 열전사 프린터는 이미지가 아니라 문자 출력용이죠. 그래서 기본 영문 폰트에 몇 가지 효과를 먹여서 출력할 수 있습니다.

char_print_sample

영문 출력을 테스트 해보니 속도도 빠르고 깔끔하게 프린트 됩니다. 문제는 한글... 프린터 스펙에 다국어 지원이라 적혀있긴 한데, 중국산이라 그런지 한자(간체, 번체)는 되지만 한글은 출력이 되질 않습니다. 매뉴얼을 뒤져서 한글 code page 설정법은 찾았는데 프린터에 폰트가 탑재되지 않았는지 사용불가.

이래저래 고민을 거듭하다 내린 결론은... 한글도 이미지로 출력해 버리자;;;  아래는 문자열을 이미지로 그려서 출력한 결과입니다.

print_korean_lang

영문 폰트처럼 깔끔하게 출력되는건 아니지만 상당히 괜찮게 나옵니다. 어쨌든 문제는 해결 됐으니 이걸로 다양한 부가 기능들을 구현해 봤습니다.

 

# 간단한 메모, 텍스트 출력

메모를 적어서 바로 출력 가능하도록 만들었습니다. 그리고 외부 앱, 예를 들어 카카오 톡이나 일정 관리 앱에서 텍스트(메시지)를 Printer Lab 앱으로 전달해서 출력할 수 있습니다. (외부 앱에서 이미지를 전달받아 출력도 가능)

app_text_ss

 

# QR  코드, 바코드 출력

텍스트를 넣으면 QR 코드를 만들어서 프린트 해줍니다. 즉석에서 원하는 만큼 뽑아서 사람들에게 나눠줄 수 있습니다. 바코드 출력 기능도 구현을 해두긴 했는데... 전 쓸 일이 없어서...

app_test2

 

# RSS 뉴스 출력

뉴스를 받아와서 출력할 수 있도록 RSS 기능을 넣었습니다. RSS 주소를 등록하면 RSS 피드를 주기적으로 가져옵니다. 수집된 RSS 피드는 타임라인 탭에 쌓입니다.

app_extensions2

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시간이 지난 데이터는 자동으로 지워집니다.

app_extensions

 

# 기타 

  • 앱 실행시 프린터 자동 연결 기능 - 요건 PIN 코드를 미리 입력해둬야 합니다.
  • 자동 프린트 - 일정 간격으로 타임라인 탭에 쌓인 데이터를 자동 출력합니다. 프린터 자동 연결이 설정되어 있어야 합니다.
  • 2018.01.05 업데이트 : 80mm 프린터를 지원합니다. 이 경우 프린터가 576 dot/line 을 지원해야 합니다.

 

 

PortablePhotoPrinter_small

처음에는 열전사 프린터로 포토 프린터를 만들어보자는 취지로 시작했는데 앱을 만들다보니 점점 일이 커져서... 이런저런 기능들을 추가하게 되었네요. 여기 있는 기능외에 더 좋은 아이디어 있으면 제게도 알려주세요.

열전사 프린터 구매해서 활용해 보고 싶으시다면 Printer Lab 앱을 다운받아 꼭 써보세요. But... 안드로이드 v5.0 이상만 지원합니다.

 

 

 

참고자료

 

Printer Lab 앱 다운로드 (안드로이드 v5.0 이상만 지원)

블루투스 열전사 프린터 판매 제품 목록

전용 용지

  • 주의!!  영수증 용지의 환경 호르몬 문제가 제기된 적이 있습니다. 반드시 BPA free 표시된 제품을 사용하시길 권장합니다.

안드로이드 ESC/POS 프린팅 How-To

출처 : HARD COPY WORLD (http://www.hardcopyworld.com)
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

메이커 스토리

번호 제목 글쓴이 날짜 조회수
125 아두이노 헬박사님의 로봇팔 살리기 icon 양재동메이커 05-13 4,326
124 일반 레이저 커터 동파 사고 icon 양재동메이커 04-23 4,288
123 일반 기존 고양이 마이크로 파이썬으로 포팅 - 밀린 숙제하기 icon 양재동메이커 01-03 6,006
122 일반 휴식 icon 청계천도사 12-13 5,533
121 일반 기기를 수리한다는 것 icon 청계천도사 09-09 6,074
120 일반 수학 공부 왜 하나요? icon 청계천도사 07-20 6,775
119 아두이노 ESP32 CAM을 활용한 도깨비 자동차 Ver 3.0 icon 양재동메이커 06-12 8,103
118 라즈베리파이 Pupper 시작해서 Mini Pupper로 마무리 - 밀린 숙제하기 icon 양재동메이커 01-08 8,904
117 일반 말벌 인식 및 레이저 타격기 V 2.0 icon 양재동메이커 08-23 10,981
116 아두이노 ESP32 CAM - 도깨비 자동차 2 icon 양재동메이커 07-13 11,902
115 아두이노 ESP32 CAM - 도깨비 자동차 icon 양재동메이커 05-07 13,398
114 일반 급~한~개~발!! icon 청계천도사 04-08 12,407
113 일반 말벌 레이저 타격 테스트 모듈 icon 양재동메이커 03-10 13,538
112 아두이노 로보티즈 다이나믹 셀 MX-12W를 Arduino로 제어하기 (without 3 state buffer) +2 icon 양재동메이커 02-24 17,432
111 일반 2021 피우다 프로젝트 출품작 소개 자료집 icon HellMaker 01-12 12,952
110 일반 서보 모터 관련 여러가지 문제 icon 양재동메이커 11-19 13,788
109 라즈베리파이 Top Maker 해커톤 2021 icon 양재동메이커 08-29 13,312
108 라즈베리파이 라즈베리 파이 4 WiFi 안테나 확장 방법 icon 양재동메이커 08-24 18,949
107 아두이노 Otto Bot Bluetooth 연동하기 icon 양재동메이커 05-14 14,174
106 일반 자이로센서 roll, pitch, yaw 데이터 처리 구조 #2 icon HellMaker 03-01 14,159