본문 바로가기

개발 이야기/SBC 보드

ESP-32 보드로 간단한 블루투스 키보드 만들기

728x90

Wifi + Bluetooth 를 지원하는 아두이노 개발보드가 있습니다.

 

이 보드를 이용하여 보드로 HTTP 요청을 하면 특정 키보드 버튼을 누르는 효과를 만들어 보려고 합니다.

 


 

 

알리에서 ESP32 Development board 를 검색하여 $4.09 에 구매합니다.

 

https://www.arduino.cc/en/software

 

위 링크에서 Arduino IDE 를 다운로드 한 후 설치 합니다.

 

https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

 

위 링크에서 CP2102 Driver 를 다운로드 하여 압축 해제 후

 

Driver 를 설치합니다.

 

PC와 ESP32 보드를 Micro 5pin USB 케이블을 이용하여 연결해줍니다.

 

 

장치 관리자를 열어서 포트(COM & LPT) 가 보이는것을 확인합니다.

 

 

Arduino IDE 를 실행합니다.

 

파일 -> 환경 설정을 열어서 추가적인 보드 매니저 URLs 에 다음 링크를 추가 합니다.

 

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

 

 

 

 

툴 -> 보드 -> 보드매니저를 클릭합니다.

 

 

esp32 를 검색 하여 나오는 라이브러리 esp32 를 설치 버튼을 클릭하여 진행합니다. (시간이 꽤 소요 됩니다.)

 

 

설치가 완료된 후 툴 -> 보드 메뉴 아래에 ESP32 Arduino 메뉴가 추가 된걸 확인합니다.

 

 

툴 -> 보드 -> ESP32 Arudino -> ESP32 Dev Module 을 선택하여 줍니다.

 

 

 

툴 -> Partition Scheme -> Huge APP (3MB No OTA/ 1MB SPIFFS) 를 선택 합니다.

 

블루투스 스택과 WIFI 스택이 함께 올라가기 때문에 SRAM 사용량이 높기 때문에 이 옵션으로 선택을 합니다. (OTA 불가)

 

 

툴 -> Upload Speed -> 115200 을 선택합니다.

 

 

 

툴 -> 포트 메뉴에서 장치 관리자에서 확인 하였던 COM 포트 번호를 선택합니다.

 

 

https://github.com/T-vK/ESP32-BLE-Keyboard/releases

 

위 링크에서 ESP32-BLE-Keyboard.zip 파일을 다운로드 합니다.

 

 

 

스케치 -> 라이브러리 포함하기 -> .ZIP 라이브러리 추가 를 선택하여 다운로드 받았던 ESP32-BLE-Keyboard.zip 파일을 선택합니다.

 

이제 사전 준비가 끝났습니다!!!

 

이제 소스코드를 이용해서 컴파일 -> 업로드 하게 되면 완성 됩니다.

 


 

코드 나갑니다.

 

#include <WiFi.h> 
#include <WiFiClient> 
#include <WebServer.h> 
#include <BleKeyboard.h> // 블루투스 키보드 이름, 변경해서 사용 가능

BleKeyboard bleKeyboard("ESP32 Keyboard", "ESP32Compny", 80); 
const char* ssid PROGMEM = "WIFI SSID Name"; 
const char* password PROGMEM = "WIFI Password"; 
WebServer server(80); // ESP32 보드의 2번 LED 입니다. 

const int led = 2; 

void handleRoot() 
{ server.send(200, F("text/plain"), F("hello from esp8266!")); } 

void handleNotFound() { server.send(404, F("text/plain"), F("Not Found")); } 

void setup(void) { 
  bleKeyboard.begin(); 
  pinMode(led, OUTPUT); 
  digitalWrite(led, 0); 
  Serial.begin(115200); 
  WiFi.mode(WIFI_STA); 
  WiFi.begin(ssid, password); 
  Serial.println(F("")); // Wait for connection 
  while (WiFi.status() != WL_CONNECTED) 
  { delay(500); Serial.print(F(".")); } 
  
  Serial.println(F("")); 
  Serial.print(F("Connected to ")); 
  Serial.println(F(ssid)); 
  Serial.print(F("IP address: ")); 
  Serial.println(WiFi.localIP()); 
  server.on(F("/"), handleRoot); 
  server.on(F("/inline"), []() { server.send(200, F("text/plain"), F("this works as well")); 
  }); 
  
  // ESP32 보드 IP 주소의 input path URL 요청시 작동하는 부분 
  // EX) http://192.168.0.2/input 요청하면 보드에서 아래 코드가 실행 
  server.on(F("/input"), []() { server.send(200, F("text/plain"), F("Input ok")); 
  
  // 블루투스 연결되었는지 여부 
  if(bleKeyboard.isConnected()) { 
  // ESP32 보드의 2번 LED 를 켠다 
  digitalWrite(led, 1); 
  // 키보드의 Scroll Lock 키를 누른다. 
  bleKeyboard.write(207); 
  // ESP32 보드의 2번 LED 를 끈다 
  digitalWrite(led, 0); } }); 
  
  server.onNotFound(handleNotFound); 
  server.begin(); 
  Serial.println(F("HTTP server started")); 
} 

void loop(void) { server.handleClient(); }

 

 

IDE 상단에 "->" 화살표 버튼을 클릭하여 컴파일 및 업로드를 실행합니다.

 

위와 같이 컴파일이 완료 된 후 업로드가 완료 되면 시리얼 모니터를 실행해서 제대로 작동 하고 있는지 확인해봅니다.

 

 

툴 -> 시리얼 모니터를 클릭합니다.

 

 

 

시리얼 모니터 창의 하단에 보드레이트 부분이 있는데 이 값을 115200 보드레이트로 변경합니다.

 

그러면 보드에서 시리얼로 출력하고 있는 텍스트 내용들이 보이게 됩니다.

 

텍스트 내용을 확인하면 ESP32 보드는 172.16.10.17 이라는 IP 로 작동하는것을 알수 있습니다.

 

 

 

이제 윈도우의 블루투스 설정에서 

 

블루투스 장치 추가를 이용하여

 

ESP32 보드로 만들어진 블루투스 키보드를 추가 합니다.

 

 

저는 Acidpop Keyboard 라고 이름지었기에 위와 같이 장치가 추가 되었습니다.

 

 

 

 

이제 웹브라우저를 열어 주소창에 다음과 같이 입력해봅니다.

 

http://172.16.10.17/input

 

스크롤락 키가 눌러진것을 확인 할 수 있습니다.

 

 

 


 

이걸로 무엇을 할수 있느냐? 라고 하신다면..

 

URL 을 이용해서 특정 매크로를 만든다던지..

 

아니면 특정 주기마다 키보드 입력이 필요한 경우 사용을 하면 됩니다.

 

하드웨어 레벨 입력으로 잡히기 때문에 수많은 보안툴들을 제낄수 있습니다.

 

추가로,

ESP32 로 블루투스 ble 마우스도 만들 수 있습니다.

다음 깃허브를 참고하시면 됩니다.

=> https://github.com/T-vK/ESP32-BLE-Mouse

 

 

 

 

 

 

(사족)

더 좋은 정보를 공유하도록 저에게 힘을 실어 보내주세요.

그런 의미에서 커피 한잔 사주실래요 ^^

=> https://www.buymeacoffee.com/openbini

 

 

그럼,

    정보 공유합니다. https://freenanum.github.io/Market/#/