Seeed Studio XIAO SAMD21 como dispositivo USB (TinyUSB)

Este wiki apresenta como usar o Seeed Studio XIAO SAMD21 como USB-Client com a ajuda da biblioteca TinyUSB. Isso permite que o Seeed Studio XIAO SAMD21 seja usado para dispositivos HID, como teclado, mouse etc.
Esta funcionalidade depende da Adafruit TinyUSB Library for Arduino. A biblioteca foi testada com **Seeed Studio XIAO SAMD21 ** e Wio Terminal(SAMD51) e está funcionando corretamente.
Instalando a Adafruit TinyUSB Library for Arduino
Devido a uma grande atualização da biblioteca "Adafruit TinyUSB Library for Arduino", as versões V1.0.0 e superiores não podem ser usadas com o Seeed Studio XIAO SAMD21, utilize a versão V0.10.5 da biblioteca se você precisar usar esta biblioteca.
-
Visite o repositório Adafruit TinyUSB Library for Arduino e baixe todo o repositório para seu disco local.
-
Agora, a biblioteca pode ser instalada na Arduino IDE. Abra a Arduino IDE e clique em
sketch->Include Library->Add .ZIP Library, e escolha o arquivoAdafruit_TinyUSB_Arduinoque você acabou de baixar.

Código de Exemplo Simples
Há muitos exemplos fornecidos pela biblioteca TinyUSB, aqui podemos navegar até Files -> Examples -> Adafruit TinyUSB Library -> HID -> hid_mouse para um exemplo simples de mouse. Conecte um botão ao pino D0 do Seeed Studio XIAO SAMD21 e também configure no código (#28), como a seguir:
Certifique-se de que você atualizou o ArduinoCore-samd para a versão mais recente para evitar erro de compilação.
/*********************************************************************
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
MIT license, check LICENSE for more information
Copyright (c) 2019 Ha Thach for Adafruit Industries
All text above, and the splash screen below must be included in
any redistribution
*********************************************************************/
#include "Adafruit_TinyUSB.h"
/* This sketch demonstrates USB HID mouse
* Press button pin will move
* - mouse toward bottom right of monitor
*
* Depending on the board, the button pin
* and its active state (when pressed) are different
*/
#if defined ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS
const int pin = 4; // Left Button
bool activeState = true;
#elif defined ARDUINO_NRF52840_FEATHER
const int pin = 7; // UserSw
bool activeState = false;
#else
const int pin = 0;
bool activeState = true;
#endif
// HID report descriptor using TinyUSB's template
// Single Report (no ID) descriptor
uint8_t const desc_hid_report[] =
{
TUD_HID_REPORT_DESC_MOUSE()
};
// USB HID object
Adafruit_USBD_HID usb_hid;
// the setup function runs once when you press reset or power the board
void setup()
{
// Set up button, pullup opposite to active state
pinMode(pin, activeState ? INPUT_PULLDOWN : INPUT_PULLUP);
usb_hid.setPollInterval(2);
usb_hid.setReportDescriptor(desc_hid_report, sizeof(desc_hid_report));
usb_hid.begin();
Serial.begin(115200);
// wait until device mounted
while( !USBDevice.mounted() ) delay(1);
Serial.println("Adafruit TinyUSB HID Mouse example");
}
void loop()
{
// poll gpio once each 10 ms
delay(10);
// Whether button is pressed
bool btn_pressed = (digitalRead(pin) == activeState);
// nothing to do if button is not pressed
if (!btn_pressed) return;
// Remote wakeup
if ( USBDevice.suspended() )
{
// Wake up host if we are in suspend mode
// and REMOTE_WAKEUP feature is enabled by host
USBDevice.remoteWakeup();
}
if ( usb_hid.ready() )
{
int8_t const delta = 5;
usb_hid.mouseMove(0, delta, delta); // no ID: right + down
}
}
Suporte Técnico & Discussão sobre o Produto
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.