題:
Arduino作為USB HID
Anomaly
2014-02-27 20:37:49 UTC
view on stackexchange narkive permalink

是否可以使用Arduino uno構建HID設備(如鍵盤)?

目前,我在Arduino上有按鈕輸入,可在串行線上提供輸出。因此,如何將當前的固件轉換為可以像HID鍵盤一樣工作的東西?可以獲取我的串行數據並讓Windows將其讀取為HID輸入的第二層?

  • 是否有更好的方法來實現這一目標?
  • 我可能是錯的,但這與Arduino無關。它與Window的側邊設備驅動程序開發有關。
    谷歌的第一個答案:http://mitchtech.net/arduino-usb-hid-keyboard/ ...但是您沒有指定哪個Arduino。在Leonardo上它是內置的,並且合適的驅動程序已經存在(請參閱http://arduino.cc/zh/Reference/MouseKeyboard)。
    我使用的是Uno,但我會看一下您發布的內容,因為上次我們考慮過DFU更新,但是由於有些組件在我所在的地區不像大多數地區那麼容易獲得和便宜,因此我們有點擔心的地方。
    -1
    @AsheeshR這個問題現在在meta上:http://meta.arduino.stackexchange.com/q/102/46
    好吧,這絕對是有可能的,因為Arduino Uno具有Atmega16u2作為USB驅動器芯片,用戶可以使用DFU或ICSP閃存在設備上推送接近leonardo的固件,這將使Arduino充當HID鍵盤。沒有涉及Windows開發,因為默認情況下不會識別USB / HID設備,所以沒有要構建的驅動程序。即該問題應重新開始。
    二 答案:
    zmo
    2014-03-01 22:15:12 UTC
    view on stackexchange narkive permalink

    是否可以使用Arduino uno構建HID設備(如鍵盤)?

    是的!在此處

    上有一個很棒的教程,介紹如何在Arduino上提供按鈕輸入,並在串行線上提供輸出。因此,如何將當前固件轉換為可以像HID鍵盤一樣工作的東西?

    如本教程所示,您需要轉換固件代碼,而不是打印事件,而是實際觸發事件。您需要做的是添加到您的代碼中:

      void triggerKey(uint8_t mod,uint8_t chr){uint8_t buf [8] = {mod,chr,0x00,0x00,0x00,0x00, 0x00,0x00}; //按下Serial.write(buf,8)鍵; //模擬按鍵延遲delay(10); buf [1] = 0x00; //釋放密鑰Serial.write(buf,8);}  

    您在這裡所做的是將主要的Arduino微控制器事件通過串行線路發送到處理USB的較小的微控制器通訊。該微控制器將獲取這些按鍵“緩衝區”,並通過USB HID鍵盤按鍵通過USB進行傳輸。

    請注意,按鍵字符(此處代碼中的 chr )實際上是一個按鍵代碼。被USB HID驅動程序解釋的sendover USB,然後使用您為鍵盤設置的當前佈局將其轉換為實字符。

    mod 字符是以下字符之一鍵盤上的修飾鍵(shift,control,alt ...), 0x00 沒有修飾符。

    • 我要寫一個新窗口設備驅動程序?

    不,您不需要!通過DFU升級,Windows會將您的arduino視為USB鍵盤。

    • 我是否可以創建一個軟件層來接收我的串行數據並使Windows將其讀取為HID輸入?

    您不需要這樣做,由於許多原因,這實際上是一個非常糟糕的主意:

    • 您的解決方案不是便攜式的,因此您需要為可能使用的每個平台破解一些東西。
    • 您的解決方案將暗示許多新代碼;一個代碼編寫的代碼越多,您的系統中可能存在的錯誤就越多。
    • 您的解決方案確實很黑,因為它像設備驅動程序一樣工作(例如,內核領域 )從用戶程序(即 user land )中獲取輸入,並且可能無法正常工作,調試起來會很麻煩,並且容易出現安全問題……如果可能的話!

    我使用的是Uno,但我會看一下您發布的內容,因為上次我們考慮過DFU更新,但我們有點怕磚砌東西

    最後,在評論中,您對磚砌arduino感到擔憂。請相信我和文章的作者,您不能難以理解您的arduinodoing固件閃存:

    注意:沒有機會“使用此方法將設備砌成磚。始終可以使用DFU協議來更新Arduino引導加載程序固件!

    萬一發生嚴重錯誤,並且在小AVR(atmega8u2)中出現引導加載程序損壞,您仍然可以對其進行刷新使用另一個arduino atmel編程器,使用USB插頭旁邊的6個引腳。

    最後,要知道 only 建立AVR(也包括Arduino)的方法是使用保險絲並重置編程保險絲。即使這樣,您也可以使用 HVSP保存設備,儘管僅需購買新芯片通常就沒那麼麻煩了。

    感謝所有有用的信息,我們最終實現了這一目標。
    好吧,連接AVR的正確方法是過電流/過電壓。然後將被烤...
    但是,這不像砌磚,而是煎炸,或者說是烘烤。將15A電流通過MCU,我敢打賭,您會看到它在房間中跳躍;-)
    如何釋放特定密鑰?我想模擬一個關鍵,然後釋放。並且在鏈接中,字符轉到數組[2],而此處轉到[1]。為什麼?
    好了,如我的示例所示,您分兩個步驟進行操作,首先按鍵,然後有延遲,然後釋放它。好吧,那麼您需要向自己講解硬件鍵盤實現的工作原理,這是不自然的,並且數組的每個值都有其含義。請原諒我沒有共享atm的鏈接,但是只要您在網上搜索某些內容,請發表新評論☺
    只是要清楚。此功能取決於Atmega16u2,例如Arduino nano無法做到這一點?
    user3486
    2014-08-07 07:13:24 UTC
    view on stackexchange narkive permalink

    我創建了一個項目,該項目完全替代了Arduino Bootloader。您可以上傳草圖並將其用作HID。請參閱Github上的HID項目: https://github.com/NicoHood/HID

    歡迎使用Arduino SE!您可以添加一些有關如何使用您的庫的信息嗎?謝謝!
    閱讀自述文件並嘗試示例嗎?一切都在這裡,無需在這裡重複一切。 Github上的所有內容都是最新的:)
    抱歉,老兄,它看起來像一個很酷的庫,但是您的文檔非常缺乏。據我所知,沒有真正的安裝說明,並且您的Wiki中的整個主題都只說了“ TODO”(特別是遊戲手柄主題完全是空的,像這樣)。 :-/
    實際上,這裡需要提供基本描述:即使沒有外部鏈接,答案也必須有意義,否則可能會導致死亡。而這個不是。


    該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
    Loading...