이 글에서는 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 디스크립터와 리포트를 자동 처리하므로, 키코드 전송만 구현하면 간단히 테스트 키보드를 만들 수 있습니다.