개발자/Arduino

Portenta H7 USB Host로 사용하기

지구빵집 2021. 3. 2. 10:30
반응형

 

 

Portenta H7 USB Host로 사용하기  

 

이 튜토리얼에서는 키보드 또는 마우스와 같은 주변 장치를 연결하여 상호 작용할 수 있는 방식으로 USB 호스트로 작동하도록 Portenta H7을 설정하는 방법을 설명합니다.

 

* 참고 : 이 가이드에서는 베타 단계에 있으며 변경될 수 있는 API를 사용합니다. 

 

Portenta H7 USB Host로 사용하기  

 

Portenta H7 as a USB Host 

 

키보드 또는 마우스와 같은 주변 장치를 연결하여 보드와 상호 작용할 수 있는 방식으로 USB 호스트 역할을 하도록 Portenta H7을 구성할 수 있습니다. 이렇게 하면 키보드를 Portenta에 연결하고 숫자 또는 문자를 입력하여 스케치에서 작업을 트리거할 수 있습니다.

 

배울 것

 

  • Portenta H7을 USB 호스트로 구성하는 방법
  • KeyboardController 라이브러리를 사용하여 Portenta H7과 USB 연결을 설정하는 방법
  • 키보드에서 버튼 누름을 읽는 작은 프로그램을 작성하려면
  • 추가 Arduino 보드를 사용하여 주변 장치에서 Portenta H7로 전송되는 데이터를 디버깅하는 방법.

 

필수 하드웨어 및 소프트웨어

 

  • Wonders H7 보드 ( https://store.arduino.cc/portenta-h7 )
  • USB-C 케이블 (USB-A에서 USB-C로 또는 USB-C에서 USB-C로)
  • USB-C 허브 (활성) ( 여기에서 이 자습서에 사용된 허브를 찾을 수 있음 ) (선택 사항)
  • 외부 키보드
  • Arduino IDE 1.8.10+ 또는 Arduino Pro IDE 0.0.4+
  • USB 허브 용 전원 공급 장치 (USB 허브를 사용하는 경우) 

 

추가 재료

 

 

USB 호스트 및 클라이언트 모드

 

Portenta H7을 USB 호스트로 사용할 때 허브를 통해 연결된 다른 USB 주변 장치에서 제공하는 정보를 수신하고 관리할 수 ​​있습니다. 이 시나리오에서 Portenta H7은 "USB 호스트"또는 "마스터"장치라고 하며 주변 장치는 "클라이언트"장치 (일반적으로 마우스 또는 키보드)라고 합니다.

 

컴퓨터는 USB 주변기기가 제공하는 정보를 수신하므로 기본적으로 USB 호스트이기도 합니다. PC는 "플러그 앤 플레이"메커니즘을 따릅니다. 즉, USB 장치가 연결될 때마다 호스트는 장치를 감지하고 장치에 적합한 드라이버를 로드하여 직렬 버스를 통해 통신 채널을 설정합니다.

 

주변 장치의 호스트 포인트와 달리 Portenta H7은 "클라이언트"로 컴퓨터에 연결할 수도 있습니다. 이 경우 PC는 USB 호스트이고 Portenta H7은 주변 장치입니다. 이 시나리오는 스케치를 보드에 업로드하거나 직렬 모니터를 통해 데이터를 모니터링할 때 볼 수 있습니다.

 

또한 Portenta H7은 마우스 또는 키보드 자체로 설정할 수도 있습니다. 해당 스케치, 회로 및 구성 요소를 사용하여 키보드 또는 마우스 데이터를 PC로 보낼 수 있습니다 (이 자습서에서는 다루지 않음). 

 

USB 호스트 설정

 

이 튜토리얼에서는 Portenta H7을 USB 호스트로 구성할 것입니다. 이렇게 하면 USB 허브에 연결할 USB 키보드에서 해당 키 (r, g, b)를 눌러 보드의 RGB 내장 LED를 전환할 수 있습니다. 튜토리얼을 통해 보드와 키보드 사이에 직렬 통신을 설정하는 방법과 보드가 USB 호스트 장치로 작동하도록 프로그래밍하는 방법을 배웁니다. 이를 위해 Portenta H7 코어의 일부인 USBHOST 라이브러리를 사용합니다. 이 라이브러리는 USB 장치와 Portenta 보드 간의 USB 연결을 용이하게 합니다.

 

USB OTG (On The Go) 사양 덕분에 Portenta H7은 호스트 모드와 클라이언트 모드 사이를 자동으로 전환할 수 있습니다. Portenta H7에서 USB OTG를 활성화하는 코드는 mbed 코어에 포함되어 있으며 추가 구성없이 작동할 준비가 되었습니다. 다양한 사용 사례에서 USB 포트를 사용하는 몇 가지 관련 클래스는 다음과 같습니다.

 

  • USBCDC_ECM> USB를 통한 이더넷 ( 여기 참조 )
  • USBMSD> USB를 통한 대용량 저장 장치 ( 여기 참조 )
  • USBCDC> USB를 통한 직렬 포트 ( 여기 참조 )
  • USBHID> USB 휴먼 인터페이스 장치 (예 : 마우스 또는 키보드) ( 여기 참조

 

1. 기본 설정

 

USB-C 케이블을 사용하여 Portenta 보드를 컴퓨터에 연결하고 Arduino IDE 또는 Arduino Pro IDE를 엽니다. 보드에서 Arduino 스케치 파일을 처음 실행하는 경우 진행하기 전에 Arduino 용 Portenta H7을 설정하는 방법을 확인하는 것이 좋습니다. 

 

Portenta H7은 적절한 USB-C 케이블을 사용하여 컴퓨터에 연결할 수 있습니다.

 

2. 키보드 컨트롤러 만들기

 

USB 연결을 처리하고 R, G 또는 B 키를 누를 때마다 LED 상태를 수정하는 스케치를 만들어 보겠습니다. 키를 처음 누를 때 LED가 켜지고 꺼지려면 해당 키를 다시 눌러야 합니다.

 

보드가 USB 장치를 처리할 수 ​​있도록 하는 USB 프로토콜을 프로그래밍하는 것은 어려운 작업이므로 KeyboardController라는 미리 빌드된 예제를 사용합니다. 그것을 찾으려면 보드 관리자를 사용하여 설치된 Arduino Portenta H7에 대한 보드 설명이 있는지 확인하십시오. 

 

보드 선택기에서 Arduino Portenta H7 (M7 코어)을 선택합니다.

 

그런 다음 파일> 예제> USBHOST> KeyboardController를 엽니다. 

 

KeyboardController 예제 열기

 

USBHost의 이 예에서 사용되는 라이브러리는 고전 아두이노의 개편인 USBHost의 라이브러리입니다. 이 새로운 버전은 프로토콜을 최신 USB 버전에 적용하여 USB 허브 (USB 어댑터)를 통해 장치를 연결할 수 있습니다.

 

USBHost 라이브러리가 어떻게 작동하는지 더 잘 이해하려면 Arduino USBHost 라이브러리를 살펴보는 것이 도움이 될 수 있습니다.

 

참고 : Arduino_Pro_Tutorials 라이브러리의 예제에서 완성된 스케치를 찾을 수 있습니다.

예제-> Arduino_Pro_Tutorials-> Portenta H7 as a USB Host-> LEDKeyboardController

 

3. 키보드에서 키 감지

 

열어 본 예제는 보드가 키보드와의 연결을 처리하는 방법을 설명하고 각 키의 기능을 설명합니다. 키보드에서 어떤 키가 눌렸는지 감지하려면 몇 줄의 코드를 수정하여 예제에 추가해야 합니다.

 

코드 시작 부분에 있는 //다음 줄 의 주석 줄 ( )을 제거하여 시작하겠습니다. on_key = process_key. 이렇게 하면 키를 누를 때마다, 프로그램은 키보드에서 수신된 데이터를 변환하는 함수를 호출 HEXA와 char유형을. 

 

static const tusbh_boot_key_class_t cls_boot_key = {
  .backend = &tusbh_boot_keyboard_backend,
  .on_key = process_key
};

 

그런 다음 R, G 또는 B 키를 사용하여 보드의 LED 상태를 수정하려면 아래 이미지와 같이 process_key() 함수 내부에 다음 코드 부분을 추가해야 stdin_recvchar(ch);합니다. 

 

if (ch == 'r' || ch == 'R')
    {
      ledRstate = !ledRstate;
      if (ledRstate)
        digitalWrite(LEDR, LOW);
      else
        digitalWrite(LEDR, HIGH);
    }

    if (ch == 'g' || ch == 'G')
    {
      ledGstate = !ledGstate;
      if (ledGstate)
        digitalWrite(LEDG, LOW);
      else
        digitalWrite(LEDG, HIGH);
    }

    if (ch == 'b' || ch == 'B')
    {
      ledBstate = !ledBstate;
      if (ledBstate)
        digitalWrite(LEDB, LOW);
      else
        digitalWrite(LEDB, HIGH);
    }

 

R, G 및 B 키로 LED를 토글하는 코드

 

4. LED 초기화

 

올바른 키를 눌렀는지 감지하고 그에 따라 LED를 제어하는 ​​코드가 있으면 LED를 초기화해야 합니다. 이렇게 하려면 setup() 함수 내부에 다음 코드 부분을 추가합니다. 

 

pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);

//Turn off the LEDs
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, HIGH);

 

그리고, 코드 편집을 완료, 당신은 초기화할 필요가 ledRstate, ledGstate 그리고 ledBstate변수 부울로의 이전 코드의 이 부분을 추가하여 setup() 기능. 

 

bool ledRstate = false;
bool ledGstate = false;
bool ledBstate = false;

 

5. 코드 업로드

 

스케치를 보드에 업로드하기 전에 스케치북에 저장하고 이름을 leds_keyController.ino로 지정합니다. 그런 다음 보드 메뉴에서 Arduino Portenta H7 (M7 코어)을 선택하고 Portenta가 연결된 포트를 선택합니다. leds_keyController.ino 스케치를 업로드합니다. 이렇게 하면 미리 스케치가 자동으로 컴파일됩니다.

 

Portenta를 USB 호스트로 바꾸면 직렬 포트를 알리지 않습니다. 다시 가져오려면 재설정 버튼을 두 번 눌러 부트 로더 모드로 전환하면 됩니다. 

 

보드 선택기에서 Arduino Portenta H7 (M7 코어)을 선택합니다.

 

6. Portenta에 키보드 연결

 

Portenta 보드를 컴퓨터에 연결하여 프로그래밍하면 컴퓨터는 USB 호스트이고 Portenta 보드는 USB 클라이언트입니다. PC에 외부 키보드를 연결할 때도 마찬가지입니다. 이 튜토리얼에서는 Portenta 보드가 호스트가 됩니다. 프로그래밍 후 PC에 연결되지 않습니다! 연결하는 방법을 살펴보겠습니다. 

 

연결 스키마

 

위의 이미지에서 다음을 확인할 수 있습니다.

 

  • Portenta는 USB 허브 (USB-C 어댑터)의 "HOST"포트에 연결되어 있습니다.
  • USB 허브 (USB-C 어댑터)는 전원 공급 장치를 통해 외부에서 전원을 공급받아야 합니다. 이것은 Portenta에 전원을 공급하는 데 필요합니다.
  • 키보드를 PC에 연결하는 것과 동일한 방식으로 USB 허브 (USB-C 어댑터)에 연결해야 합니다.

 

대체 구성 (USB 허브 필요 없음)

 

USB-C 유형 허브가 없는 경우 USB-C 유형 키보드 또는 USB A 유형 키보드 및 USB A to C 어댑터를 사용하여이 자습서를 완료할 수 있습니다. 이렇게 하려면 다음을 수행하십시오.

 

  • 5V의 VIN 핀을 통해 Portenta H7에 전원을 공급합니다. ( 핀아웃 다이어그램 확인 )
  • 키보드를 Portenta의 USB-C 커넥터에 직접 연결합니다 (키보드 커넥터가 USB 유형 A 인 경우 USB-A 대 USB-C 어댑터 사용).
  • 스케치에 다음 코드 줄을 추가하여 Portenta의 USB 커넥터를 통해 전원을 공급할 수 있습니다.
  • mbed::DigitalOut otg(PJ_6, 0); 

 

7. LED 전환

 

Portenta 보드를 연결하면 R, G 및 B 키를 눌러 LED를 전환할 수 있습니다. 

 

키보드에서 R, G 또는 B 키를 눌러 LED를 전환합니다.

 

작동하지 않는 경우 다음을 시도해야 합니다.

 

  1. 재설정 버튼을 눌러 portenta를 재설정하십시오.

리셋 버튼

 

  1. USB 허브 (USB C 어댑터)에서 Portenta 보드를 분리하고 USB 허브에서 전원을 분리 한 다음 Portenta를 USB 허브에 연결 한 다음 전원을 USB 허브에 연결합니다. 

 

결론

 

이 튜토리얼에서는 Portenta를 USB 호스트로 구성하여 키보드를 연결하고 제어하는 ​​방법을 보여줍니다. 또한 키보드와 Portenta 보드 간의 상호 작용에 대한 시각적 참조를 갖도록 Portenta에 대해 미리 빌드된 예제 중 하나를 수정하는 방법을 배웠습니다. 

 

다음 단계

 

이제 보드를 USB 호스트로 설정하는 방법을 배웠고 예제가 어떻게 작동하는지 이해했으므로 KeyboardController.ino 스케치로 실험을 시작하십시오. 이 스케치는 필요에 따라 다양한 방식으로 조정할 수 있습니다. 예를 들어 USB 허브에 마우스를 추가하고 왼쪽 버튼을 누르면 내장 LED의 밝기를 높이고 오른쪽 버튼을 누르면 낮출 수 있습니다. 

 

 

문제 해결

 

LED가 토글 되지 않습니다. 이 문제 해결 가이드는 키보드의 키를 누를 때 Portenta의 LED가 전환되지 않는 이유를 찾는 데 도움이 됩니다. 이렇게 하려면 몇 가지 추가 구성 요소가 필요합니다.

 

  • Arduino Arduino MKR WiFi 1010 보드 (또는 직렬 포트가 2 개 이상 있는 다른 Arduino 보드)
  • 추가 보드를 PC에 연결하는 USB 케이블
  • 3 개의 점퍼 와이어

 

문제가 무엇인지 감지하기 위해 Portenta에서 Arduino MKR WiFi 1010 보드로 직렬 통신을 통해 USB 주변 장치 (이 경우 키보드)에 대한 모든 정보를 보냅니다. 이 정보가 Arduino MKR WiFi 1010 보드에 도착하면 직렬 모니터를 통해 출력하여 발생할 수 있는 상황을 디버깅할 수 있습니다.

 

1. PORTENTA를 ARDUINO MKR WIFI 1010에 연결합니다.

 

Portenta를 Arduino MKR WiFi 1010 보드에 연결하려면 아래 이미지와 같이 Serial 1 기능 (두 보드 모두에서 13RX 및 14TX)이 있는 핀을 연결해야 합니다. 보드의 접지 핀 (GND)도 연결하는 것을 잊지 마십시오. 

 

직렬 연결 포트-Arduino WiFi MKR 1010

 

2. ARDUINO MKR WIFI 1010 보드 프로그래밍

 

Arduino MKR WiFi 1010 보드를 설정하려면 다음 코드를 복사하고 새 스케치 파일에 붙여 넣고 이름을 mkr1010_serial.ino로 지정합니다. 그런 다음 Arduino Arduino MKR WiFi 1010 보드에 업로드합니다. Arduino MKR WiFi 1010을 보드로 선택하고 Arduino MKR WiFi 1010이 연결된 포트를 선택해야 합니다. 

 

char data;

void setup()
{
  Serial.begin(9600);
  Serial1.begin(115200);
}

void loop()
{

  if (Serial1.available())
  {
    data = Serial1.read();
    Serial.write(data);
  }
}

 

3. 연결 스키마

 

Arduino MKR WiFi 1010 보드를 프로그래밍하고 Portenta 보드를 Arduino MKR WiFi 1010에 연결한 후 연결 스키마는 다음과 유사해야 합니다. 

 

연결 스키마 문제 해결

 

4. ARDUINO MKR WIFI 1010 보드의 직렬 모니터를 엽니다. 모든 것이 연결되면 직렬 모니터를 열고 Portenta를 재설정하십시오. Portenta 보드를 재설정하면 직렬 모니터에 다음과 유사한 내용이 표시됩니다. 

 

USB 통신 정보 문제 해결

 

MKR WiFi 1010 보드에 수신된 데이터에 "사용"메시지가 표시되어야 합니다. Portenta가 USB 허브의 다른 포트를 감지했음을 의미합니다. 볼 수 있는 경우 키보드에서 키를 누를 때마다 직렬 모니터에 인쇄됩니다.

 

MKR WiFi 1010 보드에서 수신된 메시지에 "사용 안 함"메시지가 표시되면 USB 허브와 Portenta 보드의 통신에 문제가 있음을 의미합니다. 이 경우 시도해보십시오.

 

  1. 재설정 버튼을 눌러 Portenta를 재설정하십시오.
  2. USB 허브 (USB C 어댑터)에서 Portenta 보드를 분리하고 USB 허브에서 전원을 분리 한 다음 Portenta를 USB 허브에 연결하고 전원을 USB 허브에 연결합니다.

 

이 프로세스를 여러 번 반복한 후에도 연결이 여전히 작동하지 않으면 사용 중인 USB 허브가 Portenta 보드와 호환되지 않을 수 있으며이 자습서를 완료하려면 다른 USB 허브가 필요합니다. 

 

 

본 포스팅의 원본 문서를 참고하세요.

 

 

 

 

 

반응형