안드로이드 앱: Arduino Bluetooth Controller (플레이스토어/앱스토어에서 다운로드) 또는 Bluetooth Serial Controller (NEXT PROTOTYPES)
프로젝트 소개
한 기기에서 복사한 텍스트를 다른 기기에 붙여넣기 귀찮았던 경험, 누구나 있을 겁니다. 이메일이나 메신저로 자기 자신에게 보내고 다시 복사하는 번거로움을 덜고자, 블루투스로 텍스트를 전송하면 아두이노가 키보드(HID) 역할을 해 자동으로 타이핑해주는 장치를 만들었습니다.
구글의 크롬 동기화 기능도 있지만, 이 프로젝트는 어떤 기기/OS든 상관없이 범용적으로 작동하며, 아두이노 입문자에게 좋은 실습 프로젝트입니다.
1단계: 필요 부품
핵심:ATmega32u4 칩 탑재 보드(마이크로, 레오나르도, 프로 마이크로, Due 등)여야 합니다. 이 칩만 USB HID(키보드/마우스) 에뮬레이션이 가능합니다. SAMD21/51 계열은 미테스트.
2단계: 회로도
아두이노에는 하드웨어 시리얼 포트가 2개 있습니다. Serial은 PC 통신용(시리얼 모니터)이라, Serial1을 HC-05와 통신에 사용합니다.
HC-05 RX → 아두이노 TX (Pin 1)
HC-05 TX → 아두이노 RX (Pin 0)
HC-05 GND → 아두이노 GND
HC-05 VCC → 아두이노 +5V
Key/State 핀은 미사용
3단계: 코드 이해
/* Project Name: Text Teleporter
* 블루투스로 문자열 수신 → 키보드 HID로 타이핑(붙여넣기)
* 대상: Arduino Micro/Leonardo/Due/Pro Micro (ATMega 32U4)
* Author: Advik Singhania
*/
#include "Keyboard.h"
void setup() {
Serial1.begin(9600); // HC-05 기본 보드레이트
Keyboard.begin(); // HID 키보드 기능 활성화
}
void loop() {
if (Serial1.available() > 0) {
String a = Serial1.readString(); // 수신 문자열 읽기
Keyboard.print(a); // 키보드로 타이핑
}
delay(10);
}
Keyboard.h 라이브러리로 HID 기능 활성화. setup()에서 시리얼1과 키보드 초기화. loop()에서 블루투스 수신 시 문자열 읽어 Keyboard.print()로 입력. 업로드 전 HC-05 RX/TX 선은 꼭 분리하세요.
4단계: 설정 및 사용법
코드 업로드 후 RX/TX 재연결
스마트폰 블루투스 설정에서 HC-05 검색 → 페어링 (기본 PIN: 1234)
블루투스 터미널 앱 실행 (Arduino Bluetooth Controller 추천)
앱에서 HC-05 선택 → Terminal mode 연결
입력 상자에 텍스트 붙여넣기 후 전송
PC 쪽에서 메모장 등 커서 위치시켜 두고 전송 → 자동 타이핑됨
주의: 아두이노가 키보드를 제어하는 동안 PC에서 직접 타이핑 불가. 악용 소지(CMD 명령 주입 등) 있으니 주의해서 사용하세요.
5단계: 완성 및 확장 아이디어
PCB에 납땜해 영구 장치로 제작 가능
OTG 케이블로 스마트폰에 연결해 모바일 기기 간 텍스트 전송에도 활용
GitHub 저장소에서 코드 개선/포크 환영
소스 코드
/* Project Name : Text Teleporter
* Receives some text in String format via bluetooth from one device and types (pastes) it into another device.
* For : Arduino Micro/Leonardo/Due/Pro Micro (ATMega 32U4)
* Author : Advik Singhania
* Created On : 11th October, 2020; 11:23 AM IST
*/
#include "Keyboard.h"
void setup() {
Serial1.begin(9600);
Keyboard.begin();
}
void loop() {
if (Serial1.available() > 0) {
String a = Serial1.readString();
Keyboard.print(a);
}
delay(10);
}