Arduino jako USB HID

Czy można zbudować urządzenie HID (np. Klawiaturę) przy użyciu Arduino uno?

W tym czasie będąc, mam wejścia przyciskowe na Arduino dające wyjścia na linii szeregowej. Jak więc mogę przekształcić moje obecne oprogramowanie sprzętowe w coś, co będzie zachowywać się jak klawiatura HID?

  • Czy mam napisać nowy sterownik urządzenia w oknie?
  • Czy mam utworzyć oprogramowanie warstwa, która mogłaby pobrać moje dane szeregowe i sprawić, by system Windows odczytał je jako dane wejściowe HID?
  • Czy jest lepszy sposób na osiągnięcie tego, jeśli w ogóle jest to możliwe?

Komentarze

  • Może się mylę, ale tak naprawdę nie chodzi o Arduino. Chodzi o rozwój sterownika urządzenia po stronie Window '.
  • Pierwsza odpowiedź w google: mitchtech.net/arduino -usb-hid-keyboard … ale nie określiłeś, który Arduino. We wbudowanym programie Leonardo ' s, a odpowiedni sterownik już istnieje (patrz arduino.cc/en/Reference/MouseKeyboard).
  • Ja ' używam Uno, ale ' przyjrzę się temu, co opublikowałeś, ponieważ ostatnim razem rozważaliśmy aktualizację DFU, ale ' trochę się boimy cegieł, ponieważ komponenty nie są ' tak łatwo dostępne i tanie w mój obszar jak w większości miejsc.
  • @AsheeshR Ten problem jest teraz na meta: meta.arduino.stackexchange.com/q/102/46
  • Cóż, to ' jest zdecydowanie możliwe, ponieważ Arduino Uno zawiera układ Atmega16u2 jako układ sterownika USB, użytkownik może użyć flashowania DFU lub ICSP do umieść na urządzeniu oprogramowanie układowe zbliżone do ' leonardo, co spowoduje, że Arduino będzie zachowywać się jak klawiatura HID. ' nie jest zaangażowany w tworzenie systemu Windows, żaden sterownik do zbudowania jako urządzenia USB / HID nie jest domyślnie rozpoznawany. tzn. to pytanie powinno zostać ponownie otwarte.

Odpowiedź

Czy można zbudować urządzenie HID (np. Klawiaturę) przy użyciu Arduino uno?

tak! Jest też „świetny samouczek, jak to zrobić w tutaj

Na Obecnie mam wejścia przycisków na Arduino dające wyjścia na linii szeregowej. Jak więc mogę przekształcić moje obecne oprogramowanie układowe w coś, co zachowuje się jak klawiatura HID?

Jak pokazuje samouczek, musisz przekształcić kod oprogramowania układowego, aby zamiast drukować zdarzenia, faktycznie wyzwalasz zdarzenia. Co musisz zrobić, to dodać do kodu:

void triggerKey(uint8_t mod, uint8_t chr) { uint8_t buf[8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // press key Serial.write(buf, 8); // emulate key press delay delay(10); buf[1] = 0x00; // release key Serial.write(buf, 8); } 

To, co tutaj robisz, jest wysyłane z głównego mikrokontrolera Arduino przez linię szeregową do mniejszego mikrokontrolera, który obsługuje komunikację USB. Mikrokontroler pobierze te „bufory” kluczy i przeniesie je jako naciśnięcia klawiszy USB HID na klawiaturze przez USB.

Uwaga, znak klucza (chr w kodzie tutaj ), to w rzeczywistości kod klucza wysyłany przez USB, który jest interpretowany przez sterownik USB HID, który następnie tłumaczy go na rzeczywisty znak przy użyciu bieżącego układu, który skonfigurowałeś dla swojej klawiatury.

mod to jeden z klawiszy modyfikujących, które masz na klawiaturze (shift, control, alt …), 0x00 nie jest modyfikatorem.

  • Czy mam napisać sterownik urządzenia w nowym oknie?

Nie, nie potrzebujesz! Po uaktualnieniu DFU twoje arduino będzie postrzegane przez Windows jako klawiatura USB.

  • Czy mam utworzyć warstwę oprogramowania, która mogłaby zająć mój serial danych i czy system Windows odczyta je jako wejście HID?

Nie musisz tego robić i jest to w rzeczywistości bardzo zły pomysł z wielu powodów:

  • Twoje rozwiązanie nie byłoby przenośne i dlatego „musiałbyś zhakować coś dla każdej używanej platformy,
  • Twoje rozwiązanie oznaczałoby wiele nowy kod ; im więcej kodu się napiszesz, tym więcej błędów będzie prawdopodobnie w twoim systemie,
  • Twoje rozwiązanie byłoby naprawdę hakerskie, ponieważ zachowywałoby się jak sterownik urządzenia (np. kernel land ) pobiera dane wejściowe z programu użytkownika (tj. obszar użytkownika ) i prawdopodobnie nie zadziała, debugowanie jest piekłem i podatne na problemy z bezpieczeństwem … Jeśli to w ogóle jest możliwe!

Używam Uno, ale spojrzę na to, co opublikowałeś, ponieważ ostatnim razem rozważaliśmy aktualizację DFU, ale trochę boi się cegieł

W końcu, w komentarzu, masz obawy dotyczące zamurowania swojego arduino.Uwierz mi i autorowi artykułu , że nie możesz zamuruj swoje arduino, wykonując flashowanie oprogramowania układowego:

UWAGA: Nie ma szans na „zamurowanie” urządzenia przy użyciu tej metody. Oprogramowanie układowe programu ładującego Arduino można zawsze zaktualizować za pomocą protokołu DFU!

W przypadku, gdy coś stanie się naprawdę nie tak i pojawi się uszkodzenie bootloadera w małym AVR (atmega8u2), nadal możesz ponownie flashować to przy użyciu innego arduino lub programatora atmel przy użyciu 6 pinów obok wtyczki USB.

Ostatecznie wiedz, że tylko sposób na zblokowanie AVR, a więc również Arduino polega na zabawie bezpiecznikami i kasowaniu programowalnych bezpieczników. Nawet wtedy możesz użyć HVSP , aby uratować swoje urządzenie, chociaż często wystarczy wziąć nowy chip.

Komentarze

  • Dzięki za wszystkie przydatne informacje, w końcu to osiągnęliśmy.
  • Cóż, właściwym sposobem na zablokowanie AVR jest przekroczenie prądu / zbyt wysokie napięcie. Wtedy zostanie przypieczona …
  • Ale z drugiej strony, ' nie nazywa się cegłą, ale smażeniem lub, jak mówisz, opiekania. Przepuść 15 amperów przez MCU i założę się, że ' zobaczymy, jak przeskakuje przez pokój 😉
  • Jak zwolnić określony klawisz? Chcę emulować klawisz HOLD, a następnie zwolnij. Również w linku znak przechodzi do tablicy [2], podczas gdy tutaj przechodzi do [1]. Dlaczego?
  • cóż, jak pokazano w moim przykładzie, robisz to w dwóch kroki, najpierw naciskasz klawisz, potem ' jest opóźnienie, a potem je zwalniasz. Cóż, wtedy ' d musisz naucz się, jak działa klawiatura sprzętowa ntation działa, ' jest w pewnym sensie nienaturalny, a każda wartość tablicy ma znaczenie. Przepraszam, że nie mam linku do udostępniania bankomatu, ale gdy znajdziesz coś w sieci, napisz nowy komentarz ☺

Odpowiedź

Stworzyłem projekt, który w pełni zastępuje bootloader Arduino. Jesteś w stanie przesłać szkice i używać go jako HID. Zobacz Project HID na Github: https://github.com/NicoHood/HID

Komentarze

  • Witamy w Arduino SE! Czy możesz dodać trochę informacji na temat korzystania z biblioteki? Dzięki!
  • Przeczytaj plik readme i wypróbuj przykłady? To wszystko, nie ma potrzeby oszukiwać tutaj wszystkiego. Wszystko na Githubie jest aktualne 🙂
  • Przepraszam stary, wygląda na fajną bibliotekę, ale brakuje twojej dokumentacji. O ile wiem, ' nie ma prawdziwych instrukcji instalacji, a całe tematy na Twojej wiki po prostu powiedz " DO ZROBIENIA " (konkretnie temat dotyczący gamepada jest zupełnie pusty). : – /
  • Właściwie istnieje tutaj potrzeba przedstawienia podstawowego opisu: odpowiedzi muszą być sensowne nawet bez linku zewnętrznego, który może umrzeć. A ten nie jest.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *