아두이노 블루투스 카메라(ABC): 스마트폰과 블루투스로 이미지 전송·표시
프로젝트 개요
아두이노 우노, OV7670 카메라, HC-05/06 블루투스 모듈, 전용 TFT 실드를 조합해 스마트폰(안드로이드)과 양방향 이미지 전송 시스템을 구축합니다. 아두이노의 느린 처리 속도 한계를 독자적인 TFT 실드의 하드웨어 JPEG 인코더/디코더로 극복했습니다.
핵심 하드웨어: 전용 TFT 실드
- 3.5인치 디스플레이, 320×240 해상도, 65,536색 (16비트)
- 저항식 터치스크린 (XPT2046 컨트롤러)
- 5개 버튼, DS1307 RTC + CR1220 배터리
- 마이크로 SD 카드 슬롯
- 4핀 블루투스/와이파이 모듈 커넥터 (HC-05/06, ESP8266)
- 20핀 카메라 커넥터 (OV7670 전용)
- 핵심: 하드웨어 JPEG 코덱 내장으로 아두이노 CPU 부담 없이 이미지 압축/해제 가능
필요 부품
- 아두이노 우노 × 1
- 전용 TFT 실드 × 1
- OV7670 카메라 모듈 × 1
- HC-05/06 블루투스 모듈 × 1
- 6~12V / 600mA 이상 AC-DC 어댑터 (필수: USB 500mA 부족)
- 안드로이드 스마트폰
소프트웨어 준비
아두이노 IDE 설정
- 아두이노 IDE 설치: 공식 사이트
- TFT 실드 라이브러리 설치: GitHub에서 다운로드 후
libraries 폴더에 압축 해제
- 데모 스케치
ArduinoBluetoothCamera.ino와 ov7670_regs.h 다운로드
- 블루투스 모듈 분리 후 아두이노 단독으로 업로드 (디버그 포트 공유 주의)
블루투스 모듈 설정
통신 속도 115,200bps로 설정 필수 (AT+UART=115200,0,0). 아두이노 우노가 안정적으로 처리 가능한 최대 속도. 설정 방법은 참고.
안드로이드 앱
ArduinoTFT.apk 설치 (블루투스/카메라 권한 허용 필수)
- 소스코드:
ArduinoTFT.zip.h → 확장자 .zip로 변경 후 압축 해제
- 앱 실행 → 가로 모드 → 블루투스 켜기 → HC-05/06 선택 → 연결
조립 순서
- 아두이노 우노 + TFT 실드 결합
- OV7670 카메라 → TFT 실드 20핀 커넥터 연결 (필요시 18~20핀 변환 어댑터 사용)
- 블루투스 모듈 → TFT 실드 'Bluetooth' 표시 4핀 커넥터 연결
- 6~12V 어댑터 → 아두이노 전원 잭 연결
- 전원 투입 → TFT 화면 빨간색으로 점등 (대기 상태)
작동 모드 (앱 4개 버튼)
| 버튼 | 기능 | 설명 |
| 1 | 스마트폰 → 아두이노 단일 전송 | 스마트폰 카메라 촬영 이미지 1장 전송 및 TFT 표시 |
| 2 | 스마트폰 → 아두이노 연속 전송 | 실시간 비디오 스트리밍처럼 연속 전송 (중지 버튼으로 정지) |
| 3 | 아두이노 → 스마트폰 단일 전송 | OV7670 촬영 이미지 1장 JPEG 압축 후 전송 |
| 4 | 아두이노 → 스마트폰 연속 전송 | OV7670 실시간 영상 스트리밍 (중지 버튼으로 정지) |
이미지 크기: 320×240 픽셀, JPEG 압축 시 2~5 KB
아두이노 스케치 핵심 로직
YATFT, yacam, yacodec, yasrl 라이브러리 활용
- 모드별 상태 머신: 0x10(단일 송신), 0x20(연속 송신), 0x30(단일 수신), 0x40(연속 수신)
CamCapture(): 하드웨어 JPEG 인코더로 압축 → JPEG 헤더(0xFFD8)부터 종료(0xFFD9)까지 시리얼 전송
srl.JPEGReadFromSerial(): 수신한 JPEG 스트림을 하드웨어 디코더로 TFT에 표시
- OV7670 초기화 레지스터 배열
OV7670_QVGA (320×240) 사용
시연 화면
앱 화면: 우상단 스마트폰 카메라 뷰파인더, 좌측 대형 수신/송신 이미지 영역, 하단 4개 제어 버튼. 데모 사진 다수 첨부.
관련 프로젝트 시리즈
- Unique TFT Shield for Arduino Uno - 시작편
- Unique Arduino TFT Shield - OV7670 Cam
- 본 프로젝트: Arduino Bluetooth Camera
- TFT Shield for Arduino Nano - 시작편
- Photos and RGB video on TFT SPI display
- Control by Smartphone 4WD Robot Car over Bluetooth
업데이트 내역
- 2020.05.26: 안드로이드 앱 소스코드 공개
- 2020.07.25: 앱 카메라 권한 허용 필수 안내 추가
- 2021.04.01: 통합 라이브러리 EkaTFT 공개 (메가AVR, ESP32 지원, 실드/브레이크아웃 4종 지원)
참고 자료
- TFT 실드 라이브러리: GitHub
- OV7670 레지스터 설정 헤더 파일 제공
- 프리칭 회로도 및 실험 사진 (TV 리모컨 등 적외선 실험 포함)