Arduino UNO R3 jako urządzenie USB HID

Zbiór tutoriali związanych z Arduino.
ODPOWIEDZ
walkmanowiec
Młodszy majsterkowicz
Posty: 22
Rejestracja: 29 paź 2012, 21:03

Arduino UNO R3 jako urządzenie USB HID

Post autor: walkmanowiec » 2 lis 2014, 20:25

Jak wiemy Arduino Leonardo posiada niebywałą zaletę jaką jest możliwość zgłaszania się w systemie jako urządzenie USB HID. Wersji UNO pozbawiono tej możliwości, jednak w łatwy sposób możemy sprawić, aby urządzenie zgłaszało się jako np klawiatura.

Zanim zaczniemy kilka uwag:
1. Cały proces testowałem na oryginalnym Arduino UNO R3, nie mam pojęcia jak zachowają się chińskie klony.
2. W przypadku starszych wersji UNO oraz innych wersji Arduino ważne jest, aby odnaleźć informacje o tym jak wprowadzić urządzenie w tryb DFU- resztę wykonujemy analogicznie jak w tym przykładzie.

Zaczynajmy:

1. Zakładam, że każdy z Was posiada zainstalowane środowisko programistyczne Arduino, jeśli nie to instalujemy je wraz ze sterownikami ze strony producenta.
2. Ze strony: http://www.atmel.com/tools/flip.aspx pobieramy program Flip. Na stronie jest kilka wersji, jeśli nie posiadamy JRE to polecam instalacje programu z tego linku gdzie środowisko jest już zawarte http://www.atmel.com/images/JRE%20-%20F ... .7.112.exe
3. Podłączamy Arduino kablem USB do komputera.
4. Na sekundę zwieramy dwa piny zaznaczone na zdjęciu, aby wprowadzić urządzenie w tryb DFU.
W przypadku innych wersji Arduino sposób wprowadzenia w tryb DFU różni się i należy go odszukać.

Obrazek

5. Urządzenie powinno zostać wykryte jako Atmega16u2 w menadżerze urządzeń, jeśli tak się nie stało instalujemy manualnie sterownik znajdujący się w lokalizacji: C:\Program Files (x86)\Atmel\Flip 3.4.7\usb klikając prawym przyciskiem na plik .inf i wybierając polecenie "Zainstaluj".
6. Włączamy program Flip, następnie klikamy na ikonkę mikrokontrolera i z listy wybieramy Atmega16u2 (W przypadku wcześniejszych wersji UNO jest to Atmega8U2).

Obrazek

7. Klikamy kolejno File->Load Hex File i wybieramy plik Hoodloader.hex, który możemy pobrać tutaj: https://www.dropbox.com/s/dthek3j9znzft ... 8.hex?dl=0
8. Klikamy na ikonkę kabla USB i wybieramy opcję USB a następnie klikamy Open.
9. Rozpoczynamy wgrywanie klikając przycisk "Run".
10. Po wszystkim odłączamy i podłączamy ponownie Arduino do komputera. Powinno zostać wykryte jako Arduino Hoodloader, jeżeli mamy nieznane urządzenie bądź wykrzyknik przy urządzeniu to aktualizujemy sterownik:
https://www.dropbox.com/s/cwr17w6lbbois ... r.inf?dl=0
11. Teraz możemy już korzystać z Arduino i emulować na nim klawiaturę/gamepada/myszkę, jak?
12. Ja korzystam z biblioteki HID oraz środowiska Arduino 1.0.6. Link do biblioteki:
https://github.com/NicoHood/HID. Po skopiowaniu biblioteki i uruchomieniu środowiska możemy skompilować przykładowy program:

Kod: Zaznacz cały

#include <HID.h>
int i;
void setup() {
  // Starts Serial at baud 115200 otherwise HID wont work on Uno/Mega.
  // This is not needed for Leonado/(Pro)Micro but make sure to activate desired USB functions in HID.h
  Serial.begin(SERIAL_HID_BAUD);
  Keyboard.begin();
  
  for(i=0;i<10;i++)
   {
      Keyboard.println("This message was sent with my Arduino.");
   }
}

void loop()
{
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


walkmanowiec
Młodszy majsterkowicz
Posty: 22
Rejestracja: 29 paź 2012, 21:03

Re: Arduino UNO R3 jako urządzenie USB HID

Post autor: walkmanowiec » 3 lis 2014, 15:09

Owszem tutorial ten jest polskim tłumaczeniem operacji opisanych na stronie autora projektu jednakże ktoś mnie prosił na forum, abym opisał jak tego dokonałem, więc to uczyniłem.

Urządzenie zgłasza się jako Arduino Hoodloader na porcie COM 11 i bez problemu działa dalsze wgrywanie programów przez środowisko Arduino.
Tak się składa, że podłączyłem odbiornik podczerwieni do Pinu 11, napięcie i masę i bez problemu działa to w moim prostym programie do obsługi XBMC z poziomu pilota.

Nie jestem zaawansowany technicznie i szczerze mówiąc nie wszystko co napisałeś jestem w stanie wytłumaczyć ale:
1. Działa normalne wgrywanie programów poprzez Arduino
2. Można emulować działanie klawiatury na UNO
Kod projektu pilota XBMC sterowanego podczerwienią w razie gdybyś samemu chciał sprawdzić czy to działa:

Kod: Zaznacz cały

#include <HID.h>
#include <IRremote.h>
#include <Keyboard.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;


void setup() {
  Keyboard.begin();
  Serial.begin(115200);
  irrecv.enableIRIn();
}


void loop() {
  
  if (irrecv.decode(&results)) {
 
      switch (results.value) {
        case 0x446117B3: //URUCHOMIENIE XBMC
                         {
                          Keyboard.press(KEY_LEFT_CTRL);
                          Keyboard.press(KEY_LEFT_SHIFT);
                          Keyboard.press(KEY_LEFT_ALT);
                          Keyboard.press('x');
                          delay(100);
                          Keyboard.releaseAll();
                                               }
                                                break;
        case 0x232FBFB1: //WEEB.TV
                         {
                          Keyboard.write('1');
                                               }
                                                break; 
             
        case 0x57559113: //PLAY/PAUSE
                         {
                          Keyboard.write(0x20);
                                              }
                                                break; 
        case 0x1F949DB: //VOL+
                       {
                          Keyboard.write('+');
                                              }
                                                 break;                             
        case 0x5985AF7D: //VOL-
                       {
                          Keyboard.write('-');
                                              }
                                                 break;
        case 0xB45736B5: //MENU
                       {
                          Keyboard.write(0xB3);
                                              }
                                                 break;
        case 0x451E7351: //INFO PROGRAM
                       {
                          Keyboard.write('i');
                                              }
                                                 break;
        case 0xB99CC45B: //BACK
                       {
                          Keyboard.write(0xB2);
                                              }
                                                 break;
                                                 
        case 0x61792D3B: //ENTER
                       {
                          Keyboard.write(0xB0);
                                              }
                                                 break;
          
        case 0xC4EE8C19: //UP
                       {
                          Keyboard.write(0xDA);
                                              }
                                                 break;                                        
        case 0x526E78FB: //DOWN
                       {
                          Keyboard.write(0xD9);
                                              }
                                                 break; 
        case 0x78ADAABB: //RIGHT
                       {
                          Keyboard.write(0xD7);
                                              }
                                                 break; 
        case 0xBA3BBBB5: //LEFT
                       {
                          Keyboard.write(0xD8);
                                              }
                                                 break; 
        case 0x58CE2FD7: //OFF XBMC
                       {
                         Keyboard.press(KEY_LEFT_ALT);
                         Keyboard.press(KEY_F4);
                         delay(100);
                         Keyboard.releaseAll();
                                              }
                                                 break;    
 }
 
   irrecv.resume();
   }
}
   




ODPOWIEDZ

Strony partnerskie: