본문 바로가기
키보드 DIY 프로젝트

(#5) 무선키보드 프로젝트 블루투스 키입력 테스트 (ESP-Bluetooth-Keyboard Library)

by Newtle Kim 2025. 5. 7.

 

1. 아두이노IDE에 ESP32 개발환경 구축방법

 

1. 상단 메뉴에 File - Preference - Additional boards manager 에 아래 링크 추가

https://dl.espressif.com/dl/package_esp32_index.json

2. Boards Manager에 esp 검색하면 esp32에 최신버전(2025년도 5월7일 기준 3.2.0) Install, 인스톨 시간 10분이상 필요

3.  Board - ESP32 Dev Module 선택한다.

 

개발환경 구축이 완료되었는데, 간단한 LED점멸 예제를 업로드하여 잘 작동하는지 확인해보자.

 

ESP-WROOM-32의 내부 LED는 GPIO 2번핀에 연결되어 있다. 

 

2. ESP-WROOM-32 내부 LED 점멸 예제

int LED_BUILTIN = 2;
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

 

 

3. ESP WROOM 32 블루투스 키보드 라이브러리 추가

 

최신 아두이노 버젼에는 인터넷에 돌아다니는 라이브러리가 컴파일이 안된다.

기존 라이브러리 : https://github.com/T-vK/ESP32-BLE-Keyboard

- BleKeyboard 라이브러리가 내부적으로 std::string 타입을 사용했는데

- ESP32 Arduino Core 3.0 이상에서는 BLEDevice::init()이나 BLECharacteristic::setValue() String 타입만 받게 변경

즉, std::string을 String으로 바꿔야함

- 예전 Arduino Core 버전에서는 std::string도 허용했지만, 최신 버전(특히 3.0.0, 3.1.0, 3.2.0 이후)에서는 엄격하게 String 객체만 허용

 

뭔말인지 나도 자세히는 잘 모른다. 아래 수정된 라이브러리로 해결하자.

ESP32_BLE_Keyboard.zip
0.01MB

변경된 블루투스 키보드 라이브러리 다운로드

 

4. ESP-WROOM-32 블루투스 키보드 테스트 회로

회로 간소화를 위해 Pull-up 저항 스위치 회로를 만들고, 코딩에서 Input Pullup 기능을 사용할 것이다. 

 

 

5. ESP-WROOM-32 블루투스 키보드 예제

#include <BleKeyboard.h>  

BleKeyboard btKeyboard;

const int BUTTON_PIN = 4; // D4 Switch

void setup() {
  Serial.begin(115200);
  pinMode(BUTTON_PIN, INPUT_PULLUP); //Input Pullup
  btKeyboard.begin();

  Serial.println("Waiting for BLE connection...");
}

void loop() {
  if (btKeyboard.isConnected()) {  // if Bluetooth is connected
    if (digitalRead(BUTTON_PIN) == LOW) { // PULLUP = LOW
      btKeyboard.press('a');   // 'a' Key Press
      delay(100);               
      btKeyboard.releaseAll(); //
      delay(500);               
    }
  } else {
    Serial.println("Not connected yet...");
    delay(1000);
  }
}

 

 

6. 추가

 

추가적으로 블루투스 장치 연결할때 ESP32 Keyboard 로 잡히는것을 원하지 않을 수 있다. 제품이름처럼 Keychron K8, Leopold FC900R 등 표시되는게 하는 방법은 객체생성 방식을 아래처럼 바꾸면된다.

 

기본 코드

BleKeyboard bleKeyboard;

수정 코드

BleKeyboard bleKeyboard("MyCustomKeyboard", "MyBrand", 75);

 

아래와 같이 파라미터값을 넣어줄 수 있다.

 

BleKeyboard bleKeyboard("MyKeyboard");             // 키보드 이름
BleKeyboard bleKeyboard("MyKeyboard", "MyBrand");  // 키보드이름, 제조사
BleKeyboard bleKeyboard("MyKeyboard", "MyBrand", 95);  // 키보드 이름, 제조사, 배터리

 

필자는 위 그림처럼 객체를 생성하였더니

 

이처럼 디바이스 이름이 ESP32 Keyboard 에서 testkeyboard로 변경된 것을 확인할 수 있었다.

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.