Arduino là USB HID


25

Có thể xây dựng một thiết bị HID (như bàn phím) bằng cách sử dụng Arduino uno không?

Hiện tại, tôi có các đầu vào nút trên Arduino cho đầu ra trên dòng nối tiếp. Vì vậy, làm thế nào tôi có thể chuyển đổi phần sụn hiện tại của mình thành một thứ có thể hoạt động như bàn phím HID?

  • Tôi sẽ viết một trình điều khiển thiết bị cửa sổ mới?
  • Tôi có thể tạo một lớp phần mềm có thể lấy dữ liệu nối tiếp của mình và để các cửa sổ đọc nó làm đầu vào HID không?
  • Có cách nào tốt hơn để đạt được điều này, nếu có thể?

1
Tôi có thể sai, nhưng đây không thực sự là về Arduino. Đó là về sự phát triển trình điều khiển thiết bị phụ của Window.
asheeshr

1
Câu trả lời đầu tiên trong google: mitchtech.net/arduino-usb-hid-keyboard ... nhưng bạn không chỉ định Arduino nào. Trên Leonardo, nó được tích hợp sẵn và trình điều khiển thích hợp đã tồn tại (xem arduino.cc/en/Reference/MousePal ).
FredP

Tôi đang sử dụng Uno, nhưng tôi sẽ xem những gì bạn đã đăng bởi vì lần trước chúng tôi đã xem xét bản cập nhật DFU nhưng chúng tôi sợ những thứ cục gạch vì các thành phần không có sẵn và rẻ tiền trong khu vực của tôi như ở hầu hết nơi.
Bất thường

3
@AsheeshR Vấn đề này hiện có trên meta: meta.arduino.stackexchange.com/q/102/46
Ricardo

1
Chà, điều đó chắc chắn là có thể, vì Arduino Uno có Atmega16u2 là chip điều khiển USB, người dùng có thể sử dụng đèn flash DFU hoặc ICSP để ấn vào thiết bị phần mềm gần với leonardo, điều này sẽ khiến Arduino hoạt động như bàn phím HID. Không có phát triển cửa sổ liên quan, không có trình điều khiển nào được xây dựng vì các thiết bị USB / HID được nhận dạng theo mặc định. tức là câu hỏi đó nên được mở lại.
zmo

Câu trả lời:


14

Có thể xây dựng một thiết bị HID (như bàn phím) bằng cách sử dụng Arduino uno không?

đúng rồi Và có một hướng dẫn tuyệt vời về cách làm điều đó ở đây

Hiện tại, tôi có các đầu vào nút trên Arduino cho đầu ra trên dòng nối tiếp. Vì vậy, làm thế nào tôi có thể chuyển đổi phần sụn hiện tại của mình thành một thứ có thể hoạt động như bàn phím HID?

Như hướng dẫn cho bạn thấy, bạn cần chuyển đổi mã chương trình cơ sở để thay vì in các sự kiện, bạn thực sự kích hoạt các sự kiện. Những gì bạn cần làm là thêm vào mã của bạn:

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);
}

Những gì bạn đang làm ở đây, được gửi từ các sự kiện vi điều khiển Arduino chính của bạn qua dòng nối tiếp đến vi điều khiển nhỏ hơn xử lý giao tiếp USB. Bộ vi điều khiển đó sẽ lấy các "bộ đệm" đó và chuyển chúng dưới dạng bàn phím USB HID nhấn qua USB.

Coi chừng ký tự khóa ( chrtrong mã ở đây), thực sự là một mã khóa được gửi qua USB được trình điều khiển USB HID của bạn giải thích, sau đó chuyển nó thành một ký tự thực bằng cách sử dụng bố cục hiện tại mà bạn đã thiết lập cho bàn phím.

modtự này là một trong những phím bổ trợ bạn có trên bàn phím (shift, control, alt ...), 0x00không phải là phím bổ trợ.

  • Tôi sẽ viết một trình điều khiển thiết bị cửa sổ mới?

Không, bạn không cần! Với bản nâng cấp DFU, arduino của bạn sẽ được xem như một bàn phím USB bên cửa sổ.

  • Tôi có thể tạo một lớp phần mềm có thể lấy dữ liệu nối tiếp của mình và để các cửa sổ đọc nó làm đầu vào HID không?

Bạn không cần phải làm điều đó, và đó thực sự là một ý tưởng rất tồi vì nhiều lý do:

  • giải pháp của bạn sẽ không thể mang theo được và do đó bạn cần hack thứ gì đó cho mọi nền tảng bạn có thể sử dụng,
  • giải pháp của bạn sẽ ngụ ý rất nhiều mã mới; mã càng viết nhiều, càng có nhiều lỗi trong hệ thống của bạn,
  • giải pháp của bạn sẽ thực sự khó khăn, vì nó sẽ hoạt động như một trình điều khiển thiết bị (tức là vùng đất hạt nhân ) lấy đầu vào từ chương trình người dùng (tức là đất người dùng ) và có khả năng không hoạt động, là một địa ngục để gỡ lỗi và dễ xảy ra sự cố bảo mật. .. Nếu điều đó thậm chí có thể làm được!

Tôi đang sử dụng Uno, nhưng tôi sẽ xem những gì bạn đã đăng bởi vì lần trước chúng tôi đã xem xét bản cập nhật DFU nhưng chúng tôi hơi sợ những thứ bị gạch

Cuối cùng, bạn có mối quan tâm, trong một bình luận, về việc gạch arduino của bạn. Xin hãy tin tôi và tác giả của bài viết rằng bạn không thể gạch arduino của bạn làm flash firmware:

LƯU Ý: Không có cơ hội 'gạch' thiết bị bằng phương pháp này. Phần mềm khởi động Arduino có thể luôn được cập nhật bằng giao thức DFU!

Trong trường hợp có điều gì đó thực sự sai và bạn gặp phải lỗi bộ tải khởi động trong bộ điều khiển nhỏ (atmega8u2), bạn vẫn có thể khởi động lại bằng cách sử dụng một arduino hoặc lập trình viên atmel bằng cách sử dụng 6 chân bên cạnh phích cắm USB.

Cuối cùng, hãy biết rằng cách duy nhất để tạo ra một AVR, do đó, một Arduino cũng vậy, là chơi với các cầu chì và đặt lại các cầu chì lập trình. Và thậm chí sau đó, bạn có thể sử dụng HVSP để lưu thiết bị của mình, mặc dù việc lấy chip mới thường ít rắc rối hơn.


1
Cảm ơn tất cả các thông tin hữu ích, chúng tôi đã đạt được điều này.
Bất thường

Chà, cách thích hợp để biến một AVR là với quá điện áp / quá điện áp. Sau đó, nó sẽ được nướng ...
user2973

Nhưng sau đó, nó không được gọi là bricking, mà là chiên nó, hoặc như bạn nói nướng nó. Đặt 15amp qua MCU và tôi cá là bạn sẽ thấy nó nhảy qua phòng ;-)
zmo

Làm thế nào để phát hành một khóa cụ thể? Tôi muốn mô phỏng một GIỮ chính sau đó phát hành. Và cũng trong liên kết, ký tự đi đến mảng [2] trong khi ở đây đi đến [1]. Tại sao?
5argon

tốt, như trong ví dụ của tôi, bạn thực hiện theo hai bước, đầu tiên bạn nhấn phím, sau đó có độ trễ, sau đó bạn thả nó ra. Chà, sau đó bạn cần phải tự giảng về cách thức thực hiện bàn phím phần cứng, điều đó không tự nhiên và mỗi giá trị của mảng có một ý nghĩa. Xin lỗi vì tôi không có liên kết để chia sẻ atm, nhưng bất cứ khi nào bạn tìm thấy thứ gì đó đang tìm kiếm trên web, vui lòng gửi bình luận mới
zmo

6

Tôi đã tạo một dự án thay thế hoàn toàn Arduino Bootloader. Bạn có thể tải lên bản phác thảo và sử dụng nó như HID. Xem Dự án HID trên Github: https://github.com/NicoHood/HID


4
Chào mừng bạn đến với Arduino SE! Bạn có thể thêm một chút về cách sử dụng thư viện của bạn? Cảm ơn!
Chim cánh cụt vô danh

2
Đọc readme và thử các ví dụ? Tất cả ở đó, không cần phải lừa mọi thứ ở đây. Mọi thứ trên Github đều được cập nhật :)

Xin lỗi anh bạn, nó trông giống như một thư viện tuyệt vời, nhưng tài liệu của bạn thiếu điên rồ. Không có hướng dẫn cài đặt thực sự như tôi có thể nói, và toàn bộ các chủ đề trong wiki của bạn chỉ cần nói "TODO" (cụ thể là chủ đề gamepad hoàn toàn trống rỗng như thế này). : - /
BrainSlugs83

1
Trên thực tế cần phải trình bày một mô tả cơ bản ở đây: câu trả lời được yêu cầu phải có ý nghĩa ngay cả khi không có liên kết bên ngoài, có thể chết. Và cái này thì không.
Chris Stratton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.