이 글에서는 RP2040(Pico)로 USB HID 키보드를 구현하는 방법을 소개합니다. Pico SDK의 TinyUSB 스택을 사용하며, 버튼 입력을 USB 키코드로 전송합니다.

하드웨어 구성:
- Raspberry Pi Pico 보드
- 푸시버튼 1~3개 (GPIO 2,3,4 예시)
- 풀다운 저항 또는 내부 풀다운 사용

CMakeLists.txt에 TinyUSB 활성화:
- pico_sdk_init() 이후 tinyusb_device 추가
- target_link_libraries에 tinyusb_device, tinyusb_board 링크

예제 코드 (C, Pico SDK + TinyUSB):

#include "pico/stdlib.h"
#include "bsp/board.h"
#include "tusb.h"

#define BTN1 2
#define BTN2 3

void send_key(uint8_t code) {
  uint8_t keycode[6] = {0};
  keycode[0] = code; // 한 개 키만 전송
  tud_hid_keyboard_report(0, 0, keycode);
  sleep_ms(10);
  tud_hid_keyboard_report(0, 0, NULL); // 키 릴리즈
}

int main() {
  board_init();
  tusb_init();
  gpio_init(BTN1); gpio_set_dir(BTN1, GPIO_IN); gpio_pull_down(BTN1);
  gpio_init(BTN2); gpio_set_dir(BTN2, GPIO_IN); gpio_pull_down(BTN2);
  while (true) {
    tud_task();
    if (tud_mounted()) {
      if (gpio_get(BTN1)) send_key(HID_KEY_A);
      if (gpio_get(BTN2)) send_key(HID_KEY_ENTER);
    }
  }
}

빌드/업로드:
- pico-sdk 예제 구조로 cmake .. && make
- UF2 드라이브로 복사하여 플래싱

설명: TinyUSB를 통해 HID 디스크립터와 리포트를 자동 처리하므로, 키코드 전송만 구현하면 간단히 테스트 키보드를 만들 수 있습니다.

Posted by 살레시오
,