¶óÁ¸® ÆÄÀÌ ÇÇÄÚ USB HID Å°º¸µå ¸¸µé±â

   Á¶È¸ 16192   Ãßõ 3    

안녕하세요 항상 날로먹는 구차니 입니다.

raspberry pi pico(이하 pico)는 이름은 라즈베리 인데 실제로는 아두이노에 가까운 제품입니다.


specification

  • Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz
  • 264KB of SRAM, and 2MB of on-board Flash memory
  • Castellated module allows soldering direct to carrier boards
  • USB 1.1 with device and host support
  • Drag-and-drop programming using mass storage over USB
  • 26 × multi-function GPIO pins
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels
  • Accurate clock and timer on-chip
  • Temperature sensor
  • Accelerated floating-point libraries on-chip
  • 8 × Programmable I/O (PIO) state machines for custom peripheral support

https://www.raspberrypi.org/documentation/rp2040/getting-started/#board-specifications


공식 홈페이지에서는 micropython을 쓰라고 하는데

https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-micropython


파일 업로드 하는 것이 불편해서 circuitpython을 이용하겠습니다.

https://circuitpython.org/board/raspberry_pi_pico/


USB HID 만들기

HID는 Human Interface Device의 약자로 마우스 키보드 등의 사람과 상호작용을 할 수 있는 장치를 의미합니다.


Step 0.

지릅니다! (한푼도 안 받고 내돈내산입니다.)

https://www.devicemart.co.kr/goods/view?no=13921792 << VAT 별도 5400

http://itempage3.auction.co.kr/DetailView.aspx?itemno=C362541750 << VAT 포함 5940 (결국은 동일가격)

http://itempage3.auction.co.kr/DetailView.aspx?itemno=C367078792 << 핀헤더 실장버전 9500


Step 1.

circuit python 6.3.0 (2021.07.02 기준)

을 업로드 하기 위해 uf2 확장자로 된 펌웨어를 다운로드 받습니다.

그리고 라이브러리를 다운로드 받습니다. circuit python 6.3.0으로 받으니 라이브러리는 Bundle Version 6.x로 받으면 됩니다.

https://circuitpython.org/board/raspberry_pi_pico/

https://circuitpython.org/libraries


Step 2.

한번도 사용하지 않은 pico 라면 usb micro 케이블을 이용하여 PC와 연결하면 외장 USB 메모리로 인식됩니다.

한번이라도 사용한 녀석이라면 BOOTSEL 버튼을 누른채로 usb micro 케이블을 이용하여 PC와 연결합니다.


Step 3.

uf2 펌웨어를 외장 메모리로 끌어다 떨어트립니다.


Step 4.

재시작이 되면 좋고, 아니면 선을 뽑았다 다시 꼽습니다.

lib 디렉토리와 code.py를 발견할 수 있습니다.


Step 5.

lib 디렉토리에 Step 1. 에서 받은 라이브러리의 압축을 풀어

그중 adafruit_hid 디렉토리를 lib/adafruit_hid 으로 복사합니다.

(전체 다 복사하려면 용량 부족해서 복사할 수 없습니다)


Step 6.

메모장이나 python 수정 가능한 텍스트 에디터를 이용하여 code.py 수정합니다.

keys_pressed = [Keycode.A, "Hello, World!", "https://cytron.io/p-maker-pi-pico\n"]

해당 라인이 버튼 누를 때 마다 작동할 행동이며

Keycode.A는 GP20번에 연결된 스위치를 누를 때 A 키를 누르게 하며 (다만 코드 상에 SHIFT를 누르게 되어있으니 소문자 a가 나올 것으로 예상됩니다)

"Hello World!" 는 GP21번에 연결된 스위치를 누를 때 문장을 입력하게 하고

"https://cytron.io/p-maker-pi-pico\n"는 GP22번에 연결된 스위치를 누를 때 문장을 입력하고 마지막에 엔터를 치게 합니다.


아래처럼 코드를 수정하면 Ctrl-x, Ctrl-c, ctrl-v를 하는 전용 키보드를 만드실 수 있습니다.

keys_pressed = [Keycode.X, Keycode.C, Keycode.V]

control_key = Keycode.CONTROL


https://tutorial.cytron.io/2021/02/16/keyboard-emulator-using-raspberry-pi-pico-maker-pi-pico-and-circuitpython/



Step 7.

곱게(?) 우클릭을 하여 USB 메모리를 제거하고 USB선을 뽑고 배선 작업을 합니다.

준비물은 스위치와 선입니다.







심화작업 Step 8.

컨트롤 키와 알트키 등이 동시에 눌리게 하려면 아래와 같이 수정하면 됩니다.

kbd.press(Keycode.CONTROL, Keycode.X)

kbd.press(Keycode.CONTROL, ,Keycode.SHIFT, Keycode.X)

https://circuitpython.readthedocs.io/projects/hid/en/latest/api.html

딸 넷 아들 하나 아빠 (큰 딸, 작은 딸, 왕큰 딸, 암 뭉뭉이, 수 뭉뭉이) - minimonk.net
Psychophysi¡¦ 2021-07
±¸Â÷´Ï´Ô, µû¶óÇØ º¸°í ½Í¾ú´Âµ¥ °¨»çÇÕ´Ï´Ù : )
     
±¸Â÷´Ï 2021-07
±Ý¼¼ ÇÏ½Ç ¼ö ÀÖÀ» °Å¿¡¿ä ^^ È­ÀÌÆÃ!
¸ÚÁý´Ï´Ù. Ãßõ µå·Á¿ä.
     
±¸Â÷´Ï 2021-07
°¨»çÇÕ´Ï´Ù ^^
³ªºñz 2021-11
ÀÌ·±°É ÀÌ¿ëÇϸé
¹ß·Î ¹â´Â ¹æÇâÅ°, ½¬ÇÁÆ®, ÄÁÆ®·Ñ, ¾ËÅÍ, ¿£Å͸¦ ¸¸µé ¼ö ÀÖÀ»±î¿ä?
     
±¸Â÷´Ï 2021-12
¾Ë¸²ÀÌ Àß ¾È¶ß³×¿ä ¤Ð¤Ð
À½.. °¡´ÉÇÕ´Ï´Ù. ´Ù¸¸ º¹¼öÅ°¸¦ Çѹø¿¡ ´©¸£´Â°Ç ¼öÁ¤À» Á» ÇÏ¼Å¾ß ÇÕ´Ï´Ù.
½ÉÈ­ÀÛ¾÷ 8¹ø¿¡ ÇØ´ç ³»¿ëÀÌ ±âÀçµÇ¾î ÀÖ½À´Ï´Ù.


Á¦¸ñPage 7/28
2015-08   32064   witbox
2015-01   31879   ±èÁØ¿¬
2023-11   31650   ĸƾ¾Æ¸Þ¸®Ä«³ë
2022-04   31526   È­Á¤Å¥»ï
2019-05   31521   ½ºÄµl¹ÎÇö±â
2018-04   31163   ¹Ú¹®Çü
2015-02   31051   ȲÁø¿ì
2017-07   31003   ¼¼¹ú½­
2022-08   30702   µö·¯´×¼­¹ö
2014-06   30595   ȲÁø¿ì
2019-04   30590   °£Àå°ÔÀå
2017-07   30325   ¼¼¹ú½­
2022-05   29969   È­Á¤Å¥»ï
2018-02   29685   °£Àå°ÔÀå
2014-11   29645   ±èȲÁß
2016-12   29555   ´©±¼±î
2014-08   29445   ºü½Ã¿Â
2016-07   29440   µÎÆ÷¸®
2017-01   29104   Á¦¿ÂÇÁ·Î
2016-11   29079   stone92±è°æ¹Î